diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index ca658f18..b49ba4c8 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -13,37 +13,68 @@ on: - '*' jobs: run-tests: - name: Run tests for ${{ matrix.os }} on ${{ matrix.python-version }} + name: Run tests for ${{ matrix.os }} (${{ matrix.shard }}) runs-on: ${{ matrix.os }} strategy: fail-fast: false + # The three estimation tests in tests/test_chs_estimate.py take about four + # minutes each; the rest of the suite takes about the same in total. They + # run on their own Linux runners; the other legs deselect them. + # yamllint disable rule:line-length matrix: - os: - - ubuntu-latest - - macos-latest - - windows-latest - python-version: - - '3.14' + include: + - os: ubuntu-latest + shard: rest + pytest_args: >- + tests --cov-report=xml --cov=./ + --deselect tests/test_chs_estimate.py::test_estimate_chs_returns_conforming_result + --deselect tests/test_chs_estimate.py::test_estimate_chs_provides_ml_inference + --deselect tests/test_chs_estimate.py::test_estimate_chs_enforces_user_fixed_constraint_value + - os: ubuntu-latest + shard: long-1 + pytest_args: >- + tests/test_chs_estimate.py::test_estimate_chs_returns_conforming_result + --cov-report=xml --cov=./ + - os: ubuntu-latest + shard: long-2 + pytest_args: >- + tests/test_chs_estimate.py::test_estimate_chs_provides_ml_inference + --cov-report=xml --cov=./ + - os: ubuntu-latest + shard: long-3 + pytest_args: >- + tests/test_chs_estimate.py::test_estimate_chs_enforces_user_fixed_constraint_value + --cov-report=xml --cov=./ + - os: macos-latest + shard: rest + pytest_args: >- + tests -m 'not long_running' + --deselect tests/test_chs_estimate.py::test_estimate_chs_returns_conforming_result + --deselect tests/test_chs_estimate.py::test_estimate_chs_provides_ml_inference + --deselect tests/test_chs_estimate.py::test_estimate_chs_enforces_user_fixed_constraint_value + - os: windows-latest + shard: rest + pytest_args: >- + tests -m 'not long_running' + --deselect tests/test_chs_estimate.py::test_estimate_chs_returns_conforming_result + --deselect tests/test_chs_estimate.py::test_estimate_chs_provides_ml_inference + --deselect tests/test_chs_estimate.py::test_estimate_chs_enforces_user_fixed_constraint_value + # yamllint enable rule:line-length steps: - uses: actions/checkout@v6 - uses: prefix-dev/setup-pixi@v0.9.4 with: - pixi-version: v0.66.0 + pixi-version: v0.70.2 cache: true cache-write: ${{ github.event_name == 'push' && github.ref_name == 'main' }} environments: tests-cpu activate-environment: true frozen: true - name: Run pytest - if: runner.os != 'Linux' || matrix.python-version != '3.14' shell: bash -l {0} - run: pixi run -e tests-cpu tests - - name: Run pytest with coverage - if: runner.os == 'Linux' && matrix.python-version == '3.14' - shell: bash -l {0} - run: pixi run -e tests-cpu tests-with-cov + run: pixi run -e tests-cpu pytest ${{ matrix.pytest_args }} - name: Upload coverage report - if: runner.os == 'Linux' && matrix.python-version == '3.14' + if: runner.os == 'Linux' uses: codecov/codecov-action@v5 env: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} @@ -54,11 +85,11 @@ jobs: - uses: actions/checkout@v6 - uses: prefix-dev/setup-pixi@v0.9.4 with: - pixi-version: v0.66.0 + pixi-version: v0.70.2 cache: true cache-write: ${{ github.event_name == 'push' && github.ref_name == 'main' }} frozen: true environments: type-checking - name: Run ty - run: pixi run -e type-checking ty + run: pixi run --locked -e type-checking prek run ty --all-files shell: bash -el {0} diff --git a/.gitignore b/.gitignore index 9ed8d4cc..239fec8a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,9 @@ # Claude Code .claude/ +# roborev local config +.roborev.toml + # Distribution / packaging *.egg *.egg-info/ diff --git a/.gitmodules b/.gitmodules index 10e09e46..9a49fc9d 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,4 +1,4 @@ [submodule ".ai-instructions"] path = .ai-instructions - url = git@github.com:OpenSourceEconomics/ai-instructions.git - branch = make-submodule + url = https://github.com/OpenSourceEconomics/ai-instructions.git + branch = main diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 2877891b..87a038e9 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,11 +1,13 @@ --- +# Specs, plans and audit artifacts under docs/superpowers are kept verbatim. +exclude: ^docs/superpowers/ repos: - repo: meta hooks: - id: check-hooks-apply - id: check-useless-excludes - repo: https://github.com/tox-dev/pyproject-fmt - rev: v2.19.0 + rev: v2.25.0 hooks: - id: pyproject-fmt - repo: https://github.com/lyz-code/yamlfix @@ -37,6 +39,7 @@ repos: - id: name-tests-test args: - --pytest-test-first + exclude: ^tests/stable_translog_reference\.py$ - id: no-commit-to-branch args: - --branch @@ -47,7 +50,7 @@ repos: hooks: - id: yamllint - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.15.6 + rev: v0.15.18 hooks: - id: ruff-check args: @@ -61,10 +64,22 @@ repos: - jupyter - pyi - python + - repo: https://github.com/astral-sh/ty-pre-commit + rev: v0.0.49 + hooks: + - id: ty + # `--no-project` stops uv from creating a `.venv`/`uv.lock` in this + # pixi-managed repo; ty resolves third-party imports from the env named + # in `[tool.ty] environment.python` (run `pixi install` once). + args: + - --no-project - repo: https://github.com/kynan/nbstripout rev: 0.9.1 hooks: - id: nbstripout + # The getting-started tutorial ships pre-rendered (`execute: false` in + # myst.yml); stripping its outputs would leave the docs site empty. + exclude: ^docs/getting_started/tutorial\.ipynb$ args: - --extra-keys - metadata.kernelspec metadata.language_info.version metadata.vscode @@ -82,3 +97,7 @@ repos: files: (AGENTS\.md|CLAUDE\.md|README\.md|modules/.*\.md|profiles/.*\.md) ci: autoupdate_schedule: monthly + # pre-commit.ci has no pixi environments and blocks network at hook runtime; + # the GitHub Actions `run-ty` job covers type checking. + skip: + - ty diff --git a/CLAUDE.md b/CLAUDE.md index 5b6d3709..07ae25b5 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -30,10 +30,10 @@ pixi run -e tests-cpu pytest tests/test_kalman_filters.py # Run a single test pixi run -e tests-cpu pytest tests/test_kalman_filters.py::test_function_name -# Type checking -pixi run ty +# Type checking (ty runs as a pre-commit hook, not a pixi task) +prek run ty --all-files -# Quality checks (linting, formatting) +# Quality checks (linting, formatting, type checking) prek run --all-files # Build documentation (mystmd, from docs/ directory) @@ -45,16 +45,16 @@ myst build Always use these command mappings: - **Python**: Use `pixi run python` instead of `python` or `python3` -- **Type checker**: Use `pixi run ty` instead of running ty/mypy/pyright directly +- **Type checker**: ty runs as a pre-commit hook (`prek run ty --all-files`), not as a + pixi task — it resolves imports from the env in `[tool.ty] environment.python` - **Tests**: Use `pixi run -e tests-cpu tests` instead of `pytest` directly - **Linting/formatting**: Use `prek run --all-files` instead of `ruff` directly - **All quality checks**: Use `prek run --all-files` Before finishing any task that modifies code, always run: -1. `pixi run ty` (type checker) 1. `pixi run -e tests-cpu tests` (tests) -1. `prek run --all-files` (quality checks) +1. `prek run --all-files` (quality checks, including the ty pre-commit hook) ## Architecture @@ -259,6 +259,10 @@ When writing new public-facing code, always accept and return `period`. Convert ## Testing -- pytest with markers: `wip`, `unit`, `integration`, `end_to_end` +- pytest with markers: `wip`, `unit`, `integration`, `end_to_end`, `long_running` - Test files mirror source structure in `tests/` - Memory profiling available via pytest-memray (Unix only) +- MATLAB AF CES / translog reproduction tests live in the parent workspace at + `../matlab_ces_repro/` (alongside `sim_repro/`), not in this library. They depend on + reference data at `/home/hmg/sciebo/Skill estimation/` and the CNLSY xls bundled + beside them. Run from the workspace root. diff --git a/GEMINI.md b/GEMINI.md new file mode 100644 index 00000000..7dc4841d --- /dev/null +++ b/GEMINI.md @@ -0,0 +1,2 @@ +@.ai-instructions/profiles/tier-a.md @.ai-instructions/modules/jax.md +@.ai-instructions/modules/optimagic.md diff --git a/docs/explanations/architecture.md b/docs/explanations/architecture.md new file mode 100644 index 00000000..7ef049be --- /dev/null +++ b/docs/explanations/architecture.md @@ -0,0 +1,105 @@ +# Package Architecture + +Skillmodels hosts three estimators under one model specification. The package +layout reflects that: + +``` +src/skillmodels/ +├── common/ Estimator-agnostic machinery +│ ├── model_spec.py ModelSpec, FactorSpec, AnchoringSpec, Normalizations +│ ├── types.py ProcessedModel, Dimensions, Labels, +│ │ EndogenousFactorsInfo, ParsingInfo, ... +│ ├── process_model.py process_model(spec) -> ProcessedModel +│ ├── process_data.py long-format data -> internal arrays +│ ├── params_index.py 4-level MultiIndex used by all estimators +│ ├── parse_params.py flat vector <-> structured params +│ ├── constraints.py get_constraints, FixedConstraintWithValue, +│ │ collect_fixed_locs, project_to_probability_constraints +│ ├── selector.py select_by_loc, align_index_names +│ ├── transition_functions.py linear / translog / log_ces / translog_af / +│ │ log_ces_af / ... +│ ├── transitions.py apply_anchored_transition (sigma-points-agnostic) +│ ├── anchoring.py anchor / unanchor states +│ ├── state_ranges.py create_state_ranges +│ ├── simulate_data.py simulate_dataset, simulate_policy_effect +│ ├── variance_decomposition.py signal/noise decomposition +│ └── diagnostic_plots.py plot_residual_boxplots, plot_likelihood_contributions +├── chs/ Cunha-Heckman-Schennach Kalman MLE +│ ├── options.py CHSEstimationOptions +│ ├── kalman_filters.py square-root unscented Kalman filter +│ ├── likelihood.py jitted log-likelihood +│ ├── likelihood_debug.py non-jitted variant with debug arrays +│ ├── maximization_inputs.py get_maximization_inputs(...) +│ ├── filtered_states.py get_filtered_states(...) +│ └── process_debug_data.py post-process Kalman debug arrays +├── af/ Antweiler-Freyberger sequential Halton MLE +│ ├── types.py AFEstimationOptions, AFEstimationResult, ... +│ ├── estimate.py estimate_af(...) -- top-level orchestration +│ ├── validate.py validate_af_model, kappa-scope / leakage checks +│ ├── params.py per-period optimagic params + constraints +│ ├── initial_period.py period-0 mixture + measurement system MLE +│ ├── transition_period.py period-t transition + measurement-system MLE +│ ├── likelihood.py jitted period-specific log-likelihoods +│ ├── halton.py quadrature nodes / weights +│ ├── batching.py obs-batching for the autodiff chunking +│ ├── posterior_states.py posterior means from the chained sample +│ └── inference.py compute_af_standard_errors (propagated +│ influence-function score bootstrap) +└── amn/ Attanasio-Meghir-Nix 2020 (three-stage) + ├── types.py AMNEstimationOptions, ... + ├── estimate.py estimate_amn(...) -- top-level orchestration + ├── mixture_em.py Stage 1: EM on the augmented mixture + ├── minimum_distance.py Stage 2: structural recovery + ├── simulate_and_regress.py Stage 3: synthetic-panel regression + │ (optional endogenous-investment control function) + ├── moments.py Spearman + Bartlett start-values + ├── start_values.py get_spearman_start_params, pool_equality_groups + ├── posterior_states.py simulate factor paths from fitted mixture + └── inference.py compute_amn_standard_errors (cluster bootstrap, + per-replicate seeds + nonconvergence filtering) +``` + +## How the layers interact + +Every estimator reads the same `ModelSpec` and produces the same canonical +params DataFrame (4-level MultiIndex +`(category, period, name1, name2)`). The differences live entirely below the +spec: + +- **CHS** consumes `process_model(spec) -> ProcessedModel`, then plugs that + into the Kalman recursion. `CHSEstimationOptions` is passed at call time + to `get_maximization_inputs(spec, data, chs_options=...)`. +- **AF** also calls `process_model`, but uses `ProcessedModel` only for the + parameter index, labels, and transition info. The Kalman filter is not + invoked; period-specific Halton designs replace the predict step. +- **AMN** likewise calls `process_model` for the index/labels, then runs its + three-stage pipeline. The result re-uses the same params DataFrame format + so the AMN output can seed CHS or AF estimation when desired. + +`process_model` itself is structural: it takes only the spec and produces +shapes, labels, transition info, and an `EndogenousFactorsInfo`. It does not +carry any estimator-specific tuning. Each estimator's options class +(`CHSEstimationOptions`, `AFEstimationOptions`, `AMNEstimationOptions`) is +passed in at call time. + +## Why this split + +The package grew organically: CHS was the original codebase; AF and AMN were +later additions. Earlier iterations stored CHS-only options on `ModelSpec`, +which made the spec leak CHS assumptions into a notionally agnostic container. +The split into `common/`, `chs/`, `af/`, `amn/` makes the scope of each piece +explicit at the import site: + +- `from skillmodels import ModelSpec` — pure structural description. +- `from skillmodels.chs import CHSEstimationOptions, get_maximization_inputs` + — CHS-specific. +- `from skillmodels.af import estimate_af, AFEstimationOptions` — AF-specific. +- `from skillmodels.common.variance_decomposition import decompose_measurement_variance` + — works for any estimator, given pre-computed filtered states. + +The architectural principle: a function lives in `common/` iff it does not +import from `chs/`, `af/`, or `amn/`. Anything that does belongs in the +relevant subpackage. There is one practical exception: +`CHSEstimationOptions` is defined in `chs/options.py` but the +`process_model` orchestration in `common/` doesn't read it (it reads the +structural `ModelSpec.n_mixtures` field instead), so the layering is clean. diff --git a/docs/explanations/names_and_concepts.md b/docs/explanations/names_and_concepts.md index 69e9e2d5..f1b7b554 100644 --- a/docs/explanations/names_and_concepts.md +++ b/docs/explanations/names_and_concepts.md @@ -76,12 +76,50 @@ of factors are arbitrary). ## Estimation Options -The `EstimationOptions` dataclass controls numerical aspects: +Each estimator has its own options dataclass, passed at call time rather than +embedded in `ModelSpec`. The three classes share no fields — what counts as a +tuning knob differs between estimators. + +`CHSEstimationOptions` (from `skillmodels.chs`) controls the Kalman MLE: - **robust_bounds**: Tightens parameter bounds to avoid numerical issues - **bounds_distance**: How much stricter to make bounds (zeroed if robust_bounds is false) -- **n_mixtures**: Number of mixture components in the distribution - **sigma_points_scale**: Controls spread of sigma points in unscented Kalman filter - **clipping_\***: Parameters for soft-clipping the log-likelihood to prevent infinities +- **start_params_strategy**: How to seed the `params_template`. `"amn"` (default) + runs the full AMN three-stage estimator and uses its parameters as the start; + `"spearman"` uses moment-based start values; `"none"` leaves entries as NaN + for the caller to fill in. + +`AFEstimationOptions` (from `skillmodels.af`) controls the sequential MLE: + +- **n_halton_points**, **n_halton_points_shock**: quadrature counts. +- **optimizer_algorithm**: the optimagic algorithm name passed to + `optimagic.minimize(algorithm=...)` (default `"fides"`; use + `"scipy_lbfgsb"` for MC sweeps). +- **start_params_strategy**: `"amn"`, `"spearman"`, `"constant"`, or `"none"`. + Same meaning as in CHS. (The mixture-component count is not an estimator option; + it is the structural field `ModelSpec.n_mixtures`.) + +`AMNEstimationOptions` (from `skillmodels.amn`) controls the three-stage +pipeline: + +- **em_max_iter**, **em_tol**, **em_n_init**, **em_reg_covar**: Stage-1 EM + numerical knobs. +- **n_simulation_draws**: Stage-3 synthetic-panel size. +- **minimum_distance_weighting**: Stage-2 weighting. `"identity"` (default) is + the paper's unweighted identity-metric criterion over per-component means and + full covariance matrices, and is currently the only implemented option. + `"optimal"` is reserved for a future Avar-weighted criterion and raises + `NotImplementedError`. +- Investment-endogeneity correction is no longer an estimation-option flag. + Attach a `CorrectionSpec` to the endogenous investment `FactorSpec` + (`FactorSpec.correction`); its presence triggers the Stage-3 control-function + correction. See + [Endogeneity Corrections](../reference_guides/endogeneity_corrections.md). + +The shared structural field — number of mixture components in the latent +distribution — lives directly on `ModelSpec.n_mixtures`, since it changes the +model itself rather than the optimizer. diff --git a/docs/explanations/notes_on_factor_scales.md b/docs/explanations/notes_on_factor_scales.md index e938faf4..09e38e80 100644 --- a/docs/explanations/notes_on_factor_scales.md +++ b/docs/explanations/notes_on_factor_scales.md @@ -8,10 +8,16 @@ Wiswall and Agostinelli define a class of transition functions with Known Locati Scale (KLS) that require fewer normalizations. Their critique potentially invalidates certain empirical estimates from CHS, but not the general estimation approach. -To get estimates that avoid renormalization issues, you can either: +To reduce the risk of renormalization issues, you can either: 1. Use fewer normalizations with KLS transition functions, or 2. Use non-KLS transition functions with one normalization per period and factor +skillmodels supports both schemes, but supporting a scheme is not the same as +guaranteeing identification: the model checker performs syntactic checks on the +normalizations, not a transition-specific rank or scale-invariance analysis. +Whether a given scheme identifies the model still depends on the transition +functions and data; see the cautions below. + As there is no natural scale for skills, neither approach is inherently better. However, we prefer using flexible non-KLS transition functions with explicit normalizations because: @@ -68,17 +74,30 @@ However, we don't have formal identification results for this. **We advise cauti when using CES or log_CES functions—think carefully about your normalizations rather than relying on automatic generation. -## Normalizations and Development Stages - -When using development stages (periods with identical transition parameters), the -normalization requirements change. - -The key insight: you can identify scale from the first period of a stage, so no later -normalizations are needed until the next stage begins. - -**Recommendations:** -- Normalize only in the first period of each stage -- For the initial stage, normalize the first two periods -- Use automatic normalizations when working with stages to avoid confusion - -This reveals another type of over-normalization in the original CHS paper. +## Normalizations and Identification + +The library distinguishes three separate things, and only the first two are +mechanical: + +1. a **syntactic normalization** you supply through `Normalizations` or + `fixed_params`; +2. an estimator **precheck** that catches some missing initial scale/location + anchors — it is a precheck, **not** a proof of identification; +3. a **transition-family identification argument**, which the library does not + establish for arbitrary models. + +Because step 3 is on you, there is no single stage-level rule of thumb that is safe +across transition functions. Use the template that matches your production function: + +- **Direct trans-log** (`translog`, `translog_af`): anchor one nonzero loading and + one intercept/location for every independently scaled factor-period. +- **Restricted CES** (`log_ces_af` with $\psi_t = 1$): relative skill/investment + scales are identified through the production restrictions, so pinning *every* first + loading can impose testable restrictions — follow the CES templates in the + estimator-specific guides rather than normalizing mechanically. +- **Intentionally restricted (original-AMN) benchmark**: a deliberately + over-restricted spec used only as a comparison point; label it as such so the extra + restrictions are not mistaken for identification requirements. + +For custom transitions you must establish identification yourself (or add a +model-specific diagnostic); the automatic checker will not do it for you. diff --git a/docs/getting_started/tutorial.ipynb b/docs/getting_started/tutorial.ipynb index b123b437..9a9ef30c 100644 --- a/docs/getting_started/tutorial.ipynb +++ b/docs/getting_started/tutorial.ipynb @@ -5,63 +5,227 @@ "id": "0", "metadata": {}, "source": [ - "# Skillmodels Quickstart\n", + "# skillmodels three-estimator tutorial\n", "\n", - "This tutorial demonstrates the basic workflow for estimating a latent factor model\n", - "using skillmodels. We'll use Example 2 from the Cunha, Heckman, and Schennach (2010)\n", - "replication files." + "skillmodels ships three estimators that share the same `ModelSpec` and the same parameter index:\n", + "\n", + "- **CHS** (Cunha-Heckman-Schennach 2010): square-root unscented Kalman MLE.\n", + "- **AF** (Antweiler-Freyberger 2025): sequential MLE with Halton quadrature over the latent posterior, period by period.\n", + "- **AMN** (Attanasio-Meghir-Nix 2020): three-stage estimator (EM on a mixture-of-normals → minimum distance → simulate-and-regress).\n", + "\n", + "This tutorial walks **CHS** and **AF** on the **CNLSY** dataset from the AF 2025 application — three waves (ages 7 / 9 / 11), a CES production function for the latent skill, and an endogenous investment factor. **AMN** appears in its role as the CHS seed: it cannot consistently fit the *restricted* CES standalone, so CHS uses AMN's three stages to build start values (see the AMN section).\n", + "\n", + "The notebook is committed with pre-rendered outputs (`execute: false`); rerun it to refresh the numbers if the API drifts. Single-machine wallclock (CPU, JAX CPU backend): roughly 1–2 hours, dominated by the CHS MLE; AF and the AMN seeding step are faster." ] }, { - "cell_type": "code", - "execution_count": null, + "cell_type": "markdown", "id": "1", "metadata": {}, - "outputs": [], "source": [ - "import pandas as pd\n", + "## Setup\n", "\n", - "from skillmodels import get_maximization_inputs\n", - "from skillmodels.config import TEST_DATA_DIR\n", - "from skillmodels.test_data.model2 import MODEL2" + "Load the long-format CNLSY measurements bundled with the package and build the CES `ModelSpec`. The model has four latent factors (`skills`, `MC`, `MN`, `investment`) plus one observed factor (`log_income`). Cognitive (`MC`) and non-cognitive (`MN`) skills are pinned to identity transitions: they enter the skills CES as additional inputs but evolve as constants over time. All factor weights inside the skills CES are estimated freely, subject to the simplex constraint (gammas non-negative, sum to one)." ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": 1, "id": "2", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-06-29T08:32:39.752336Z", + "iopub.status.busy": "2026-06-29T08:32:39.752128Z", + "iopub.status.idle": "2026-06-29T08:32:42.714390Z", + "shell.execute_reply": "2026-06-29T08:32:42.713366Z" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "An NVIDIA GPU may be present on this machine, but a CUDA-enabled jaxlib is not installed. Falling back to cpu.\n" + ] + } + ], "source": [ - "" + "from skillmodels import FactorSpec, ModelSpec, Normalizations\n", + "from skillmodels.af import AFEstimationOptions, estimate_af\n", + "from skillmodels.af.posterior_states import get_af_posterior_states\n", + "from skillmodels.chs import (\n", + " CHSEstimationOptions,\n", + " get_maximization_inputs,\n", + ")\n", + "from skillmodels.common.config import CNLSY_DATA_PATH\n", + "from skillmodels.common.individual_states import get_individual_states_from_params\n", + "from skillmodels.common.variance_decomposition import (\n", + " decompose_measurement_variance,\n", + " summarize_measurement_reliability,\n", + ")\n", + "\n", + "warnings.filterwarnings(\"ignore\", category=DeprecationWarning)\n", + "pd.options.display.float_format = \"{:.3f}\".format" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "id": "3", - "metadata": {}, - "outputs": [], + "metadata": { + "execution": { + "iopub.execute_input": "2026-06-29T08:32:42.717004Z", + "iopub.status.busy": "2026-06-29T08:32:42.716582Z", + "iopub.status.idle": "2026-06-29T08:32:42.738749Z", + "shell.execute_reply": "2026-06-29T08:32:42.737986Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "individuals: 1403\n", + "periods: [0, 1, 2]\n", + "columns: ['skill_math', 'skill_recog', 'skill_comp', 'mc_1', 'mc_2', 'mc_3', 'mc_4', 'mc_5', 'mc_6', 'mn_neg', 'mn_pos', 'mn_rotter', 'inv_reads', 'inv_museum', 'inv_praised', 'log_income_observed']\n" + ] + } + ], "source": [ - "model = MODEL2\n", - "\n", - "# Show the structure\n", - "print(\"Factors:\", list(model.factors.keys()))" + "data = pd.read_csv(CNLSY_DATA_PATH).set_index([\"caseid\", \"period\"])\n", + "print(f\"individuals: {data.index.get_level_values(0).nunique()}\")\n", + "print(f\"periods: {sorted(data.index.get_level_values(1).unique())}\")\n", + "print(f\"columns: {list(data.columns)}\")" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "id": "4", - "metadata": {}, - "outputs": [], + "metadata": { + "execution": { + "iopub.execute_input": "2026-06-29T08:32:42.741371Z", + "iopub.status.busy": "2026-06-29T08:32:42.741161Z", + "iopub.status.idle": "2026-06-29T08:32:42.755812Z", + "shell.execute_reply": "2026-06-29T08:32:42.754929Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "latent factors: ('skills', 'MC', 'MN', 'investment')\n", + "observed factors: ('log_income_observed',)\n", + "n_mixtures: 2\n" + ] + } + ], "source": [ - "data = pd.read_stata(TEST_DATA_DIR / \"model2_simulated_data.dta\")\n", - "data = data.set_index([\"caseid\", \"period\"])\n", - "data.head()" + "_N_PERIODS = 3\n", + "MC_MEASURES = tuple(f\"mc_{i + 1}\" for i in range(6))\n", + "MN_MEASURES = (\"mn_neg\", \"mn_pos\", \"mn_rotter\")\n", + "SKILL_MEASURES = (\"skill_math\", \"skill_recog\", \"skill_comp\")\n", + "INV_MEASURES = (\"inv_reads\", \"inv_museum\", \"inv_praised\")\n", + "INCOME_MEASURE = \"log_income_observed\"\n", + "\n", + "\n", + "def _measurements(meas, active_periods=None):\n", + " active = tuple(range(_N_PERIODS)) if active_periods is None else active_periods\n", + " return tuple(meas if t in active else () for t in range(_N_PERIODS))\n", + "\n", + "\n", + "def _normalizations(\n", + " meas, *, normalize_periods=None, active_periods=None, pin_first_intercept=True\n", + "):\n", + " active = tuple(range(_N_PERIODS)) if active_periods is None else active_periods\n", + " norm = tuple(range(_N_PERIODS)) if normalize_periods is None else normalize_periods\n", + " loadings, intercepts = [], []\n", + " for t in range(_N_PERIODS):\n", + " if t in active and t in norm:\n", + " loadings.append({meas[0]: 1.0})\n", + " intercepts.append({meas[0]: 0.0} if pin_first_intercept else {})\n", + " else:\n", + " loadings.append({})\n", + " intercepts.append({})\n", + " return Normalizations(loadings=tuple(loadings), intercepts=tuple(intercepts))\n", + "\n", + "\n", + "factors = {\n", + " \"skills\": FactorSpec(\n", + " measurements=_measurements(SKILL_MEASURES),\n", + " normalizations=_normalizations(SKILL_MEASURES, normalize_periods=(0, 1, 2)),\n", + " transition_function=\"log_ces\",\n", + " ),\n", + " # Cognitive (MC) and non-cognitive (MN) skills are time-invariant inputs to the\n", + " # skills CES. `af_state_role=\"static_persistent\"` tells the AF calendar adapter to\n", + " # re-apply their period-0 measurement density as a static importance block at every\n", + " # step (a no-op for CHS/AMN, which read the same spec).\n", + " \"MC\": FactorSpec(\n", + " measurements=_measurements(MC_MEASURES, active_periods=(0,)),\n", + " normalizations=_normalizations(\n", + " MC_MEASURES, active_periods=(0,), normalize_periods=(0,)\n", + " ),\n", + " transition_function=\"linear\",\n", + " has_production_shock=False,\n", + " af_state_role=\"static_persistent\",\n", + " ),\n", + " \"MN\": FactorSpec(\n", + " measurements=_measurements(MN_MEASURES, active_periods=(0,)),\n", + " normalizations=_normalizations(\n", + " MN_MEASURES, active_periods=(0,), normalize_periods=(0,)\n", + " ),\n", + " transition_function=\"linear\",\n", + " has_production_shock=False,\n", + " af_state_role=\"static_persistent\",\n", + " ),\n", + " # Investment is endogenous and reconstructed from its own measurement equation\n", + " # rather than drawn from the period-0 latent mixture, so it sets\n", + " # `is_endogenous=True, has_initial_distribution=False`. This activates the AF\n", + " # source/destination calendar adapter (period-t indicators measure investment in\n", + " # period t).\n", + " \"investment\": FactorSpec(\n", + " measurements=_measurements(INV_MEASURES, active_periods=(0, 1)),\n", + " normalizations=_normalizations(\n", + " INV_MEASURES, active_periods=(0, 1), normalize_periods=(0, 1)\n", + " ),\n", + " transition_function=\"linear\",\n", + " is_endogenous=True,\n", + " has_initial_distribution=False,\n", + " ),\n", + "}\n", + "\n", + "# Pin the time-invariant MC and MN transitions to identity: self-coefficient 1,\n", + "# cross-factor 0, constant 0. The skills CES gammas stay free so the optimizer\n", + "# discovers which factors actually feed skill growth.\n", + "fixed_rows = []\n", + "for t in range(_N_PERIODS - 1):\n", + " for factor in (\"MC\", \"MN\"):\n", + " fixed_rows.append(((\"transition\", t, factor, factor), 1.0))\n", + " for other in (\"skills\", \"MC\", \"MN\", \"investment\"):\n", + " if other != factor:\n", + " fixed_rows.append(((\"transition\", t, factor, other), 0.0))\n", + " fixed_rows.append(((\"transition\", t, factor, \"constant\"), 0.0))\n", + "\n", + "fixed_idx = pd.MultiIndex.from_tuples(\n", + " [r[0] for r in fixed_rows], names=[\"category\", \"period\", \"name1\", \"name2\"]\n", + ")\n", + "fixed_params = pd.DataFrame({\"value\": [r[1] for r in fixed_rows]}, index=fixed_idx)\n", + "\n", + "model = ModelSpec(\n", + " factors=factors,\n", + " observed_factors=(INCOME_MEASURE,),\n", + " n_mixtures=2,\n", + ")\n", + "print(f\"latent factors: {tuple(model.factors)}\")\n", + "print(f\"observed factors: {model.observed_factors}\")\n", + "print(f\"n_mixtures: {model.n_mixtures}\")" ] }, { @@ -69,51 +233,315 @@ "id": "5", "metadata": {}, "source": [ - "## Getting Maximization Inputs\n", - "\n", - "The main entry point is `get_maximization_inputs()`. It takes a model specification\n", - "and dataset, and returns everything needed to maximize the likelihood using optimagic:\n", + "## CHS: square-root unscented Kalman MLE\n", "\n", - "- `loglike`: The compiled log-likelihood function\n", - "- `gradient`: The gradient of the log-likelihood\n", - "- `loglike_and_gradient`: Combined function (more efficient)\n", - "- `debug_loglike`: Uncompiled version for debugging\n", - "- `params_template`: Parameter DataFrame with bounds and starting values\n", - "- `constraints`: Parameter constraints for optimization" + "CHS estimation runs in two steps: `get_maximization_inputs(...)` compiles the jitted likelihood, gradients, and constraints from the spec + data; then we hand the bundle to `optimagic.maximize`. Defaults are CHS's `start_params_strategy=\"amn\"` (runs AMN first under the hood to seed the param template), `robust_bounds=True`, and `bounds_distance=1e-3`." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "id": "6", - "metadata": {}, - "outputs": [], + "metadata": { + "execution": { + "iopub.execute_input": "2026-06-29T08:32:42.757835Z", + "iopub.status.busy": "2026-06-29T08:32:42.757648Z", + "iopub.status.idle": "2026-06-29T08:32:48.703368Z", + "shell.execute_reply": "2026-06-29T08:32:48.702321Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "params_template shape: (214, 3)\n", + "n_constraints: 84\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/amn/start_values.py:431: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[loc, \"value\"] = float(features[rows, f_idx].mean())\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/amn/start_values.py:434: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[w_loc, \"value\"] = float(rows.mean())\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/amn/start_values.py:552: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[loc_sd, \"value\"] = float(result.meas_sds[local_idx])\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/amn/start_values.py:549: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[loc_load, \"value\"] = float(result.loadings[local_idx])\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/amn/start_values.py:552: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[loc_sd, \"value\"] = float(result.meas_sds[local_idx])\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/amn/start_values.py:549: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[loc_load, \"value\"] = float(result.loadings[local_idx])\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/amn/start_values.py:552: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[loc_sd, \"value\"] = float(result.meas_sds[local_idx])\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/amn/start_values.py:549: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[loc_load, \"value\"] = float(result.loadings[local_idx])\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/amn/start_values.py:552: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[loc_sd, \"value\"] = float(result.meas_sds[local_idx])\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/amn/start_values.py:549: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[loc_load, \"value\"] = float(result.loadings[local_idx])\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/amn/start_values.py:552: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[loc_sd, \"value\"] = float(result.meas_sds[local_idx])\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/amn/start_values.py:549: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[loc_load, \"value\"] = float(result.loadings[local_idx])\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/amn/start_values.py:552: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[loc_sd, \"value\"] = float(result.meas_sds[local_idx])\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/amn/start_values.py:549: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[loc_load, \"value\"] = float(result.loadings[local_idx])\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/amn/start_values.py:552: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[loc_sd, \"value\"] = float(result.meas_sds[local_idx])\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/amn/start_values.py:549: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[loc_load, \"value\"] = float(result.loadings[local_idx])\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/amn/start_values.py:576: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[loc, \"value\"] = sd_factor\n" + ] + } + ], "source": [ - "max_inputs = get_maximization_inputs(model, data)\n", - "print(\"Available keys:\", list(max_inputs.keys()))" + "chs_options = CHSEstimationOptions(\n", + " robust_bounds=True,\n", + " bounds_distance=1e-3,\n", + ")\n", + "max_inputs = get_maximization_inputs(\n", + " model_spec=model,\n", + " data=data,\n", + " chs_options=chs_options,\n", + " fixed_params=fixed_params,\n", + ")\n", + "print(f\"params_template shape: {max_inputs['params_template'].shape}\")\n", + "print(f\"n_constraints: {len(max_inputs['constraints'])}\")" ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": 5, "id": "7", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-06-29T08:32:48.705394Z", + "iopub.status.busy": "2026-06-29T08:32:48.705163Z", + "iopub.status.idle": "2026-06-29T09:18:35.831694Z", + "shell.execute_reply": "2026-06-29T09:18:35.826818Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CHS success: True, loglike: -39542.42\n" + ] + } + ], "source": [ - "## Parameter Template\n", - "\n", - "The `params_template` is a pandas DataFrame with:\n", - "- A MultiIndex identifying each parameter (category, period, name1, name2)\n", - "- Columns for `value` (to be filled with starting values), `lower_bound`, `upper_bound`" + "chs_result = om.maximize(\n", + " fun=max_inputs[\"loglike\"],\n", + " params=max_inputs[\"params_template\"],\n", + " algorithm=\"scipy_lbfgsb\",\n", + " fun_and_jac=max_inputs[\"loglike_and_gradient\"],\n", + " constraints=max_inputs[\"constraints\"],\n", + ")\n", + "chs_params = chs_result.params\n", + "print(f\"CHS success: {chs_result.success}, loglike: {chs_result.fun:.2f}\")" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "id": "8", - "metadata": {}, - "outputs": [], + "metadata": { + "execution": { + "iopub.execute_input": "2026-06-29T09:18:35.835312Z", + "iopub.status.busy": "2026-06-29T09:18:35.834946Z", + "iopub.status.idle": "2026-06-29T09:18:53.202115Z", + "shell.execute_reply": "2026-06-29T09:18:53.200935Z" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/amn/start_values.py:431: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[loc, \"value\"] = float(features[rows, f_idx].mean())\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/amn/start_values.py:434: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[w_loc, \"value\"] = float(rows.mean())\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/amn/start_values.py:552: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[loc_sd, \"value\"] = float(result.meas_sds[local_idx])\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/amn/start_values.py:549: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[loc_load, \"value\"] = float(result.loadings[local_idx])\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/amn/start_values.py:552: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[loc_sd, \"value\"] = float(result.meas_sds[local_idx])\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/amn/start_values.py:549: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[loc_load, \"value\"] = float(result.loadings[local_idx])\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/amn/start_values.py:552: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[loc_sd, \"value\"] = float(result.meas_sds[local_idx])\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/amn/start_values.py:549: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[loc_load, \"value\"] = float(result.loadings[local_idx])\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/amn/start_values.py:552: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[loc_sd, \"value\"] = float(result.meas_sds[local_idx])\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/amn/start_values.py:549: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[loc_load, \"value\"] = float(result.loadings[local_idx])\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/amn/start_values.py:552: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[loc_sd, \"value\"] = float(result.meas_sds[local_idx])\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/amn/start_values.py:549: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[loc_load, \"value\"] = float(result.loadings[local_idx])\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/amn/start_values.py:552: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[loc_sd, \"value\"] = float(result.meas_sds[local_idx])\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/amn/start_values.py:549: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[loc_load, \"value\"] = float(result.loadings[local_idx])\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/amn/start_values.py:552: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[loc_sd, \"value\"] = float(result.meas_sds[local_idx])\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/amn/start_values.py:549: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[loc_load, \"value\"] = float(result.loadings[local_idx])\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/amn/start_values.py:576: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[loc, \"value\"] = sd_factor\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
mean_signalmin_signalmax_signal
measurement
skill_recog0.8010.7390.918
mc_20.7070.7070.707
skill_comp0.7030.6190.861
mc_10.6900.6900.690
mc_30.6760.6760.676
mc_60.6730.6730.673
mc_40.5260.5260.526
skill_math0.4890.4750.510
mn_neg0.4690.4690.469
mc_50.4320.4320.432
mn_pos0.4250.4250.425
mn_rotter0.0840.0840.084
\n", + "
" + ], + "text/plain": [ + " mean_signal min_signal max_signal\n", + "measurement \n", + "skill_recog 0.801 0.739 0.918\n", + "mc_2 0.707 0.707 0.707\n", + "skill_comp 0.703 0.619 0.861\n", + "mc_1 0.690 0.690 0.690\n", + "mc_3 0.676 0.676 0.676\n", + "mc_6 0.673 0.673 0.673\n", + "mc_4 0.526 0.526 0.526\n", + "skill_math 0.489 0.475 0.510\n", + "mn_neg 0.469 0.469 0.469\n", + "mc_5 0.432 0.432 0.432\n", + "mn_pos 0.425 0.425 0.425\n", + "mn_rotter 0.084 0.084 0.084" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "params_template = max_inputs[\"params_template\"]\n", - "params_template.head(10)" + "chs_filtered = get_individual_states_from_params(\n", + " model_spec=model, data=data, params=chs_params, chs_options=chs_options\n", + ")\n", + "chs_states = chs_filtered[\"unanchored_states\"][\"states\"]\n", + "chs_decomp = decompose_measurement_variance(\n", + " model_spec=model, params=chs_params, filtered_states=chs_states\n", + ")\n", + "chs_reliability = summarize_measurement_reliability(chs_decomp)\n", + "chs_reliability" ] }, { @@ -121,150 +549,2304 @@ "id": "9", "metadata": {}, "source": [ - "## Choosing Starting Values\n", + "## AF: sequential Halton-quadrature MLE\n", "\n", - "Good starting values are important for optimization. As a rule of thumb:\n", + "AF estimates each period in turn: period 0 fits the joint mixture-of-normals + period-0 measurement system; each subsequent period takes the previous period's posterior and runs a period-specific MLE via `optimagic.minimize` with the algorithm in `AFEstimationOptions.optimizer_algorithm` (default `\"fides\"`; pass `\"scipy_lbfgsb\"` for Monte Carlo sweeps where a deterministic stopping rule matters).\n", "\n", - "- If measurements are standardized, use 1.0 for free loadings and 0.0 for free intercepts\n", - "- Start measurement and shock standard deviations slightly larger than expected\n", - "- Initial state means can often start at 0\n", - "\n", - "Here we set reasonable defaults:" + "Default `start_params_strategy=\"amn\"` runs the full AMN three-stage estimator upfront and uses its parameters to seed each AF period. The number of mixture components is read from `ModelSpec.n_mixtures` (set to 2 above), shared across all three estimators." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "id": "10", - "metadata": {}, - "outputs": [], + "metadata": { + "execution": { + "iopub.execute_input": "2026-06-29T09:18:53.205706Z", + "iopub.status.busy": "2026-06-29T09:18:53.205420Z", + "iopub.status.idle": "2026-06-29T09:22:10.970887Z", + "shell.execute_reply": "2026-06-29T09:22:10.969782Z" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/af/estimate.py:345: UserWarning: Restricted-CES scale system ('MC', 'MN', 'skills') period 0: 3 independent scale pins (loadings) across the system, but the CES restrictions identify the relative scales from a SINGLE primitive anchor. 2 of them are testable restrictions, not normalizations.\n", + " validate_af_model(model_spec, fixed_params, constraints)\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/af/estimate.py:345: UserWarning: Factor 'skills': built-in transition 'log_ces' enumerates parameters over ALL factors including observed factors ('log_income_observed',), so they enter the production function with free coefficients. The AF model assumes observed factors affect skills only through the investment equation. Use a production-factors-only transition ('translog_af' or 'log_ces_af'), or pin every observed-factor transition coefficient to 0.0 via `fixed_params`, to avoid changing the production estimand.\n", + " validate_af_model(model_spec, fixed_params, constraints)\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/af/estimate.py:345: UserWarning: Factor 'MC': built-in transition 'linear' enumerates parameters over ALL factors including observed factors ('log_income_observed',), so they enter the production function with free coefficients. The AF model assumes observed factors affect skills only through the investment equation. Use a production-factors-only transition ('translog_af' or 'log_ces_af'), or pin every observed-factor transition coefficient to 0.0 via `fixed_params`, to avoid changing the production estimand.\n", + " validate_af_model(model_spec, fixed_params, constraints)\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/af/estimate.py:345: UserWarning: Factor 'MN': built-in transition 'linear' enumerates parameters over ALL factors including observed factors ('log_income_observed',), so they enter the production function with free coefficients. The AF model assumes observed factors affect skills only through the investment equation. Use a production-factors-only transition ('translog_af' or 'log_ces_af'), or pin every observed-factor transition coefficient to 0.0 via `fixed_params`, to avoid changing the production estimand.\n", + " validate_af_model(model_spec, fixed_params, constraints)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/af/params.py:357: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[idx, \"lower_bound\"] = bounds_distance\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/af/params.py:364: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[loc, \"value\"] = val\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/af/params.py:365: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[loc, \"lower_bound\"] = val\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/af/params.py:366: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[loc, \"upper_bound\"] = val\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/af/params.py:372: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[loc, \"value\"] = val\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/af/params.py:373: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[loc, \"lower_bound\"] = val\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/af/params.py:374: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[loc, \"upper_bound\"] = val\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/af/initial_period.py:429: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[idx, \"value\"] = obs_sds.get(parts[0], meas_sd * 0.5)\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/af/initial_period.py:431: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[idx, \"value\"] = 0.0\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/af/initial_period.py:377: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[idx, \"value\"] = max(obs_sd * 0.5, 0.01)\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/af/initial_period.py:383: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[idx, \"value\"] = 1.0\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/af/initial_period.py:392: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[idx, \"value\"] = 0.0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/af/transition_period.py:1079: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[idx, \"value\"] = 0.5\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/af/transition_period.py:1090: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[idx, \"value\"] = max(obs_sd * 0.5, 0.01)\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/af/transition_period.py:1096: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[idx, \"value\"] = 1.0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/af/transition_period.py:1079: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[idx, \"value\"] = 0.5\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/af/transition_period.py:1090: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[idx, \"value\"] = max(obs_sd * 0.5, 0.01)\n", + "/home/hmga/skillmodels-applications/skillmodels/src/skillmodels/af/transition_period.py:1096: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " params.loc[idx, \"value\"] = 1.0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "AF per-period success: [True, True, True], per-period log-likelihoods: ['-14.93', '-21.16', '-22.86']\n" + ] + } + ], "source": [ - "params = params_template.copy()\n", - "\n", - "# Set starting values by category\n", - "for category in params.index.get_level_values(\"category\").unique():\n", - " if category == \"loadings\":\n", - " params.loc[category, \"value\"] = 1.0\n", - " elif category == \"controls\":\n", - " params.loc[category, \"value\"] = 0.0\n", - " elif category in (\"meas_sds\", \"shock_sds\") or category == \"initial_cholcovs\":\n", - " params.loc[category, \"value\"] = 0.5\n", - " elif category == \"initial_states\":\n", - " params.loc[category, \"value\"] = 0.0\n", - " elif category == \"mixture_weights\":\n", - " params.loc[category, \"value\"] = 1.0\n", - " elif category == \"transition\":\n", - " # Set transition parameters to reasonable defaults\n", - " params.loc[category, \"value\"] = 0.5\n", - "\n", - "params.head(10)" + "af_options = AFEstimationOptions(\n", + " n_halton_points=100,\n", + " n_halton_points_shock=50,\n", + " optimizer_algorithm=\"scipy_lbfgsb\",\n", + ")\n", + "af_result = estimate_af(\n", + " model_spec=model,\n", + " data=data,\n", + " options=af_options,\n", + " fixed_params=fixed_params,\n", + ")\n", + "af_lls = [pr.loglikelihood for pr in af_result.period_results]\n", + "print(\n", + " f\"AF per-period success: {[bool(pr.success) for pr in af_result.period_results]}, \"\n", + " f\"per-period log-likelihoods: {[f'{ll:.2f}' for ll in af_lls]}\"\n", + ")" ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": 8, "id": "11", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-06-29T09:22:10.972958Z", + "iopub.status.busy": "2026-06-29T09:22:10.972726Z", + "iopub.status.idle": "2026-06-29T09:22:16.257808Z", + "shell.execute_reply": "2026-06-29T09:22:16.256615Z" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
mean_signalmin_signalmax_signal
measurement
skill_recog0.7730.7260.819
skill_comp0.7140.6120.816
mc_20.7080.7080.708
mc_30.6850.6850.685
mc_10.6760.6760.676
mc_60.6630.6630.663
mc_40.5310.5310.531
mc_50.4350.4350.435
mn_neg0.4040.4040.404
mn_pos0.4000.4000.400
skill_math0.3980.3770.419
mn_rotter0.0820.0820.082
\n", + "
" + ], + "text/plain": [ + " mean_signal min_signal max_signal\n", + "measurement \n", + "skill_recog 0.773 0.726 0.819\n", + "skill_comp 0.714 0.612 0.816\n", + "mc_2 0.708 0.708 0.708\n", + "mc_3 0.685 0.685 0.685\n", + "mc_1 0.676 0.676 0.676\n", + "mc_6 0.663 0.663 0.663\n", + "mc_4 0.531 0.531 0.531\n", + "mc_5 0.435 0.435 0.435\n", + "mn_neg 0.404 0.404 0.404\n", + "mn_pos 0.400 0.400 0.400\n", + "skill_math 0.398 0.377 0.419\n", + "mn_rotter 0.082 0.082 0.082" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "## JAX Compilation\n", - "\n", - "Skillmodels uses JAX for just-in-time compilation and automatic differentiation.\n", - "The first call to `loglike` or `gradient` triggers compilation, which takes a few\n", - "seconds. Subsequent calls are very fast." + "af_posterior = get_af_posterior_states(\n", + " af_result=af_result,\n", + " model_spec=model,\n", + " data=data,\n", + " n_halton_points=200,\n", + ")\n", + "af_states = af_posterior[\"unanchored_states\"][\"states\"]\n", + "af_decomp = decompose_measurement_variance(\n", + " model_spec=model, params=af_result.params, filtered_states=af_states\n", + ")\n", + "af_reliability = summarize_measurement_reliability(af_decomp)\n", + "af_reliability" ] }, { - "cell_type": "code", - "execution_count": null, + "cell_type": "markdown", "id": "12", "metadata": {}, - "outputs": [], "source": [ - "loglike = max_inputs[\"loglike\"]\n", - "gradient = max_inputs[\"gradient\"]\n", - "loglike_and_gradient = max_inputs[\"loglike_and_gradient\"]" + "## AMN: three-stage mixture-of-normals\n", + "\n", + "AMN's three stages are EM on the augmented measurement vector (mixture-of-normals), minimum-distance recovery of the structural parameters, and a simulate-and-regress step on the fitted mixture for the production function. With `ModelSpec.n_mixtures=2` the Stage-1 EM fits a 2-component Gaussian mixture on the joint $(M, X)$ vector — the kind of non-Gaussian latent structure AMN is designed for.\n", + "\n", + "On **this** model AMN does not run standalone: `estimate_amn` deliberately refuses the *restricted* CES (`log_ces`) because its Stage-3 regression omits the Freyberger (2025) primitive-scale recovery, so a standalone fit would be inconsistent. Its role here is instead to **seed CHS** — `CHSEstimationOptions` defaults to `start_params_strategy=\"amn\"`, so the CHS fit above already ran AMN's three stages to build its start values. For a standalone AMN fit of a CES production function, use `log_ces_general` (AMN fits the transformed general CES and recovers the primitive scales via `recover_primitive_ces_scales`); see the AMN how-to for AMN on its native mixture-of-normals ground." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "id": "13", - "metadata": {}, - "outputs": [], + "metadata": { + "execution": { + "iopub.execute_input": "2026-06-29T09:22:16.260184Z", + "iopub.status.busy": "2026-06-29T09:22:16.259967Z", + "iopub.status.idle": "2026-06-29T09:22:16.264768Z", + "shell.execute_reply": "2026-06-29T09:22:16.263687Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CHS start-value strategy: 'amn' (AMN seeds CHS)\n" + ] + } + ], "source": [ - "# First call includes compilation time\n", - "loglike_value = loglike(params)\n", - "print(f\"Log-likelihood at starting values: {loglike_value:.2f}\")" + "# AMN cannot consistently fit the restricted CES (`log_ces`) standalone, so here it\n", + "# seeds CHS instead: `CHSEstimationOptions` defaults to `start_params_strategy=\"amn\"`,\n", + "# i.e. the CHS fit above already ran AMN's three stages to build its start values.\n", + "seed_strategy = chs_options.start_params_strategy\n", + "print(f\"CHS start-value strategy: {seed_strategy!r} (AMN seeds CHS)\")" ] }, { "cell_type": "markdown", - "id": "14", + "id": "15", "metadata": {}, "source": [ - "## Constraints\n", + "## Cross-estimator comparison\n", "\n", - "Skillmodels automatically generates constraints from the model specification:\n", - "- Fixed parameters (normalized loadings and intercepts)\n", - "- Stagemap equality constraints\n", - "- Bound constraints\n", + "The three estimators target the same likelihood under different approximations / objectives. Below we line up:\n", "\n", - "You can add additional constraints for your specific model." + "1. Period-0 measurement loadings for the `skill_*` indicators.\n", + "2. CES production-function gammas + φ for the period-0 → period-1 skills transition.\n", + "3. Signal-share scatter: do they agree on which measurements are high-noise?" ] }, { "cell_type": "code", - "execution_count": null, - "id": "15", - "metadata": {}, - "outputs": [], + "execution_count": 10, + "id": "16", + "metadata": { + "execution": { + "iopub.execute_input": "2026-06-29T09:22:16.266706Z", + "iopub.status.busy": "2026-06-29T09:22:16.266472Z", + "iopub.status.idle": "2026-06-29T09:22:16.293008Z", + "shell.execute_reply": "2026-06-29T09:22:16.291814Z" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
estimatorAFCHS
measurement
skill_comp1.3731.496
skill_math1.0001.000
skill_recog1.3761.564
\n", + "
" + ], + "text/plain": [ + "estimator AF CHS\n", + "measurement \n", + "skill_comp 1.373 1.496\n", + "skill_math 1.000 1.000\n", + "skill_recog 1.376 1.564" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "constraints = max_inputs[\"constraints\"]\n", - "print(f\"Number of auto-generated constraints: {len(constraints)}\")" + "estimators = {\n", + " \"CHS\": chs_params,\n", + " \"AF\": af_result.params,\n", + "}\n", + "\n", + "\n", + "def _free_loading(params, period, meas):\n", + " loc = (\"loadings\", period, meas, \"skills\")\n", + " if loc not in params.index:\n", + " return None\n", + " return float(params.loc[loc, \"value\"])\n", + "\n", + "\n", + "loading_rows = []\n", + "for est, params in estimators.items():\n", + " for meas in SKILL_MEASURES:\n", + " value = _free_loading(params, period=0, meas=meas)\n", + " if value is None:\n", + " continue\n", + " loading_rows.append({\"estimator\": est, \"measurement\": meas, \"loading\": value})\n", + "loadings_df = pd.DataFrame(loading_rows)\n", + "loadings_pivot = loadings_df.pivot(\n", + " index=\"measurement\", columns=\"estimator\", values=\"loading\"\n", + ")\n", + "loadings_pivot" ] }, { - "cell_type": "markdown", - "id": "16", - "metadata": {}, + "cell_type": "code", + "execution_count": 11, + "id": "17", + "metadata": { + "execution": { + "iopub.execute_input": "2026-06-29T09:22:16.294928Z", + "iopub.status.busy": "2026-06-29T09:22:16.294687Z", + "iopub.status.idle": "2026-06-29T09:22:18.823631Z", + "shell.execute_reply": "2026-06-29T09:22:18.822946Z" + } + }, + "outputs": [ + { + "data": { + "application/vnd.plotly.v1+json": { + "config": { + "plotlyServerURL": "https://plot.ly" + }, + "data": [ + { + "name": "CHS", + "type": "bar", + "x": [ + "skill_math", + "skill_recog", + "skill_comp" + ], + "y": { + "bdata": "AAAAAAAA8D+mai3Q7wT5PwWoimC57fc/", + "dtype": "f8" + } + }, + { + "name": "AF", + "type": "bar", + "x": [ + "skill_math", + "skill_recog", + "skill_comp" + ], + "y": { + "bdata": "AAAAAAAA8D/RnhnsWgL2PwusBrQN9/U/", + "dtype": "f8" + } + } + ], + "layout": { + "barmode": "group", + "template": { + "data": { + "bar": [ + { + "error_x": { + "color": "#2a3f5f" + }, + "error_y": { + "color": "#2a3f5f" + }, + "marker": { + "line": { + "color": "white", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "bar" + } + ], + "barpolar": [ + { + "marker": { + "line": { + "color": "white", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "barpolar" + } + ], + "carpet": [ + { + "aaxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "#C8D4E3", + "linecolor": "#C8D4E3", + "minorgridcolor": "#C8D4E3", + "startlinecolor": "#2a3f5f" + }, + "baxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "#C8D4E3", + "linecolor": "#C8D4E3", + "minorgridcolor": "#C8D4E3", + "startlinecolor": "#2a3f5f" + }, + "type": "carpet" + } + ], + "choropleth": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "choropleth" + } + ], + "contour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0.0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1.0, + "#f0f921" + ] + ], + "type": "contour" + } + ], + "contourcarpet": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "contourcarpet" + } + ], + "heatmap": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0.0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1.0, + "#f0f921" + ] + ], + "type": "heatmap" + } + ], + "histogram": [ + { + "marker": { + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "histogram" + } + ], + "histogram2d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0.0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1.0, + "#f0f921" + ] + ], + "type": "histogram2d" + } + ], + "histogram2dcontour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0.0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1.0, + "#f0f921" + ] + ], + "type": "histogram2dcontour" + } + ], + "mesh3d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "mesh3d" + } + ], + "parcoords": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "parcoords" + } + ], + "pie": [ + { + "automargin": true, + "type": "pie" + } + ], + "scatter": [ + { + "fillpattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + }, + "type": "scatter" + } + ], + "scatter3d": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatter3d" + } + ], + "scattercarpet": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattercarpet" + } + ], + "scattergeo": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergeo" + } + ], + "scattergl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergl" + } + ], + "scattermap": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattermap" + } + ], + "scattermapbox": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattermapbox" + } + ], + "scatterpolar": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolar" + } + ], + "scatterpolargl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolargl" + } + ], + "scatterternary": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterternary" + } + ], + "surface": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0.0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1.0, + "#f0f921" + ] + ], + "type": "surface" + } + ], + "table": [ + { + "cells": { + "fill": { + "color": "#EBF0F8" + }, + "line": { + "color": "white" + } + }, + "header": { + "fill": { + "color": "#C8D4E3" + }, + "line": { + "color": "white" + } + }, + "type": "table" + } + ] + }, + "layout": { + "annotationdefaults": { + "arrowcolor": "#2a3f5f", + "arrowhead": 0, + "arrowwidth": 1 + }, + "autotypenumbers": "strict", + "coloraxis": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "colorscale": { + "diverging": [ + [ + 0, + "#8e0152" + ], + [ + 0.1, + "#c51b7d" + ], + [ + 0.2, + "#de77ae" + ], + [ + 0.3, + "#f1b6da" + ], + [ + 0.4, + "#fde0ef" + ], + [ + 0.5, + "#f7f7f7" + ], + [ + 0.6, + "#e6f5d0" + ], + [ + 0.7, + "#b8e186" + ], + [ + 0.8, + "#7fbc41" + ], + [ + 0.9, + "#4d9221" + ], + [ + 1, + "#276419" + ] + ], + "sequential": [ + [ + 0.0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1.0, + "#f0f921" + ] + ], + "sequentialminus": [ + [ + 0.0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1.0, + "#f0f921" + ] + ] + }, + "colorway": [ + "#636efa", + "#EF553B", + "#00cc96", + "#ab63fa", + "#FFA15A", + "#19d3f3", + "#FF6692", + "#B6E880", + "#FF97FF", + "#FECB52" + ], + "font": { + "color": "#2a3f5f" + }, + "geo": { + "bgcolor": "white", + "lakecolor": "white", + "landcolor": "white", + "showlakes": true, + "showland": true, + "subunitcolor": "#C8D4E3" + }, + "hoverlabel": { + "align": "left" + }, + "hovermode": "closest", + "mapbox": { + "style": "light" + }, + "paper_bgcolor": "white", + "plot_bgcolor": "white", + "polar": { + "angularaxis": { + "gridcolor": "#EBF0F8", + "linecolor": "#EBF0F8", + "ticks": "" + }, + "bgcolor": "white", + "radialaxis": { + "gridcolor": "#EBF0F8", + "linecolor": "#EBF0F8", + "ticks": "" + } + }, + "scene": { + "xaxis": { + "backgroundcolor": "white", + "gridcolor": "#DFE8F3", + "gridwidth": 2, + "linecolor": "#EBF0F8", + "showbackground": true, + "ticks": "", + "zerolinecolor": "#EBF0F8" + }, + "yaxis": { + "backgroundcolor": "white", + "gridcolor": "#DFE8F3", + "gridwidth": 2, + "linecolor": "#EBF0F8", + "showbackground": true, + "ticks": "", + "zerolinecolor": "#EBF0F8" + }, + "zaxis": { + "backgroundcolor": "white", + "gridcolor": "#DFE8F3", + "gridwidth": 2, + "linecolor": "#EBF0F8", + "showbackground": true, + "ticks": "", + "zerolinecolor": "#EBF0F8" + } + }, + "shapedefaults": { + "line": { + "color": "#2a3f5f" + } + }, + "ternary": { + "aaxis": { + "gridcolor": "#DFE8F3", + "linecolor": "#A2B1C6", + "ticks": "" + }, + "baxis": { + "gridcolor": "#DFE8F3", + "linecolor": "#A2B1C6", + "ticks": "" + }, + "bgcolor": "white", + "caxis": { + "gridcolor": "#DFE8F3", + "linecolor": "#A2B1C6", + "ticks": "" + } + }, + "title": { + "x": 0.05 + }, + "xaxis": { + "automargin": true, + "gridcolor": "#EBF0F8", + "linecolor": "#EBF0F8", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "#EBF0F8", + "zerolinewidth": 2 + }, + "yaxis": { + "automargin": true, + "gridcolor": "#EBF0F8", + "linecolor": "#EBF0F8", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "#EBF0F8", + "zerolinewidth": 2 + } + } + }, + "title": { + "text": "Period-0 skill loadings: CHS vs AF" + }, + "yaxis": { + "title": { + "text": "loading" + } + } + } + } + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ - "## Estimation with optimagic\n", - "\n", - "To estimate the model, use optimagic's `maximize` function:\n", + "fig = go.Figure()\n", + "for est in (\"CHS\", \"AF\"):\n", + " sub = loadings_df[loadings_df[\"estimator\"] == est]\n", + " fig.add_trace(go.Bar(name=est, x=sub[\"measurement\"], y=sub[\"loading\"]))\n", + "fig.update_layout(\n", + " title=\"Period-0 skill loadings: CHS vs AF\",\n", + " barmode=\"group\",\n", + " template=\"plotly_white\",\n", + " yaxis_title=\"loading\",\n", + ")\n", + "fig" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "18", + "metadata": { + "execution": { + "iopub.execute_input": "2026-06-29T09:22:18.826321Z", + "iopub.status.busy": "2026-06-29T09:22:18.825917Z", + "iopub.status.idle": "2026-06-29T09:22:18.838705Z", + "shell.execute_reply": "2026-06-29T09:22:18.837944Z" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
gamma_skillsgamma_investmentphi
estimator
CHS0.8180.026-0.145
AF0.7920.118-1.063
\n", + "
" + ], + "text/plain": [ + " gamma_skills gamma_investment phi\n", + "estimator \n", + "CHS 0.818 0.026 -0.145\n", + "AF 0.792 0.118 -1.063" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def _safe_float(params, loc):\n", + " if loc not in params.index:\n", + " return float(\"nan\")\n", + " return float(params.loc[loc, \"value\"])\n", "\n", - "```python\n", - "import optimagic as om\n", "\n", - "result = om.maximize(\n", - " fun=loglike,\n", - " params=params,\n", - " algorithm=\"scipy_lbfgsb\",\n", - " fun_and_jac=loglike_and_gradient,\n", - " constraints=constraints,\n", + "ces_rows: list[dict[str, float | str]] = []\n", + "for est, params in estimators.items():\n", + " row: dict[str, float | str] = {\"estimator\": est}\n", + " for col in (\"skills\", \"investment\"):\n", + " row[f\"gamma_{col}\"] = _safe_float(params, (\"transition\", 0, \"skills\", col))\n", + " row[\"phi\"] = _safe_float(params, (\"transition\", 0, \"skills\", \"phi\"))\n", + " ces_rows.append(row)\n", + "ces_df = pd.DataFrame(ces_rows).set_index(\"estimator\")\n", + "ces_df" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "19", + "metadata": { + "execution": { + "iopub.execute_input": "2026-06-29T09:22:18.840717Z", + "iopub.status.busy": "2026-06-29T09:22:18.840521Z", + "iopub.status.idle": "2026-06-29T09:22:18.881311Z", + "shell.execute_reply": "2026-06-29T09:22:18.880444Z" + } + }, + "outputs": [ + { + "data": { + "application/vnd.plotly.v1+json": { + "config": { + "plotlyServerURL": "https://plot.ly" + }, + "data": [ + { + "marker": { + "size": 8 + }, + "mode": "markers", + "name": "AF vs CHS", + "type": "scatter", + "x": { + "bdata": "WW7/C5EW5j+ARTDW8J/mP4h4UM78n+U/rMhQdUPT4D8S0w+4PKXbP3YpLcXdieU/ANkXfV4C3j9poQ4OpznbPw5BgIpXi7U/qUjzm9aM6z9L0qwiwMjeP+Z7X8puYO0/UwoEU+sV5D8tW1RFPlPgPwB2VOA65uc/", + "dtype": "f8" + }, + "y": { + "bdata": "OJLE5dad5T+TptDH9KjmP7+a36k86eU/KDyWztL/4D+i7FeJDtfbP1qXYwviNOU/8RpIRBbZ2T8qw3D75ZzZP2lzoUMuBbU/muHrcEAb6j9iNjwW883aP+6VVfQkOOo/ecqS7pqV4z9FPpEejh3YP7beDHPsPec/", + "dtype": "f8" + } + }, + { + "line": { + "color": "gray", + "dash": "dash" + }, + "mode": "lines", + "showlegend": false, + "type": "scatter", + "x": [ + 0.08211030150546396, + 0.9180215790364599 + ], + "y": [ + 0.08211030150546396, + 0.9180215790364599 + ] + } + ], + "layout": { + "height": 520, + "template": { + "data": { + "bar": [ + { + "error_x": { + "color": "#2a3f5f" + }, + "error_y": { + "color": "#2a3f5f" + }, + "marker": { + "line": { + "color": "white", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "bar" + } + ], + "barpolar": [ + { + "marker": { + "line": { + "color": "white", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "barpolar" + } + ], + "carpet": [ + { + "aaxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "#C8D4E3", + "linecolor": "#C8D4E3", + "minorgridcolor": "#C8D4E3", + "startlinecolor": "#2a3f5f" + }, + "baxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "#C8D4E3", + "linecolor": "#C8D4E3", + "minorgridcolor": "#C8D4E3", + "startlinecolor": "#2a3f5f" + }, + "type": "carpet" + } + ], + "choropleth": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "choropleth" + } + ], + "contour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0.0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1.0, + "#f0f921" + ] + ], + "type": "contour" + } + ], + "contourcarpet": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "contourcarpet" + } + ], + "heatmap": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0.0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1.0, + "#f0f921" + ] + ], + "type": "heatmap" + } + ], + "histogram": [ + { + "marker": { + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "histogram" + } + ], + "histogram2d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0.0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1.0, + "#f0f921" + ] + ], + "type": "histogram2d" + } + ], + "histogram2dcontour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0.0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1.0, + "#f0f921" + ] + ], + "type": "histogram2dcontour" + } + ], + "mesh3d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "mesh3d" + } + ], + "parcoords": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "parcoords" + } + ], + "pie": [ + { + "automargin": true, + "type": "pie" + } + ], + "scatter": [ + { + "fillpattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + }, + "type": "scatter" + } + ], + "scatter3d": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatter3d" + } + ], + "scattercarpet": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattercarpet" + } + ], + "scattergeo": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergeo" + } + ], + "scattergl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergl" + } + ], + "scattermap": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattermap" + } + ], + "scattermapbox": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattermapbox" + } + ], + "scatterpolar": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolar" + } + ], + "scatterpolargl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolargl" + } + ], + "scatterternary": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterternary" + } + ], + "surface": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0.0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1.0, + "#f0f921" + ] + ], + "type": "surface" + } + ], + "table": [ + { + "cells": { + "fill": { + "color": "#EBF0F8" + }, + "line": { + "color": "white" + } + }, + "header": { + "fill": { + "color": "#C8D4E3" + }, + "line": { + "color": "white" + } + }, + "type": "table" + } + ] + }, + "layout": { + "annotationdefaults": { + "arrowcolor": "#2a3f5f", + "arrowhead": 0, + "arrowwidth": 1 + }, + "autotypenumbers": "strict", + "coloraxis": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "colorscale": { + "diverging": [ + [ + 0, + "#8e0152" + ], + [ + 0.1, + "#c51b7d" + ], + [ + 0.2, + "#de77ae" + ], + [ + 0.3, + "#f1b6da" + ], + [ + 0.4, + "#fde0ef" + ], + [ + 0.5, + "#f7f7f7" + ], + [ + 0.6, + "#e6f5d0" + ], + [ + 0.7, + "#b8e186" + ], + [ + 0.8, + "#7fbc41" + ], + [ + 0.9, + "#4d9221" + ], + [ + 1, + "#276419" + ] + ], + "sequential": [ + [ + 0.0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1.0, + "#f0f921" + ] + ], + "sequentialminus": [ + [ + 0.0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1.0, + "#f0f921" + ] + ] + }, + "colorway": [ + "#636efa", + "#EF553B", + "#00cc96", + "#ab63fa", + "#FFA15A", + "#19d3f3", + "#FF6692", + "#B6E880", + "#FF97FF", + "#FECB52" + ], + "font": { + "color": "#2a3f5f" + }, + "geo": { + "bgcolor": "white", + "lakecolor": "white", + "landcolor": "white", + "showlakes": true, + "showland": true, + "subunitcolor": "#C8D4E3" + }, + "hoverlabel": { + "align": "left" + }, + "hovermode": "closest", + "mapbox": { + "style": "light" + }, + "paper_bgcolor": "white", + "plot_bgcolor": "white", + "polar": { + "angularaxis": { + "gridcolor": "#EBF0F8", + "linecolor": "#EBF0F8", + "ticks": "" + }, + "bgcolor": "white", + "radialaxis": { + "gridcolor": "#EBF0F8", + "linecolor": "#EBF0F8", + "ticks": "" + } + }, + "scene": { + "xaxis": { + "backgroundcolor": "white", + "gridcolor": "#DFE8F3", + "gridwidth": 2, + "linecolor": "#EBF0F8", + "showbackground": true, + "ticks": "", + "zerolinecolor": "#EBF0F8" + }, + "yaxis": { + "backgroundcolor": "white", + "gridcolor": "#DFE8F3", + "gridwidth": 2, + "linecolor": "#EBF0F8", + "showbackground": true, + "ticks": "", + "zerolinecolor": "#EBF0F8" + }, + "zaxis": { + "backgroundcolor": "white", + "gridcolor": "#DFE8F3", + "gridwidth": 2, + "linecolor": "#EBF0F8", + "showbackground": true, + "ticks": "", + "zerolinecolor": "#EBF0F8" + } + }, + "shapedefaults": { + "line": { + "color": "#2a3f5f" + } + }, + "ternary": { + "aaxis": { + "gridcolor": "#DFE8F3", + "linecolor": "#A2B1C6", + "ticks": "" + }, + "baxis": { + "gridcolor": "#DFE8F3", + "linecolor": "#A2B1C6", + "ticks": "" + }, + "bgcolor": "white", + "caxis": { + "gridcolor": "#DFE8F3", + "linecolor": "#A2B1C6", + "ticks": "" + } + }, + "title": { + "x": 0.05 + }, + "xaxis": { + "automargin": true, + "gridcolor": "#EBF0F8", + "linecolor": "#EBF0F8", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "#EBF0F8", + "zerolinewidth": 2 + }, + "yaxis": { + "automargin": true, + "gridcolor": "#EBF0F8", + "linecolor": "#EBF0F8", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "#EBF0F8", + "zerolinewidth": 2 + } + } + }, + "title": { + "text": "Signal share by measurement (CHS reference vs AF)" + }, + "xaxis": { + "title": { + "text": "signal share (CHS)" + } + }, + "yaxis": { + "title": { + "text": "signal share (AF)" + } + } + } + } + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "decomp_by_est = {\"CHS\": chs_decomp, \"AF\": af_decomp}\n", + "signal_share = pd.DataFrame(\n", + " {est: d[\"fraction_signal\"] for est, d in decomp_by_est.items()}\n", ")\n", - "```\n", - "\n", - "The `fun_and_jac` argument is important: it uses the combined function that\n", - "computes both the likelihood and gradient efficiently." + "signal_share = signal_share.dropna()\n", + "fig = go.Figure()\n", + "fig.add_trace(\n", + " go.Scatter(\n", + " x=signal_share[\"CHS\"],\n", + " y=signal_share[\"AF\"],\n", + " mode=\"markers\",\n", + " name=\"AF vs CHS\",\n", + " marker={\"size\": 8},\n", + " )\n", + ")\n", + "lo = float(signal_share.min().min())\n", + "hi = float(signal_share.max().max())\n", + "fig.add_trace(\n", + " go.Scatter(\n", + " x=[lo, hi],\n", + " y=[lo, hi],\n", + " mode=\"lines\",\n", + " line={\"dash\": \"dash\", \"color\": \"gray\"},\n", + " showlegend=False,\n", + " )\n", + ")\n", + "fig.update_layout(\n", + " title=\"Signal share by measurement (CHS reference vs AF)\",\n", + " template=\"plotly_white\",\n", + " xaxis_title=\"signal share (CHS)\",\n", + " yaxis_title=\"signal share (AF)\",\n", + " height=520,\n", + ")\n", + "fig" ] }, { "cell_type": "markdown", - "id": "17", + "id": "20", "metadata": {}, "source": [ - "## Next Steps\n", + "## Next steps\n", "\n", - "- See the [Model Specifications](../how_to_guides/model_specs.md) guide for details\n", - " on writing model specifications\n", - "- See the [Simulation](../how_to_guides/how_to_simulate_dataset.ipynb) guide for\n", - " generating synthetic data\n", - "- After estimation, use `get_filtered_states()` to extract latent factor estimates" + "- [How to estimate AF](../how_to_guides/how_to_estimate_af.md) covers the AF API in depth.\n", + "- [How to estimate AMN](../how_to_guides/how_to_estimate_amn.md) shows AMN on its native ground (a synthetic 2-mixture DGP where the mixture-of-normals advantage is visible).\n", + "- [How to compare estimators](../how_to_guides/how_to_compare_estimators.md) extends this tutorial with 95% confidence intervals (CHS analytic OPG / inverse-score; AF a propagated influence-function score bootstrap; AMN a cluster bootstrap) and overlaid posterior-factor trajectories.\n", + "- [Estimator prerequisites](../reference_guides/estimator_prerequisites.md) compares what data features and model constructs each estimator supports.\n", + "- [Architecture](../explanations/architecture.md) maps the `common/chs/af/amn` subpackage layout." ] } ], "metadata": { + "execution": { + "enabled": false + }, "language_info": { - "name": "python" + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.14.6" } }, "nbformat": 4, diff --git a/docs/how_to_guides/how_to_compare_estimators.md b/docs/how_to_guides/how_to_compare_estimators.md new file mode 100644 index 00000000..89411c2e --- /dev/null +++ b/docs/how_to_guides/how_to_compare_estimators.md @@ -0,0 +1,238 @@ +# Compare CHS, AF, and AMN with Confidence Intervals + +The getting-started tutorial shows the same `ModelSpec` estimated by all three +estimators on CNLSY data. This guide picks up where the tutorial leaves off and +quantifies the uncertainty around each estimator's point estimates: + +1. **CHS**: analytic OPG / inverse-score standard errors from + `estimagic.estimate_ml`. +2. **AF**: propagated influence-function score bootstrap + (`compute_af_standard_errors`). +3. **AMN**: nonparametric cluster bootstrap (`compute_amn_standard_errors`). + +The end of the guide overlays the three posterior factor trajectories on a +single panel so you can read off whether the estimators agree on the latent +factor path, not just on the parameter estimates. + +The guide assumes the three estimation results from the tutorial are in scope: +`chs_result`, `af_result`, and `amn_result`. The corresponding model and data +fixtures (`model`, `data`) are the same across all three. + +The three estimators support different data features and model constructs; see +[Estimator Prerequisites](../reference_guides/estimator_prerequisites.md) for the +support matrix (measurement families, missing data, corrections, anchoring). + +## Why each estimator gets a different inference + +The three estimators can be applied to the same structural `ModelSpec`, but they +use different estimating criteria — CHS a joint Gaussian-component likelihood, AF +a sequential Halton-integrated likelihood, AMN a three-stage +EM / minimum-distance / simulate-and-regress fit — so their point estimates may +differ even before inference is considered. The sampling-distribution machinery +also differs: + +| Estimator | Inference | Why this and not bootstrap (CHS) / not OPG (AF, AMN) | +| --------- | ---------------------------------------------------- | --------------------------------------------------------- | +| CHS | Analytic OPG / inverse-score (information equality) | Closed-form is valid under correct likelihood specification; bootstrap is just slower. | +| AF | Propagated influence-function score bootstrap | The closed-form variance ignores estimation error in period-$t-1$ nuisance params, biasing every period-$t \geq 1$ SE down. The influence-function score bootstrap propagates that earlier-period uncertainty, so cross-period covariances are non-zero. | +| AMN | Full re-estimation cluster bootstrap | The three-stage estimator has no clean sandwich form; each stage's residual variance compounds. | + +## CHS: analytic standard errors + +`estimate_chs` runs CHS through `estimagic.estimate_ml`, so its result carries +ML inference directly. By default `estimate_chs` sets `hessian=False` (the +numerical Hessian costs $O(\text{n\_params}^2)$ Kalman passes), so the reported +covariance is the **OPG / inverse-score** form — the inverse of the +outer-product-of-gradients information. This is valid under correct likelihood +specification (the information-equality assumption) but is **not** the +misspecification-robust sandwich, which would also need the Hessian. + +```python +chs_result.likelihood_result.summary() # CHS via estimate_chs +chs_result.likelihood_result.se() +chs_result.likelihood_result.cov() +``` + +To get the Hessian-based sandwich covariance instead, override the estimagic +keyword arguments via `CHSEstimationOptions.estimate_ml_options`: + +```python +from skillmodels import CHSEstimationOptions, estimate_chs + +chs_result = estimate_chs( + model, + data, + CHSEstimationOptions(estimate_ml_options={"hessian": True}), +) +``` + +If you drive the optimiser yourself via `get_maximization_inputs`, you can call +`estimagic.estimate_ml` directly on `max_inputs["loglikeobs"]` and the +`max_inputs["constraints"]`, choosing `hessian=True`/`False` to pick the +sandwich or the OPG/inverse-score covariance. + +## AF: propagated influence-function score bootstrap + +`compute_af_standard_errors` implements the Antweiler & Freyberger (2025) +§4.2 score bootstrap (after Armstrong, Bertanha & Hong 2014) in its +sequential-estimator influence-function form. It builds a single +per-observation influence matrix once at the optimum: each period block is a +one-step Newton update of that period's full-chain score that also carries +the earlier periods' influence via the cross-period (Hessian) blocks. For +each of `n_boot` replicates it draws *one shared* caseid index, resamples the +rows of the influence matrix with it, and shifts the estimate by the negated +resample mean. The shared index propagates earlier-period estimation +uncertainty, so the $t \geq 1$ standard errors are consistent and the +cross-period covariances are non-zero (unlike an own-block, independent-period +resample). No per-replicate re-estimation, so 10 000 replicates run in +seconds. + +```python +from skillmodels.af import compute_af_standard_errors + +af_inference = compute_af_standard_errors( + af_result, + data, + af_options, + n_boot=10_000, + seed=0, +) +af_inference.standard_errors.head() +af_inference.vcov # (n_params, n_params) DataFrame indexed by the params MultiIndex +af_inference.replicate_params # (n_boot, n_params) +``` + +The `replicate_params` DataFrame is the right object for plotting 95% +intervals: take the 2.5%/97.5% empirical quantiles per parameter rather than +$\hat{\theta} \pm 1.96 \cdot \mathrm{SE}$, since the one-step shifts can be +visibly skewed. + +## AMN: cluster bootstrap + +AMN's three-stage pipeline (EM → minimum distance → simulate-and-regress) has +no analytic sandwich, so inference is a full cluster bootstrap: resample +caseids with replacement, re-run all three stages, repeat. Per-replicate cost +is dominated by the Stage 1 EM (~seconds for $n \approx 2000$, $K = 2$, +$\approx 40$ augmented measures). Each replicate draws a fresh per-replicate +seed (so the Stage-1 EM initialisation and the Stage-3 simulation vary across +replicates), and any replicate that fails to converge is excluded from the +bootstrap distribution and reported via a `RuntimeWarning`; its row in +`replicate_params` is `NaN`. + +```python +from skillmodels.amn import compute_amn_standard_errors + +amn_inference = compute_amn_standard_errors( + amn_result, + data, + amn_options, + n_boot=200, + seed=0, +) +amn_inference.standard_errors.head() +amn_inference.replicate_params # (n_boot, n_params) -- includes failed replicates as NaN rows +``` + +Bumping `n_boot` to 1000 is reasonable on a multi-core machine; the paper's +original AMN application uses 100. + +## Overlaying CES production-function CIs + +Side-by-side $\phi$ estimates with 95% CIs: + +```python +import pandas as pd + +def _ci(replicate_params, param_loc, q=0.025): + samples = replicate_params[param_loc].dropna() + return samples.quantile(q), samples.quantile(1 - q) + +rows = [] +for period in (0, 1): + phi_loc = ("transition", period, "skills", "phi") + rows.append({ + "period": period, + "estimator": "CHS", + "estimate": chs_result.params.loc[phi_loc, "value"], + "lower": chs_result.likelihood_result.summary().loc[phi_loc, "ci_lower"], + "upper": chs_result.likelihood_result.summary().loc[phi_loc, "ci_upper"], + }) + rows.append({ + "period": period, + "estimator": "AF", + "estimate": af_result.params.loc[phi_loc, "value"], + "lower": _ci(af_inference.replicate_params, phi_loc)[0], + "upper": _ci(af_inference.replicate_params, phi_loc)[1], + }) + rows.append({ + "period": period, + "estimator": "AMN", + "estimate": amn_result.params.loc[phi_loc, "value"], + "lower": _ci(amn_inference.replicate_params, phi_loc)[0], + "upper": _ci(amn_inference.replicate_params, phi_loc)[1], + }) + +phi_comparison = pd.DataFrame(rows) +``` + +## Posterior factor trajectories + +The three estimators produce different posterior beliefs about the latent +factor paths. `chs_states`, `af_states`, `amn_states` (built in the tutorial +via `get_individual_states`, `get_af_posterior_states`, +`get_amn_posterior_states`) all share a `period` column and one column per +factor, so a single melt + facet plot covers the comparison: + +```python +import plotly.express as px + +states = pd.concat( + [ + chs_states.assign(estimator="CHS"), + af_states.assign(estimator="AF"), + amn_states.assign(estimator="AMN"), + ] +) +trajectories = states.groupby(["estimator", "period"])["skills"].mean().reset_index() + +fig = px.line( + trajectories, + x="period", + y="skills", + color="estimator", + title="Mean posterior skill across estimators", + template="plotly_white", +) +fig.show() +``` + +For a stronger visual comparison, plot the cross-individual variance band +($q_{0.1}$, $q_{0.5}$, $q_{0.9}$) per estimator side-by-side; agreement on the +median path with disagreement on the band is a useful diagnostic about how +the estimator treats the tail of the latent distribution. + +## When the estimators disagree + +If CHS, AF, and AMN disagree by more than the bootstrap CIs predict, the +candidate explanations are: + +- **Non-Gaussian latent factors.** CHS assumes Gaussian-mixture latents; AF and + AMN are more flexible about the mixture. Run `decompose_measurement_variance` + on each (the tutorial does this) and check whether the signal fractions + diverge — that's the leading indicator. +- **Misspecified transition function.** `log_ces` enforces a CES form via the + simplex constraint on the $\gamma$ weights; if the data prefers a linear + technology with a free constant, the CHS optimum can land in a different + basin than the AF/AMN sequential estimates that escape the constraint via + their integration weights. +- **Endogenous investment misalignment.** If `investment` is meant to be + endogenous (`is_endogenous=True`), CHS uses augmented periods internally + while AF treats it as a regular state per calendar period. The two answers + should still agree, but the augmented-period plumbing has historically been + the source of subtle bugs — start the diagnosis here if the disagreement is + concentrated around investment. + +See [How to estimate AF](how_to_estimate_af.md) and +[How to estimate AMN](how_to_estimate_amn.md) for the estimator-specific tuning +that matters when the headline disagreement turns out to be numerical, not +substantive. diff --git a/docs/how_to_guides/how_to_estimate_af.md b/docs/how_to_guides/how_to_estimate_af.md new file mode 100644 index 00000000..07708e76 --- /dev/null +++ b/docs/how_to_guides/how_to_estimate_af.md @@ -0,0 +1,163 @@ +# Estimate a Model with AF (sequential Halton MLE) + +The Antweiler & Freyberger (2025) estimator (`skillmodels.af.estimate_af`) fits +each period in sequence: period 0 jointly estimates the initial-period +measurement system and the latent mixture; each subsequent period takes the +estimated conditional state distribution and runs a period-specific MLE over a +joint Halton design. + +## Minimal example + +```python +import pandas as pd + +from skillmodels import ModelSpec, FactorSpec, Normalizations +from skillmodels.af import AFEstimationOptions, estimate_af + +model = ModelSpec( + factors={ + "skill": FactorSpec( + measurements=(("y1", "y2", "y3"),) * 3, + normalizations=Normalizations( + loadings=({"y1": 1},) * 3, + intercepts=({"y1": 0},) * 3, + ), + transition_function="linear", + ), + }, +) +data: pd.DataFrame # long-format, indexed by (caseid, period) + +af_options = AFEstimationOptions( + n_halton_points=200, # main quadrature + n_halton_points_shock=50, # production-shock integration +) +result = estimate_af(model, data, af_options) + +result.params # canonical skillmodels params DataFrame +result.period_results[0] # per-period AFPeriodResult +``` + +For score-bootstrap standard errors, pass the same `data` and +`af_options` to `compute_af_standard_errors`: + +```python +from skillmodels.af import compute_af_standard_errors + +inference = compute_af_standard_errors( + result, data, af_options, n_boot=10_000, seed=0 +) +inference.standard_errors +``` + +`compute_af_standard_errors` implements the propagated influence-function +score bootstrap of Antweiler & Freyberger (2025) §4.2 (after Armstrong, +Bertanha & Hong 2014). It builds a single per-observation influence matrix +once at the optimum — each period block carries the earlier periods' +estimation uncertainty through the cross-period blocks of the full-chain +Hessian — then resamples its caseid rows with one shared index per +replicate. Because the same index is used across periods, the resulting +$t \geq 1$ standard errors are consistent and the cross-period covariances +are non-zero. No per-replicate re-estimation is involved, so 10 000 +replicates run in seconds. The result exposes `standard_errors`, `vcov`, +and `replicate_params`. + +## Optimizer + +Each period's MLE runs through `optimagic.minimize` with the algorithm in +`AFEstimationOptions.optimizer_algorithm` (default `"fides"`; pass +`"scipy_lbfgsb"` for Monte Carlo sweeps where a deterministic stopping +rule matters). The parameter vector crosses host↔device once per +iteration: + +1. optimagic hands a pandas DataFrame to the user-supplied `fun` / `fun_and_jac`. +1. The wrapper extracts the `"value"` column, pushes it to device, runs the + jitted log-likelihood, and copies the scalar + gradient back to numpy. + +Pass scipy_lbfgsb stopping options through `optimizer_options`: + +```python +af_options = AFEstimationOptions( + n_halton_points=200, + n_halton_points_shock=50, + optimizer_algorithm="scipy_lbfgsb", + optimizer_options={ + "algo_options": { + "convergence_gtol_abs": 1e-5, + "convergence_ftol_rel": 2.22e-9, + "stopping_maxiter": 15_000, + }, + }, +) +``` + +AF internally creates the fixed and probability constraints implied by the +processed model: `FixedConstraintWithValue` (from normalisations / `fixed_params`) +and `ProbabilityConstraint` (from the `log_ces` `gamma` simplex). The public +`constraints=` argument is narrower — it honours only `om.EqualityConstraint` +groups whose selector is built with +`skillmodels.common.constraints.select_by_loc` (used for within-step and +cross-period equality restrictions). Other optimagic constraint kinds passed there +are ignored; supply any further fixed values through `fixed_params` instead. + +## Start-values strategy + +`AFEstimationOptions.start_params_strategy` controls how the per-period +parameter templates are seeded: + +- `"amn"` (default) — run the full AMN three-stage estimator upfront and use + its parameter estimates as start values. Most accurate, slowest. +- `"spearman"` — moment-based seeds from Spearman cross-covariances and + Bartlett-style residual variances. Fast; good enough for most diagnostics. +- `"constant"` — legacy 0.5 / data-scaled defaults; useful for regression + testing and reproducing pre-fix results. +- `"none"` — accepted for cross-estimator symmetry; behaves identically to + `"constant"` (AF always needs concrete per-period starts). + +`compute_af_standard_errors` does not re-run the optimizer per replicate, so +the choice of `start_params_strategy` does not enter the inference path: +the score bootstrap reuses the point estimate and only resamples the +precomputed influence matrix. + +## Production transition functions + +For an AF production function, use the AF-specific transition functions +`translog_af` (eq. 6: linear terms + pairwise interactions, NO square terms) +or `log_ces_af` (eq. 7: CES over the production factors only). They enumerate +parameters over the production factors (skill + investment) so observed +factors such as income do not leak in as free production coefficients. + +The general-library transitions (`linear`, `translog`, `robust_translog`, +`linear_and_squares`, `log_ces`, `log_ces_with_constant`, `log_ces_general`) +enumerate parameters over *all* factors, including observed ones. Using one of +these for a (non-endogenous) production factor while observed factors are +present makes income enter the production function with its own free +coefficients, which changes the AF estimand (income should affect skills only +through the investment equation). `validate_af_model` emits a `UserWarning` in +that case; either switch to `translog_af` / `log_ces_af`, or pin every +observed-factor transition coefficient to 0 via `fixed_params`. + +## Anchoring and endogenous factors + +Anchoring is currently only supported by the CHS path +(`get_maximization_inputs`). The AF path estimates the latent-factor scale +implied by the measurement-system normalisations; anchoring outcomes can be +added back into the model spec for downstream visualisation but do not enter +the AF likelihood. + +Endogenous factors (investment in period $t$ measured by inv-measures in +period $t$) are supported. See `tests/test_af_estimate.py` for a worked +example with `is_endogenous=True`. + +The AF likelihood implements only the exogenous-investment case +($\kappa_t = 0$): production and investment shocks are integrated as +independent draws. The endogenous-investment control function is not part of +the AF estimator. If the model declares a `CorrectionSpec` (via +`FactorSpec.correction`), `validate_af_model` raises `NotImplementedError`; +strip it with `ModelSpec.without_correction()` to run AF, or use +`estimate_chs` to estimate the correction. (Supplying `kappa` / `kappa_t` +parameters directly via `start_params` / `fixed_params` likewise raises +`NotImplementedError`.) See +[Endogeneity Corrections](../reference_guides/endogeneity_corrections.md) for +the full control-function interface and +[How to estimate AMN](how_to_estimate_amn.md) for the AMN route. diff --git a/docs/how_to_guides/how_to_estimate_amn.md b/docs/how_to_guides/how_to_estimate_amn.md new file mode 100644 index 00000000..c84ca977 --- /dev/null +++ b/docs/how_to_guides/how_to_estimate_amn.md @@ -0,0 +1,283 @@ +# Estimate a Model with AMN (three-stage mixture-of-normals) + +The Attanasio-Meghir-Nix 2020 estimator (`skillmodels.amn.estimate_amn`) runs +three stages: + +1. **Mixture EM.** Fit a Gaussian mixture + $F_{M, X} = \sum_k \tau_k \, \mathcal{N}(\Pi_k, \Psi_k)$ to the augmented + measure vector $[M_{1:T}, X]$ (controls / instruments stacked alongside + measurements as zero-error rows). +2. **Minimum distance.** Recover structural parameters + $(\Lambda, A, \Sigma, \mu, \Omega)$ from the reduced-form + $(\Pi_k, \Psi_k)$ subject to factor-measurement assignment, scale + normalisations, and the mean-zero mixture restriction. +3. **Simulate and regress.** Draw a large synthetic latent-factor panel + from the fitted mixture and estimate the production function by + regression on the synthetic data. + +AMN shines when the latent factor distribution is non-Gaussian. CHS supports a +finite mixture of Gaussian initial states via `ModelSpec.n_mixtures`, but filters +each component with a Gaussian (square-root Kalman) recursion; setting +`n_mixtures=1` is the deliberately restricted single-Gaussian benchmark. AF also +supports multiple mixture components but fits them jointly with the +period-specific optimizer. AMN cleanly separates the mixture (Stage-1 EM) from +the structural recovery, so it models the non-Gaussianity explicitly. + +## Minimal example + +```python +import pandas as pd + +from skillmodels import ModelSpec, FactorSpec, Normalizations +from skillmodels.amn import AMNEstimationOptions, estimate_amn + +model = ModelSpec( + factors={ + "skill": FactorSpec( + measurements=(("y1", "y2", "y3"),) * 3, + normalizations=Normalizations( + loadings=({"y1": 1},) * 3, + intercepts=({"y1": 0},) * 3, + ), + transition_function="linear", + ), + }, + n_mixtures=2, +) +data: pd.DataFrame # long-format, indexed by (caseid, period) + +amn_options = AMNEstimationOptions( + em_max_iter=500, + n_simulation_draws=100_000, + seed=0, +) +result = estimate_amn(model, data, amn_options) + +result.params # canonical skillmodels params DataFrame +result.stages.mixture # Stage 1: reduced-form Pi, Psi, tau +result.stages.structural # Stage 2: Lambda, A, Sigma, mu, Omega +result.stages.production # Stage 3: production-function regression +result.success # AND across stage convergence flags +``` + +## When AMN beats CHS: a synthetic 2-mixture DGP + +The smallest example that lets AMN's non-Gaussian fit show its advantage is a +1-factor / 3-period model where the latent skill is drawn from a non-trivial +mixture-of-normals. CHS with a single Gaussian component (`n_mixtures=1`) +produces biased production-function estimates on this DGP; AMN's Stage 1 EM +recovers the +mixture and the structural step undoes the bias. + +```python +import numpy as np +import pandas as pd + +rng = np.random.default_rng(0) +n = 4000 +n_periods = 3 + +# Two-mixture latent factor: 60% drawn from N(-0.8, 0.7^2), 40% from N(1.2, 0.4^2). +mixture_component = rng.choice([0, 1], size=n, p=[0.6, 0.4]) +f0 = np.where( + mixture_component == 0, + rng.normal(-0.8, 0.7, size=n), + rng.normal(1.2, 0.4, size=n), +) + +# Linear transition with a known slope and small shock. +factors = [f0] +slope = 0.7 +shock_sd = 0.15 +for _ in range(n_periods - 1): + factors.append(slope * factors[-1] + rng.normal(0, shock_sd, size=n)) + +# Three noisy measurements per period; "y1" is the reference (loading = 1). +rows = [] +for caseid in range(n): + for period in range(n_periods): + f = factors[period][caseid] + rows.append( + { + "caseid": caseid, + "period": period, + "y1": f + rng.normal(0, 0.30, size=1)[0], + "y2": 0.9 * f + rng.normal(0, 0.35, size=1)[0], + "y3": 1.1 * f + rng.normal(0, 0.40, size=1)[0], + } + ) +data = pd.DataFrame(rows).set_index(["caseid", "period"]) +``` + +Estimate AMN with two mixture components on this DGP: + +```python +model = ModelSpec( + factors={ + "skill": FactorSpec( + measurements=(("y1", "y2", "y3"),) * 3, + normalizations=Normalizations( + loadings=({"y1": 1},) * 3, + intercepts=({"y1": 0},) * 3, + ), + transition_function="linear", + ), + }, + n_mixtures=2, +) + +result = estimate_amn( + model, + data, + AMNEstimationOptions( + em_max_iter=500, + n_simulation_draws=50_000, + seed=0, + ), +) + +result.params.loc[("transition", 0, "skill", "skill"), "value"] +# Should be close to 0.7 (the true slope). + +result.stages.mixture.weights # tau, should be near (0.6, 0.4) up to label switching +result.stages.mixture.means # Pi_k for the augmented measure vector +``` + +Compare against a CHS fit of the same model with `n_mixtures=1` (the deliberately +restricted single-Gaussian benchmark) and verify that the slope estimate from CHS +is biased downward — that's the signal AMN was designed to capture. + +## Tuning knobs + +### Number of mixture components + +`ModelSpec.n_mixtures` (not an `AMNEstimationOptions` field) controls the +flexibility of the Stage-1 EM fit; AMN reads it as the number of mixture +components $K$. The paper fixes $K = 2$; in practice values from 2 to 4 are +reasonable. Higher $K$ adds free parameters to the reduced-form fit but does +not change the structural model — the minimum-distance step constrains them. + +### Stage-1 EM stability + +Stage 1 uses `sklearn.mixture.GaussianMixture` under the hood. The defaults +(`em_n_init=5`, `em_reg_covar=1e-6`) reliably converge on well-identified +models; if the EM warns about degenerate covariances, bump `em_reg_covar` to +`1e-4` first. The fit is initialised from a Spearman-moment guess for the +loadings, then projected back to the augmented-measure space; that +data-driven start beats random init by a wide margin. + +### Stage-1 missing data + +`mixture_em_method` selects how Stage 1 handles incomplete measurement rows: + +- `"complete_case"` (default) fits `sklearn.mixture.GaussianMixture` on + listwise-complete rows and raises `InsufficientCompleteCasesError` when fewer + than `n_mixtures` rows are complete. +- `"missing_data"` fits an EM that marginalises over each row's missing entries, + valid under an ignorable (MAR) missingness assumption even when no row is + complete. + +A column that is never observed in any sampled row has unidentified moments; the +missing-data EM raises unless `allow_never_observed_measurements=True` is set +(intended only for seeding-style uses where such a column is tolerated). +`mixture_em_max_rows` optionally subsamples the EM input for speed. + +### Stage-2 weighting + +`minimum_distance_weighting="identity"` (the paper's default, and currently the +only implemented option) is fast and robust: it is an unweighted identity-metric +criterion over per-component means and the full covariance matrices. The +`"optimal"` value is reserved for a future Avar-weighted criterion and currently +raises `NotImplementedError`. + +### Stage-3 simulation size + +`n_simulation_draws` controls Monte-Carlo error in the production-function +regression. The paper notes "the larger the data we draw the lower the +simulation error" (p. 2522); 100 000 is overkill for $n \approx 2000$. Drop +to 50 000 for iterating, then bump back to 100 000 for the final fit. The +RNG is fully reproducible via `seed`. + +## Inference + +Inference is a cluster bootstrap that re-runs all three stages on each +replicate. Each replicate draws a fresh seed, so the Stage-1 EM initialisation +and Stage-3 simulation vary across replicates; replicates that fail to converge +are excluded from the distribution and reported via a warning. Wall-clock is +dominated by Stage 1 EM ($\approx$ seconds for $n \approx 2000$), so 1000 +replicates run in $\approx$ 10-30 minutes on a single machine. + +```python +from skillmodels.amn import compute_amn_standard_errors + +inference = compute_amn_standard_errors( + result, data, amn_options, n_boot=1000, seed=0 +) +inference.standard_errors +inference.replicate_params # (n_boot, n_params); failed replicates are NaN +``` + +The paper itself uses 100 replicates (Tables 5-6); 1000 gives smoother CIs +without changing the qualitative picture. + +## Endogenous investment (control-function correction) + +The AMN (2020) eq. 7-8 / AF Sec. 3.5 control-function correction is configured +declaratively, not via an estimation option: attach a `CorrectionSpec` to the +endogenous investment `FactorSpec` (which must set `is_endogenous=True`). Its +mere presence triggers the correction in Stage 3 — there is no +`investment_endogeneity` flag. See +[Endogeneity Corrections](../reference_guides/endogeneity_corrections.md) for +the full interface; the same `CorrectionSpec` is also read by `estimate_chs`. + +```python +from skillmodels import CorrectionSpec + +model = base_model.with_correction( + "investment", + CorrectionSpec( + state_predictors=("skills",), + instruments=("income",), + targets=("skills",), + ), +) +result = estimate_amn(model, data, amn_options) +``` + +Per period, a first-stage investment equation `ln I_t ~ theta_t (+ observed +instruments Y_t)` is OLS-fit on the simulated panel; its residual +`eta_{I,t} = ln I_t - E[ln I_t | theta_t, Y_t]` is added as an additive `cf` +covariate (coefficient `kappa_t`, period- and output-specific) to each target +factor's production regression. Under the correction: + +- the instruments act as excluded regressors: they enter the first-stage + equation only, never a target's production function; +- at least one instrument is REQUIRED — `CorrectionSpec.__post_init__` raises + `ValueError` otherwise, because the residual would be collinear with the + production inputs and `kappa` would be unidentified; +- the first-stage coefficients and shock SD are returned under the + `investment_eq` / `investment_sds` categories on + `result.stages.production.investment_params`, and the production shock SD + (`shock_sds`) is the corrected SD(eps_C); +- AMN implements only the **linear** `cf` term. A higher-order `kappa_terms` + request (anything other than `("cf",)` per target, e.g. a `kappa_degree=2` + translog basis) raises `NotImplementedError` in `simulate_and_regress`; use + `estimate_chs` for the full polynomial basis. + +## What AMN does not (yet) do + +- **Anchoring** is not wired through the AMN stages. The model spec's + `AnchoringSpec` is accepted (so the spec stays compatible with CHS), but + the AMN result reports unanchored factor scales. +- **`start_params` and `constraints`.** `estimate_amn` does not honour either + and raises `NotImplementedError` if you pass them — the three-stage pipeline + has no single parameter vector to seed or constrain. +- **`fixed_params`** are honoured only for the categories each stage estimates, + and pinned inside that stage rather than post-hoc: Stage 2 honours `loadings`, + measurement intercepts, and measurement SDs; Stage 3 honours `transition`. + Passing any other category raises `NotImplementedError`. (The generic Stage-3 + NLS path supports pinning for most transitions, but `log_ces` / + `log_ces_with_constant` reject a non-empty fixed set.) + +See [How to compare estimators](how_to_compare_estimators.md) for an +overlay of CHS, AF, and AMN on the same data with confidence intervals. diff --git a/docs/how_to_guides/how_to_simulate_dataset.ipynb b/docs/how_to_guides/how_to_simulate_dataset.ipynb index e15340fa..47dfe2ab 100644 --- a/docs/how_to_guides/how_to_simulate_dataset.ipynb +++ b/docs/how_to_guides/how_to_simulate_dataset.ipynb @@ -8,8 +8,8 @@ "source": [ "import pandas as pd\n", "\n", - "from skillmodels.config import REGRESSION_VAULT, TEST_DATA_DIR\n", - "from skillmodels.simulate_data import simulate_dataset\n", + "from skillmodels.common.config import REGRESSION_VAULT, TEST_DATA_DIR\n", + "from skillmodels.common.simulate_data import simulate_dataset\n", "from skillmodels.test_data.model2 import MODEL2" ] }, diff --git a/docs/how_to_guides/how_to_visualize_correlations.ipynb b/docs/how_to_guides/how_to_visualize_correlations.ipynb index 57e2c484..62efd7b5 100644 --- a/docs/how_to_guides/how_to_visualize_correlations.ipynb +++ b/docs/how_to_guides/how_to_visualize_correlations.ipynb @@ -15,8 +15,8 @@ "source": [ "import pandas as pd\n", "\n", - "from skillmodels.config import REGRESSION_VAULT, TEST_DATA_DIR\n", - "from skillmodels.correlation_heatmap import (\n", + "from skillmodels.common.config import REGRESSION_VAULT, TEST_DATA_DIR\n", + "from skillmodels.common.correlation_heatmap import (\n", " get_measurements_corr,\n", " get_quasi_scores_corr,\n", " get_scores_corr,\n", @@ -167,7 +167,7 @@ "metadata": {}, "outputs": [], "source": [ - "from skillmodels.visualize_transition_equations import (\n", + "from skillmodels.common.visualize_transition_equations import (\n", " _get_parsed_params,\n", " _set_index_params,\n", ")" @@ -179,7 +179,7 @@ "metadata": {}, "outputs": [], "source": [ - "from skillmodels.process_model import process_model" + "from skillmodels.common.process_model import process_model" ] }, { diff --git a/docs/how_to_guides/how_to_visualize_pairwise_factor_distribution.ipynb b/docs/how_to_guides/how_to_visualize_pairwise_factor_distribution.ipynb index 73831c95..e950d71e 100644 --- a/docs/how_to_guides/how_to_visualize_pairwise_factor_distribution.ipynb +++ b/docs/how_to_guides/how_to_visualize_pairwise_factor_distribution.ipynb @@ -6,21 +6,7 @@ "id": "0", "metadata": {}, "outputs": [], - "source": [ - "import numpy as np\n", - "import pandas as pd\n", - "\n", - "from skillmodels.config import REGRESSION_VAULT, TEST_DATA_DIR\n", - "from skillmodels.maximization_inputs import get_maximization_inputs\n", - "from skillmodels.simulate_data import simulate_dataset\n", - "from skillmodels.test_data.model2 import MODEL2\n", - "from skillmodels.visualize_factor_distributions import (\n", - " bivariate_density_contours,\n", - " bivariate_density_surfaces,\n", - " combine_distribution_plots,\n", - " univariate_densities,\n", - ")" - ] + "source": "import numpy as np\nimport pandas as pd\n\nfrom skillmodels.chs.maximization_inputs import get_maximization_inputs\nfrom skillmodels.common.config import REGRESSION_VAULT, TEST_DATA_DIR\nfrom skillmodels.common.individual_states import get_individual_states_from_params\nfrom skillmodels.common.simulate_data import simulate_dataset\nfrom skillmodels.common.visualize_factor_distributions import (\n bivariate_density_contours,\n bivariate_density_surfaces,\n combine_distribution_plots,\n univariate_densities,\n)\nfrom skillmodels.test_data.model2 import MODEL2, MODEL2_CHS_OPTIONS" }, { "cell_type": "markdown", @@ -29,15 +15,16 @@ "source": [ "# How to visualize the distribution of latent factors\n", "\n", - "We show how to create Kernel density plots for pairs of latent factors in two or three dimensions. As illustration we use the same example as in the [introductory tutorial](../getting_started/tutorial.ipynb). For more details of how to obtain the filtered states, also see that tutorial.\n", + "We show how to create kernel density plots for pairs of latent factors in two or three dimensions. As illustration we use the same example as in the [introductory tutorial](../getting_started/tutorial.ipynb). For more details on how to obtain filtered states, see that tutorial.\n", + "\n", + "There are two kinds of data that the plotting functions consume:\n", "\n", - "There are two kinds of data that can be visualized with the function described below:\n", - "1. Filtered states, i.e. the estimates of the latent factors in an empirical dataset\n", - "2. Simulated states, i.e. a synthetic dataset of latent factors that is generated for a parametrized model. \n", + "1. Filtered states — point estimates of the latent factors for an empirical dataset.\n", + "2. Simulated states — a synthetic latent-factor panel from a parameterised model.\n", "\n", - "Below, we show how to get both kinds of datasets, how to visualize the distribution of latent factors given one dataset and how to visualize the difference in distributions between two datasets.\n", + "Below, we show how to produce both, how to visualise the distribution of latent factors given one dataset, and how to overlay two datasets (e.g. baseline vs. policy).\n", "\n", - "## Getting filtered states " + "## Getting filtered states" ] }, { @@ -46,14 +33,7 @@ "id": "2", "metadata": {}, "outputs": [], - "source": [ - "model = MODEL2\n", - "params = pd.read_csv(REGRESSION_VAULT / \"one_stage_anchoring.csv\")\n", - "params = params.set_index([\"category\", \"period\", \"name1\", \"name2\"])\n", - "\n", - "data = pd.read_stata(TEST_DATA_DIR / \"model2_simulated_data.dta\")\n", - "data = data.set_index([\"caseid\", \"period\"])" - ] + "source": "model = MODEL2\nparams = pd.read_csv(REGRESSION_VAULT / \"one_stage_anchoring.csv\")\nparams = params.set_index([\"category\", \"period\", \"name1\", \"name2\"])\n\ndata = pd.read_stata(TEST_DATA_DIR / \"model2_simulated_data.dta\")\ndata = data.set_index([\"caseid\", \"period\"])\n\nfiltered = get_individual_states_from_params(\n model_spec=model, data=data, params=params, chs_options=MODEL2_CHS_OPTIONS\n)\nstates = filtered[\"anchored_states\"][\"states\"]" }, { "cell_type": "markdown", @@ -73,14 +53,14 @@ "kde_plots = univariate_densities(\n", " model_spec=model,\n", " data=data,\n", - " params=params,\n", " period=1,\n", + " filtered_states=states,\n", ")\n", "contour_plots = bivariate_density_contours(\n", " model_spec=model,\n", " data=data,\n", - " params=params,\n", " period=1,\n", + " filtered_states=states,\n", ")" ] }, @@ -94,8 +74,8 @@ "surface_plots = bivariate_density_surfaces(\n", " model_spec=model,\n", " data=data,\n", - " params=params,\n", " period=1,\n", + " filtered_states=states,\n", ")" ] }, @@ -128,15 +108,12 @@ "id": "8", "metadata": {}, "source": [ - "## (Outdated) Optional arguments of the plotting function\n", + "## Optional arguments of the plotting function\n", "\n", - "- You can omit the 3d Plots in the upper triangle by leaving out `add_3d_plots=True`. \n", - "- You can modify the trade-off between runtime and plot quality by setting `n_points`, i.e. the number of points per dimension to different values. Default is 50.\n", - "- You can return the individual plots instead of a grid by setting `combine_plots_in_grid=False`. In that case the function returns a dictionary with figures that you can save for later use. \n", - "- You can manually tweek the ranges over which the distributions are plotted. For that, you need to specify the argument `state_ranges`. This is a dictionary. The keys are the names of the latent factors. The values are DataFrames with the columns \"period\", \"minimum\", \"maximum\". The state_ranges are used to define the axis limits of the plots.\n", - "- lower_kde_kws (dict): Keyword arguments for kdeplot, used to generate the plots in the lower triangle of the grid, i.e. the two dimensional kdeplot for each factor pair.\n", - "- diag_kde_kws (dict): Keyword arguments for kdeplot, used to generate the plots on the diagonal of the grid, i.e. the one dimensional kdeplot for each factor. \n", - "- surface_kws (dict): Keyword arguments for Axes.plot_surface, used to generate the plots in the upper triangle of the grid, i.e. the surface plot of the kernel density estimates for each factor pair." + "- You can omit the 3D plots by passing `surface_plots=None` to `combine_distribution_plots`.\n", + "- `n_points` controls the runtime/quality trade-off (grid points per dimension; default 50).\n", + "- `state_ranges` (dict keyed by factor name, values are DataFrames with columns `period`, `minimum`, `maximum`) lets you set axis limits manually.\n", + "- `layout_kwargs` is forwarded to Plotly `update_layout` for every subplot; `distplot_kwargs` / `contour_kwargs` go to the underlying traces." ] }, { @@ -144,9 +121,9 @@ "id": "9", "metadata": {}, "source": [ - "## Getting simulated datasets (with and without policy)\n", + "## Simulated states with and without policy\n", "\n", - "One of the main application of skill formation models is to simulate the effect of counterfactual policies. To visualize the effect of a policy on factor distributions, we first need to simulate a dataset in which a policy has been active. " + "A common application of skill-formation models is to simulate the effect of counterfactual policies. To visualise the effect of a policy on factor distributions, simulate one dataset with the policy and one without, then overlay them." ] }, { @@ -194,7 +171,9 @@ "id": "13", "metadata": {}, "source": [ - "## Plotting differences in distributions" + "## Plotting differences in distributions\n", + "\n", + "Pass the simulated states as a dict (or list) of DataFrames; the plot helpers overlay one trace per scenario. 3D surface plots require a single DataFrame and don't support multi-scenario overlays." ] }, { @@ -206,17 +185,15 @@ "source": [ "kde_plots = univariate_densities(\n", " model_spec=model,\n", - " states={\"baseline\": sim_states, \"subsidy\": sim_states_policy},\n", " data=data,\n", - " params=params,\n", " period=1,\n", + " filtered_states={\"baseline\": sim_states, \"subsidy\": sim_states_policy},\n", ")\n", "contour_plots = bivariate_density_contours(\n", " model_spec=model,\n", - " states={\"baseline\": sim_states, \"subsidy\": sim_states_policy},\n", " data=data,\n", - " params=params,\n", " period=1,\n", + " filtered_states={\"baseline\": sim_states, \"subsidy\": sim_states_policy},\n", ")" ] }, @@ -245,21 +222,15 @@ "id": "17", "metadata": {}, "source": [ - "All the optional arguments stay the same. The only difference ist that 3d plots do not work for several datasets." - ] - }, - { - "cell_type": "markdown", - "id": "18", - "metadata": {}, - "source": [ - "# Plotting with observed factors" + "# Plotting with observed factors\n", + "\n", + "Observed factors are columns in your dataset; pass `observed_factors=True` to include them. The filtered-states extraction is the same; the only change is which factor names you ask the plotter for." ] }, { "cell_type": "code", "execution_count": null, - "id": "19", + "id": "18", "metadata": {}, "outputs": [], "source": [ @@ -269,7 +240,7 @@ { "cell_type": "code", "execution_count": null, - "id": "20", + "id": "19", "metadata": {}, "outputs": [], "source": [ @@ -280,33 +251,30 @@ { "cell_type": "code", "execution_count": null, - "id": "21", + "id": "20", "metadata": {}, "outputs": [], - "source": [ - "params = get_maximization_inputs(model_spec=model, data=data)[\"params_template\"]\n", - "params[\"value\"] = 0.1" - ] + "source": "params = get_maximization_inputs(\n model_spec=model, data=data, chs_options=MODEL2_CHS_OPTIONS\n)[\"params_template\"]\nparams[\"value\"] = 0.1\nfiltered = get_individual_states_from_params(\n model_spec=model, data=data, params=params, chs_options=MODEL2_CHS_OPTIONS\n)\nstates = filtered[\"anchored_states\"][\"states\"]" }, { "cell_type": "code", "execution_count": null, - "id": "22", + "id": "21", "metadata": {}, "outputs": [], "source": [ "kde_plots = univariate_densities(\n", " model_spec=model,\n", " data=data,\n", - " params=params,\n", " period=1,\n", + " filtered_states=states,\n", " observed_factors=True,\n", ")\n", "contour_plots = bivariate_density_contours(\n", " model_spec=model,\n", " data=data,\n", - " params=params,\n", " period=1,\n", + " filtered_states=states,\n", " observed_factors=True,\n", ")" ] @@ -314,7 +282,7 @@ { "cell_type": "code", "execution_count": null, - "id": "23", + "id": "22", "metadata": {}, "outputs": [], "source": [ diff --git a/docs/how_to_guides/how_to_visualize_transition_equations.ipynb b/docs/how_to_guides/how_to_visualize_transition_equations.ipynb index d4581df2..96ee44c7 100644 --- a/docs/how_to_guides/how_to_visualize_transition_equations.ipynb +++ b/docs/how_to_guides/how_to_visualize_transition_equations.ipynb @@ -6,16 +6,7 @@ "id": "0", "metadata": {}, "outputs": [], - "source": [ - "import pandas as pd\n", - "\n", - "from skillmodels.config import REGRESSION_VAULT, TEST_DATA_DIR\n", - "from skillmodels.test_data.model2 import MODEL2\n", - "from skillmodels.visualize_transition_equations import (\n", - " combine_transition_plots,\n", - " get_transition_plots,\n", - ")" - ] + "source": "import pandas as pd\n\nfrom skillmodels.common.config import REGRESSION_VAULT, TEST_DATA_DIR\nfrom skillmodels.common.individual_states import get_individual_states_from_params\nfrom skillmodels.common.visualize_transition_equations import (\n combine_transition_plots,\n get_transition_plots,\n)\nfrom skillmodels.test_data.model2 import MODEL2, MODEL2_CHS_OPTIONS" }, { "cell_type": "markdown", @@ -46,15 +37,7 @@ "id": "2", "metadata": {}, "outputs": [], - "source": [ - "model = MODEL2\n", - "\n", - "params = pd.read_csv(REGRESSION_VAULT / \"one_stage_anchoring.csv\")\n", - "params = params.set_index([\"category\", \"period\", \"name1\", \"name2\"])\n", - "\n", - "data = pd.read_stata(TEST_DATA_DIR / \"model2_simulated_data.dta\")\n", - "data = data.set_index([\"caseid\", \"period\"])" - ] + "source": "model = MODEL2\n\nparams = pd.read_csv(REGRESSION_VAULT / \"one_stage_anchoring.csv\")\nparams = params.set_index([\"category\", \"period\", \"name1\", \"name2\"])\n\ndata = pd.read_stata(TEST_DATA_DIR / \"model2_simulated_data.dta\")\ndata = data.set_index([\"caseid\", \"period\"])\n\nfiltered = get_individual_states_from_params(\n model_spec=model, data=data, params=params, chs_options=MODEL2_CHS_OPTIONS\n)\nstates = filtered[\"anchored_states\"][\"states\"]" }, { "cell_type": "markdown", @@ -75,6 +58,7 @@ " model_spec=model,\n", " params=params,\n", " data=data,\n", + " filtered_states=states,\n", " period=0,\n", ")" ] @@ -112,6 +96,7 @@ " params=params,\n", " data=data,\n", " period=0,\n", + " filtered_states=states,\n", " quantiles_of_other_factors=None,\n", ")" ] @@ -147,6 +132,7 @@ " model_spec=model,\n", " params=params,\n", " data=data,\n", + " filtered_states=states,\n", " period=1,\n", ")" ] diff --git a/docs/how_to_guides/model_specs.md b/docs/how_to_guides/model_specs.md index e0f848b2..e3d302e9 100644 --- a/docs/how_to_guides/model_specs.md +++ b/docs/how_to_guides/model_specs.md @@ -7,7 +7,6 @@ Models are specified using Python dataclasses. ```python from skillmodels import ( AnchoringSpec, - EstimationOptions, FactorSpec, ModelSpec, Normalizations, @@ -39,10 +38,28 @@ model = ModelSpec( ), controls=("x1", "x2"), stagemap=(0, 0, 1, 1, 2, 2, 3), - estimation_options=EstimationOptions(), + n_mixtures=2, ) ``` +The `ModelSpec` is purely structural -- it describes the model, not how to +estimate it. Estimator-specific tuning (number of Halton draws, mixture +components in CHS Kalman, sigma-point scale, ...) lives on the relevant +options class and is passed at the call site: + +```python +from skillmodels.chs import CHSEstimationOptions, get_maximization_inputs + +max_inputs = get_maximization_inputs( + model_spec=model, + data=data, + chs_options=CHSEstimationOptions(bounds_distance=1e-4), +) +``` + +See the [AF how-to](how_to_estimate_af.md) for the corresponding pattern with +`estimate_af(model, data, af_options=...)`. + ## Factor Specification Each factor requires: @@ -50,13 +67,26 @@ Each factor requires: - **measurements**: A nested tuple with measurement variable names for each period. Empty tuples indicate no measurements in that period. - **transition_function**: Name of a transition function (`linear`, `log_ces`, - `constant`, `translog`) or a custom function. + `constant`, `translog`, ...) or a custom function. See + [Transition Functions](../reference_guides/transition_functions.md) for the full + list. For an **AF production function**, prefer the production-factors-only + variants `translog_af` (AF eq. 6: linear + pairwise interactions, no squares) + and `log_ces_af` (AF eq. 7: CES over production factors only). The general + built-in transitions (`translog`, `log_ces`, ...) enumerate parameters over + **all** factors, including observed ones, so income and other observed factors + would receive free production coefficients — which changes the AF estimand. + `estimate_af` emits a `UserWarning` if you use a general built-in transition on + a production factor while observed factors are present. - **normalizations** (optional): Fixed values for loadings and intercepts to identify - the model. + the model. The model checker validates these syntactically but does not prove + transition-specific identification; see + [Notes on factor scales](../explanations/notes_on_factor_scales.md). - **is_endogenous** (optional): Whether this factor is endogenous (default: false). See [Endogeneity Corrections](../reference_guides/endogeneity_corrections.md). -- **is_correction** (optional): Whether this is a correction factor (default: false). - Must also be endogenous. +- **correction** (optional): A `CorrectionSpec | None` attached to an endogenous + investment factor, adding a control-function correction for investment + endogeneity. See + [Endogeneity Corrections](../reference_guides/endogeneity_corrections.md). ## Anchoring @@ -98,11 +128,14 @@ model = ModelSpec( ## Estimation Options -Fine-tune the estimation: +`n_mixtures` is a structural field on `ModelSpec` itself — the number of components +in the latent-factor mixture (default 1). The numerical knobs below are +**CHS-specific** and live on `CHSEstimationOptions` (`skillmodels.chs`), not on +`ModelSpec`; AF and AMN have their own option dataclasses (`AFEstimationOptions`, +`AMNEstimationOptions`). - **robust_bounds**: Make bounds stricter to avoid numerical issues (default: true) - **bounds_distance**: How much stricter to make bounds (default: 0.001) -- **n_mixtures**: Number of mixture components (default: 1) - **sigma_points_scale**: Scaling for Julier sigma points (default: 2) - **clipping_lower_bound**: Clip log-likelihood from below (default: -1e30) - **clipping_upper_bound**: Clip log-likelihood from above (default: null) @@ -114,7 +147,7 @@ Fine-tune the estimation: Define custom transition equations using the `@register_params` decorator: ```python -from skillmodels.decorators import register_params +from skillmodels.common.decorators import register_params @register_params(params=["lincoeff"]) def my_linear(fac, params): diff --git a/docs/index.md b/docs/index.md index 1d297e02..9c07d585 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,52 +1,119 @@ # skillmodels -Welcome to skillmodels, a Python implementation of estimators for nonlinear dynamic -latent factor models. The package implements the Kalman filter-based maximum likelihood -estimator proposed by Cunha, Heckman and Schennach -([Econometrica 2010](http://onlinelibrary.wiley.com/doi/10.3982/ECTA6551/abstract)). +Skillmodels is a Python toolbox for estimating nonlinear dynamic latent factor +models. It started as a Kalman-filter implementation of Cunha, Heckman & Schennach +([Econometrica 2010](http://onlinelibrary.wiley.com/doi/10.3982/ECTA6551/abstract)) +and has since grown to host three estimators side by side, all sharing the same +`ModelSpec` and the same parameter index. ## Overview -Skillmodels was developed for skill formation models but can be applied to any dynamic -nonlinear latent factor model. Key features: +Skillmodels was developed for skill-formation research but works for any dynamic +nonlinear latent-factor model. Key features: -- **Kalman filter estimation**: Uses square-root implementations for numerical stability -- **Flexible model specification**: Define models using Python dataclasses or dictionaries -- **JAX-powered**: Automatic differentiation and JIT compilation for fast optimization -- **GPU support**: Optional CUDA acceleration +- **Three estimators with one model spec**: + - `chs` — Kalman MLE (CHS 2010), the historical core. + - `af` — sequential Halton-quadrature MLE (Antweiler & Freyberger 2025), + period-by-period. + - `amn` — three-stage mixture-of-normals (Attanasio, Meghir & Nix 2020): + EM, minimum distance, simulated regression. -## Public API - -The main package exports three functions: - -- `get_maximization_inputs()`: Prepare optimization problem for parameter estimation -- `get_filtered_states()`: Extract filtered latent factor estimates -- `simulate_dataset()`: Generate synthetic data from model specification + The three estimators do **not** support the same data features and model + constructs (measurement families, missing data, corrections, anchoring). See + [Estimator Prerequisites](reference_guides/estimator_prerequisites.md) for the + full comparison before choosing one. +- **Strongly-typed, immutable model spec**: frozen dataclasses with + `MappingProxyType` containers throughout. +- **JAX everywhere**: jitted likelihoods, autodiff gradients, optional GPU. -And dataclasses for model specification: +## Public API -- `ModelSpec`: Main model specification container -- `FactorSpec`: Specification for individual factors -- `AnchoringSpec`: Anchoring settings -- `EstimationOptions`: Options for estimation -- `Normalizations`: Normalization settings for loadings and intercepts +The top-level `skillmodels` package re-exports the model-spec dataclasses that +every estimator consumes: + +- `ModelSpec` +- `FactorSpec` +- `AnchoringSpec` +- `Normalizations` +- `CorrectionSpec` — control-function correction for an endogenous investment + factor, read by both CHS and AMN (see + [Endogeneity Corrections](reference_guides/endogeneity_corrections.md)). + +The helper `generate_kappa_terms` (also top-level) builds the `cf`-interaction +monomial basis you pass as a `CorrectionSpec` target's `kappa_terms`. + +Estimator-specific entry points live in their own subpackages so the scope of +each call is explicit at the import site: + +```python +from skillmodels.chs import ( + CHSEstimationOptions, + estimate_chs, # one-call CHS estimator with ML inference + get_maximization_inputs, # likelihood + gradients + constraints for optimagic +) +from skillmodels.af import ( + AFEstimationOptions, + estimate_af, + compute_af_standard_errors, +) +from skillmodels.amn import ( + AMNEstimationOptions, + estimate_amn, + compute_amn_standard_errors, +) +``` + +`estimate_chs` is the turnkey CHS driver: it wraps `get_maximization_inputs` +and `estimagic.estimate_ml`, so the returned `CHSEstimationResult` carries ML +inference (via `result.likelihood_result`). `get_maximization_inputs` remains +the power-user escape hatch for callers who want to drive the optimiser +themselves. The estimator entry points (`estimate_chs`, `estimate_af`, +`estimate_amn`) and the `CorrectionSpec` / `generate_kappa_terms` helpers are +also importable directly from the top-level `skillmodels` package. + +Estimator-agnostic helpers live under `skillmodels.common`: + +```python +from skillmodels.common.simulate_data import simulate_dataset, simulate_policy_effect +from skillmodels.common.variance_decomposition import ( + decompose_measurement_variance, + summarize_measurement_reliability, +) +from skillmodels.common.diagnostic_plots import ( + plot_likelihood_contributions, + plot_residual_boxplots, +) +from skillmodels.common.state_ranges import create_state_ranges +``` + +The estimator-agnostic diagnostic and variance-decomposition helpers take +pre-computed DataFrames (`residuals`, `contributions`, `filtered_states`); the +caller produces them via the estimator they ran. See the how-to guides for +worked examples. ## Implementation Notes -The CHS estimator implemented here differs from the original +The CHS estimator differs from the original [replication files](https://tinyurl.com/yyuq2sa4) in two ways: -1. Uses different normalizations that account for the - [critique](https://tinyurl.com/y3wl43kz) of Wiswall and Agostinelli -2. Uses robust square-root implementations of the Kalman filters +1. Supports normalization schemes designed to address the + [critique](https://tinyurl.com/y3wl43kz) of Wiswall and Agostinelli. The + model checker performs only syntactic checks on the supplied normalizations; + it does not run a transition-specific rank/invariance analysis, so it does + not by itself guarantee identification of an arbitrary scheme. +2. Uses robust square-root implementations of the Kalman filters. + +The AF and AMN estimators are independent rewrites of the algorithms in their +respective papers and share only the `ModelSpec` and parameter-index machinery +with CHS; they do not call the Kalman filter. ## Citation If you find skillmodels helpful for research, please cite it. See the -[GitHub repository](https://github.com/OpenSourceEconomics/skillmodels) for citation -information. +[GitHub repository](https://github.com/OpenSourceEconomics/skillmodels) for +citation information. ## Feedback -If you encounter any problems or have suggestions, please open an issue on +If you hit a problem or have a suggestion, please open an issue on [GitHub](https://github.com/OpenSourceEconomics/skillmodels/issues). diff --git a/docs/myst.yml b/docs/myst.yml index 0f443a46..f936dea8 100644 --- a/docs/myst.yml +++ b/docs/myst.yml @@ -32,17 +32,22 @@ project: - title: How-to Guides children: - file: how_to_guides/model_specs.md + - file: how_to_guides/how_to_estimate_af.md + - file: how_to_guides/how_to_estimate_amn.md + - file: how_to_guides/how_to_compare_estimators.md - file: how_to_guides/how_to_simulate_dataset.ipynb - file: how_to_guides/how_to_visualize_transition_equations.ipynb - file: how_to_guides/how_to_visualize_pairwise_factor_distribution.ipynb - file: how_to_guides/how_to_visualize_correlations.ipynb - title: Explanations children: + - file: explanations/architecture.md - file: explanations/names_and_concepts.md - file: explanations/notes_on_factor_scales.md - file: explanations/linear_predict.md - title: Reference Guides children: + - file: reference_guides/estimator_prerequisites.md - file: reference_guides/transition_functions.md - file: reference_guides/endogeneity_corrections.md error_rules: diff --git a/docs/reference_guides/endogeneity_corrections.md b/docs/reference_guides/endogeneity_corrections.md index 15f7e5ba..c5899bd0 100644 --- a/docs/reference_guides/endogeneity_corrections.md +++ b/docs/reference_guides/endogeneity_corrections.md @@ -1,107 +1,225 @@ # Endogeneity Corrections -When investment decisions depend on concurrent latent factor values, investments are -endogenous. skillmodels implements an endogeneity correction via the control function -approach, using period augmentation in the Kalman filter. +When investment decisions depend on the concurrent latent state, investment is +endogenous: its shock is correlated with the production shock of the factors it +feeds. The **control-function** approach corrects for this by adding the +unobserved component of investment — a first-stage residual `cf` — to the +production equations of the affected factors. -## Using Endogenous Factors +skillmodels exposes this as a single, declarative object: a `CorrectionSpec` +attached to the endogenous investment factor. The same specification is read by +both estimators that implement the correction (CHS and AMN), so the control +function is configured in exactly one place regardless of which estimator runs. -Mark a factor as endogenous by setting `is_endogenous=True` on its `FactorSpec`: +## The `CorrectionSpec` interface + +`CorrectionSpec` lives in `skillmodels.common.model_spec` and is re-exported +from the top-level package (`from skillmodels import CorrectionSpec`). You +declare it via the `correction=` field of the endogenous investment `FactorSpec` +(the factor must still set `is_endogenous=True`): ```python -from skillmodels import FactorSpec, ModelSpec +from skillmodels import CorrectionSpec, FactorSpec, ModelSpec, Normalizations model = ModelSpec( factors={ - "cognitive": FactorSpec( + "skills": FactorSpec( measurements=(("y1", "y2"), ("y1", "y2")), - # ... normalizations ... + normalizations=Normalizations( + loadings=({"y1": 1}, {"y1": 1}), + intercepts=({"y1": 0}, {}), + ), transition_function="linear", ), "investment": FactorSpec( - measurements=(("inv1", "inv2"), ("inv1", "inv2")), - # ... normalizations ... - is_endogenous=True, + measurements=(("i1", "i2"), ("i1", "i2")), + normalizations=Normalizations( + loadings=({"i1": 1}, {"i1": 1}), + intercepts=({"i1": 0}, {}), + ), transition_function="linear", + is_endogenous=True, + correction=CorrectionSpec( + state_predictors=("skills",), + instruments=("income",), + targets=("skills",), + ), ), }, + observed_factors=("income",), ) ``` -## How It Works: Period Augmentation +This is the model used in `tests/test_amn_simulate_and_regress.py` +(`_cf_model`); see also `tests/test_cf_recovery.py` for the end-to-end CHS +recovery test. -When the model contains endogenous factors, skillmodels internally doubles the number of -periods. Each original period is split into two augmented periods: +### Fields -1. **Even augmented periods** (0, 2, 4, ...): State factor measurements are updated. -2. **Odd augmented periods** (1, 3, 5, ...): Endogenous factor measurements are updated - using the predicted state values. +`CorrectionSpec` has the following fields (see +`src/skillmodels/common/model_spec.py`): -This sequential updating ensures that endogenous factors are measured conditional on -current state information, which is essential for the control function approach. +- `instruments: tuple[str, ...]` — **required**, at least one. Excluded observed + factors that enter the first-stage investment equation **only** (never a + production equation), and so identify the correction coefficient `kappa`. With + no excluded instrument the residual would be collinear with the production + inputs and `kappa` would be unidentified (the `__post_init__` raises + `ValueError`). Instruments must be observed factors on the `ModelSpec`; + `ModelSpec.with_correction` registers them for you (see below). +- `state_predictors: tuple[str, ...] = ()` — state factors entering the + first-stage equation. Empty means **all** state factors. +- `targets: tuple[str, ...] = ()` — state factors whose production equation + receives the additive `kappa * cf` term. Empty means **all** state factors. +- `kappa_degree: int | None = None` — degree of the `cf`-interaction polynomial + applied to every target. `1` is a linear `cf` term; `2` is the translog basis. + `None` resolves to degree `1`. Mutually exclusive with `kappa_terms`. +- `kappa_terms: Mapping[str, tuple[str, ...]] | None = None` — per-target + override of the `cf` regressor names, e.g. + `{"skills": ("cf", "cf ** 2", "cf * skills")}`. Mutually exclusive with + `kappa_degree`. A target omitted from the mapping defaults to `("cf",)`. -## Correction Factors +`kappa_degree` and `kappa_terms` are mutually exclusive; supplying both raises +`ValueError`. -For a full control function correction, add a correction factor with -`is_correction=True`. A correction factor must also be endogenous: +### How the `cf` regressors are resolved -```python -model = ModelSpec( - factors={ - "cognitive": FactorSpec( - measurements=(("y1", "y2"), ("y1", "y2")), - # ... - ), - "investment": FactorSpec( - measurements=(("inv1", "inv2"), ("inv1", "inv2")), - is_endogenous=True, - # ... - ), - "investment_pred": FactorSpec( - measurements=(("inv1", "inv2"), ("inv1", "inv2")), - is_endogenous=True, - is_correction=True, - # ... - ), - }, -) -``` +Internally (in `process_model._resolve_control_function`) each target's +regressor list is resolved as follows: -The correction factor typically shares the same measurements as the endogenous factor it -corrects. In the transition function, the difference between the actual and predicted -values (the control function residual) captures the endogeneity: +- if `kappa_terms` is set, target `t` uses `kappa_terms.get(t, ("cf",))`; +- otherwise the degree (defaulting to `1`) is expanded over the state factors + via `generate_kappa_terms`, and every target shares that basis. + +## Building the basis with `generate_kappa_terms` + +`generate_kappa_terms` (top-level: `from skillmodels import +generate_kappa_terms`) builds the `cf`-interaction monomial basis you can pass +as a target's `kappa_terms`: ```python -@register_params(params=["investment", "investment_pred", "cf", "constant"]) -def f_cognitive(investment, investment_pred, params): - cf = investment - investment_pred - return ( - params["constant"] - + params["investment"] * investment - + params["cf"] * cf - ) +from skillmodels import generate_kappa_terms + +generate_kappa_terms(("skills", "health"), max_degree=1) +# ("cf",) + +generate_kappa_terms(("skills", "health"), max_degree=2) +# ("cf", "cf * skills", "cf * health", "cf ** 2") ``` -The estimated `cf` coefficient captures the effect of the unobserved component of -investment on the outcome. +Its signature is +`generate_kappa_terms(factors, max_degree, max_cf_power=None) -> tuple[str, ...]`: +every monomial `cf ** a * prod_i factor_i ** b_i` with `a >= 1` and total degree +`a + sum_i b_i <= max_degree` (optionally capping the `cf` power at +`max_cf_power`). Pass the result as a target's `kappa_terms` and pin any unwanted +coefficients to zero with an optimagic constraint. + +## Builder methods on `ModelSpec` + +Two fluent builders make it easy to add or remove the correction without +rewriting the factor dict: + +- `ModelSpec.with_correction(factor_name, correction)` — attach `correction` to + `factor_name` **and** auto-register its instruments as observed factors + (deduped against existing ones), so instruments are declared exactly once: + + ```python + model = base_model.with_correction( + "investment", + CorrectionSpec( + state_predictors=("skills",), + instruments=("income",), + targets=("skills",), + ), + ) + # "income" is now in model.observed_factors automatically. + ``` + +- `ModelSpec.without_correction()` — return a copy with every + `FactorSpec.correction` stripped. Useful for running an estimator that does not + implement the correction (AF) on a spec authored for CHS. + +You can equivalently set `correction=` directly on the `FactorSpec` (as in the +first example), but then you must list the instruments in `observed_factors` +yourself. + +## Estimator support + +The correction is read from the model spec by all three estimators, but only two +implement it: + +| Estimator | Control-function support | +| ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **CHS** (`estimate_chs` / `get_maximization_inputs`) | Full polynomial `kappa` basis. Any `kappa_degree` / `kappa_terms` is honoured; the `cf` nodes are grafted into the per-period transition DAG. | +| **AMN** (`estimate_amn`) | **Linear `cf` term only.** A higher-order `kappa_terms` request (anything other than `("cf",)` per target) raises `NotImplementedError` in Stage 3. | +| **AF** (`estimate_af`) | **Not implemented.** If any `FactorSpec.correction` is set, `validate_af_model` raises `NotImplementedError`, directing you to `estimate_chs` or `ModelSpec.without_correction()`. | + +The AMN gate lives in `src/skillmodels/amn/simulate_and_regress.py`: if any +target's `kappa_terms` is not exactly `("cf",)`, it raises `NotImplementedError` +("AMN implements only a linear control function (kappa \* cf) ... use +estimate_chs for the full polynomial basis"). + +The AF gate lives in `src/skillmodels/af/validate.py`: AF covers only the +`kappa = 0` (exogenous-investment) special case, so any declared correction +raises `NotImplementedError`. Strip it with `ModelSpec.without_correction()` to +run AF. + +## How it works internally + +The CHS estimator does not require you to write a custom transition function for +the correction. `process_model` injects three kinds of synthetic node into the +per-period transition DAG (see `src/skillmodels/common/control_function.py`): + +1. a deterministic, contemporaneous first-stage prediction + `E[ln I_t | theta_t, Y_t]` for the endogenous investment factor, fitted over + the `state_predictors` and `instruments`; +2. the residual `cf_t = ln I_t - E[ln I_t | theta_t, Y_t]`; and +3. for each target factor, the additive `sum_k kappa_k * cf_term_k` grafted onto + the factor's base transition output. + +The first-stage coefficients appear in the params DataFrame under the +`investment_eq` category and the correction coefficients under the `kappa` +category. The corrected production-shock SD is recovered in `shock_sds`. + +Models with endogenous factors split each calendar period into augmented periods +internally (`aug_period`); this is what lets the investment residual be measured +conditional on the current state before it enters the next factor's production +equation. Augmented periods are strictly internal — every public function +accepts and returns the user-facing `period`. ## Background: CHS Methods -Cunha, Heckman, and Schennach (2010) propose two alternative endogeneity correction -methods that rely on stronger assumptions about factor scales: +Cunha, Heckman, and Schennach (2010) propose two alternative endogeneity +correction methods that rely on stronger assumptions about factor scales: ### Time-Invariant Heterogeneity (Section 4.2.4) -Adds a time-invariant individual fixed effect. Requires constant factor scales across -all periods (highly unlikely with KLS transition functions), age-invariant normalization -measurements, and three adult outcomes. +Adds a time-invariant individual fixed effect. Requires constant factor scales +across all periods (highly unlikely with KLS transition functions), +age-invariant normalization measurements, and three adult outcomes. ### Time-Varying Heterogeneity (Section 4.2.5) Uses heterogeneity following an AR(1) process. Requires constant factor scales, a -time-invariant investment equation, and exclusion restrictions (e.g., income affects -investment but not skill transitions). +time-invariant investment equation, and exclusion restrictions (e.g., income +affects investment but not skill transitions). These methods are not implemented in skillmodels. If your dataset meets their requirements, consider the original [CHS Fortran code](https://tinyurl.com/yyuq2sa4). + +## Legacy / migration + +Earlier versions of skillmodels exposed the control function through a much more +manual interface. If you are migrating an old model spec, note: + +- There is **no separate correction factor.** A dedicated `is_correction=True` + factor paired with the endogenous factor is gone; `is_correction` is no longer + a `FactorSpec` field. Replace the pair with a single endogenous investment + factor carrying a `CorrectionSpec`. +- You no longer write the control function by hand. The old pattern — a custom + transition decorated with `@register_params` that computed + `cf = investment - investment_pred` inside the function body — is obsolete. The + library now forms `cf` and injects `kappa * cf` for you from the + `CorrectionSpec`. +- Period augmentation is unchanged but is now an internal detail (see "How it + works internally" above); you do not configure it directly. diff --git a/docs/reference_guides/estimator_prerequisites.md b/docs/reference_guides/estimator_prerequisites.md new file mode 100644 index 00000000..656c38e1 --- /dev/null +++ b/docs/reference_guides/estimator_prerequisites.md @@ -0,0 +1,46 @@ +# Estimator Prerequisites — When to Use Which + +skillmodels ships three estimators for the same family of nonlinear dynamic latent +factor models — CHS, AF, and AMN. They accept the same structural `ModelSpec`, but they +differ in what data features and model constructs they actually support. Pick an +estimator by checking your model against the prerequisites below **before** estimating; +a feature one estimator handles natively may be rejected, ignored, or silently +restricted by another. + +A statement that a model uses, say, `ModelSpec.measurement_models` does **not** imply +uniform support: measurement-family handling in particular differs sharply across the +three estimators. + +## Prerequisites matrix + +| Dimension | CHS | AF | AMN | +| --------- | --- | -- | --- | +| Estimator | Joint maximum likelihood with square-root Gaussian-component filtering. | Sequential period-by-period likelihood with Halton integration. | Three stages: Gaussian-mixture EM → minimum distance → simulate-and-regress. | +| Latent distribution | Finite mixture of Gaussian initial states via `ModelSpec.n_mixtures`; Gaussian component filtering thereafter. | Initial finite mixture plus sequentially carried distributions; Halton nodes approximate the integrals. | Stage-1 Gaussian mixture over the augmented measurement vector; `n_mixtures` sets the component count. | +| Measurement families | **Gaussian only** (standard Kalman update): `get_maximization_inputs` / `estimate_chs` raise `NotImplementedError` if `ModelSpec.measurement_models` declares any probit/Tobit measurement. | **Initial period only**: probit/Tobit measurement families are honoured at the period-0 measurement system; transition periods ($t \geq 1$) fall back to an all-Gaussian measurement kernel. | **Gaussian only**: `estimate_amn` raises `NotImplementedError` if `ModelSpec.measurement_models` declares any probit/Tobit measurement. | +| Missing data | Gaussian measurement updates skip individually missing measurements. | Measurement masks skip missing rows in the per-step likelihood contributions. | `mixture_em_method="complete_case"` (default) or `"missing_data"` (marginalises over missing entries under MAR); never-observed columns require `allow_never_observed_measurements=True`. | +| Endogenous investment | Reconstructed endogenous factors plus a full `CorrectionSpec` control-function basis. | Reconstructed endogenous investment with independent shocks (source/destination calendar adapter); rejects `CorrectionSpec` / nonzero `kappa`. | Endogenous investment in Stage 3; correction support is a linearised control-function term, narrower than CHS. | +| Corrections | Full `CorrectionSpec` / `kappa` polynomial basis in the processed transition DAG. | Not implemented — the validator raises if a `CorrectionSpec` is attached. | Linear `cf` term only; a higher-order `kappa_terms` request raises. | +| Custom transitions | Built-ins and `@register_params` callables. | Built-ins and `@register_params` callables. | Built-ins and `@register_params` callables via the Stage-3 generic NLS path, but `log_ces` / `log_ces_with_constant` reject fixed parameters there. | +| `fixed_params` | Honoured through the shared parameter index. | Honoured (with public `constraints=` limited to `select_by_loc` equality groups). | Honoured only for the categories each stage estimates (Stage-2 loadings/intercepts/SDs, Stage-3 `transition`); other categories raise. `start_params` and `constraints` raise. | +| Normalization | Shared `Normalizations` / `fixed_params` / equality constraints. The checker is a precheck, not an identification proof. | Same public `ModelSpec`, with the AF-specific source/destination calendar and `af_state_role` metadata. | Stage-2 imposes its own structural moment restrictions and a mean-zero mixture convention. | +| Anchoring | Supported through `get_maximization_inputs` / the CHS path. | Not part of the AF likelihood; downstream visualization only. | Not wired through the AMN stages (the result reports unanchored scales). | +| Cost / scaling | Potentially expensive joint ML; the JAX square-root filter helps numerical stability. | Sequential but quadrature-heavy; cost grows with node count and state dimension. | Fast when the stages are well behaved; the cluster bootstrap is expensive because it re-estimates every stage. | +| Use it for | Likelihood benchmark, anchoring, correction-heavy models, Gaussian measurement systems. | Sequential AF-style models, initial-period limited measurements, period-by-period diagnostics. | Mixture-heavy Gaussian-measurement models, fast start values for CHS, Stage-1/2 structural diagnostics. | + +## Reading the matrix + +- **Measurement families** are the sharpest divide. If any measurement is probit or + Tobit, AMN and CHS reject the model outright, and AF honours it only at the + initial period. Only models with + initial-period-only limited measurements have genuine (partial) support, via AF. +- **Endogeneity corrections** flow through `FactorSpec.correction` (a `CorrectionSpec`). + CHS reads the full polynomial `kappa` basis; AMN keeps only the linear term; AF + rejects the correction entirely (its endogenous-investment handling is the + reconstructed-factor calendar adapter, not a control function). +- **`start_params` / `constraints`** are CHS/AF concepts; AMN raises on both. + +See [How to compare estimators](../how_to_guides/how_to_compare_estimators.md) for an +overlay of all three on the same data with confidence intervals, and +[Endogeneity Corrections](endogeneity_corrections.md) for the `CorrectionSpec` +interface. diff --git a/docs/reference_guides/transition_functions.md b/docs/reference_guides/transition_functions.md index caee530f..93832a60 100644 --- a/docs/reference_guides/transition_functions.md +++ b/docs/reference_guides/transition_functions.md @@ -3,6 +3,14 @@ Transition functions describe how latent factors evolve over time. skillmodels provides several pre-built functions and supports custom functions. +The same transition functions work for all three estimators (CHS, AF, AMN) — they live +in `skillmodels.common.transition_functions` and are dispatched by name through each +estimator's pipeline. CHS and AF support both the pre-built set and custom +`@register_params` transitions. AMN also supports custom callables through its Stage-3 +generic nonlinear-least-squares path, but with narrower correction- and +fixed-parameter support than CHS (for example, `log_ces` / `log_ces_with_constant` +reject fixed parameters in that path). + ## Pre-built Transition Functions ### linear @@ -30,11 +38,78 @@ translog function. **Parameters**: Linear terms, squared terms, interaction terms, and constant. +This is the general-library specification: parameters are enumerated over **all** +factors (latent and observed). An observed factor (e.g. income) therefore enters +the production function with its own free linear, square and interaction +coefficients. This is by design for the CHS estimator. In an AF production +function, observed factors must affect skills only through the investment +equation, so use `translog_af` (below) instead. + +### translog_af + +The AF (2020) production translog from equation (6): linear terms plus pairwise +interactions only, with **no** squared-factor terms: + +$$ +f_{t+1} = \sum_j \beta_j s_j + \sum_{j < k} \delta_{jk} s_j s_k + c +$$ + +For the canonical (skill, investment) pair this matches AF eq. (6), +$a_t + g_1 \ln\theta + g_2 \ln I + g_3 \ln\theta \ln I$. + +Unlike the general `translog`, this function enumerates parameters over only the +production factors you pass to it. Use it for AF production so that observed +factors (e.g. income) cannot leak in as free production coefficients — pass only +the production factors (skill + investment) and keep observed factors out of the +production function. See [When to use the AF variants](#when-to-use-the-af-variants) +below. + +**Parameters**: Linear terms, interaction terms, and constant (no squares). + ### robust_translog Same as `translog` but clips state values at ±10^12 before computation. Use this when states might grow very large and cause numerical overflow. +### stable_translog + +Like `translog`, but every square and interaction is evaluated on a smoothly clipped +state, while the linear part is untouched: + +$$ +f_{t+1} = \sum_j \beta_j s_j + \sum_j \gamma_j g(s_j)^2 + \sum_{a **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Add a translog transition function whose squares and interactions are evaluated on smoothly clipped states, so that the base nonlinear remainder is bounded and the stated conditional drift theorem applies, and register it everywhere skillmodels enumerates built-in transition names. + +**Architecture:** One new function plus its `params_` and `identity_constraints_` companions in `src/skillmodels/common/transition_functions.py`, following the `robust_translog` pattern of delegating names and constraints to the translog helpers. Three allow-lists learn the new name. Tests pin equality with the translog near zero, boundedness far from zero, and a 200-period iteration with real estimated coefficients. One docs section. + +**Tech Stack:** Python 3.14, JAX (`jax.numpy`), pytest, pixi environment `tests-cpu`. All commands run from the skillmodels repository root `/home/hmg/econ/skillmodels-applications/skillmodels` and go through pixi (never bare `python` or `pytest`). Use `zsh -ic "cap pixi run -e tests-cpu pytest ... -v"` for test runs on the local Linux boxes. + +**Spec:** `docs/superpowers/specs/2026-10-16-stable-translog-design.md` (same repository). Read sections 2 and 3 before starting; section 2.2 states exactly what the function guarantees. + +**Audit:** round-0 Pro audit (`~/sciebo/pro-audits/skillmodels-stable-translog/bundle-round0/result/`) returned `serious_gap`: F1 theorem scope (text, applied via P1), F2 finite-tail overflow of the naive clip (fixed in Task 1 Step 4), F3 non-discriminating tests (replaced by the reviewer suites RT1/RT2/MT2 in Tasks 1-3). Reviewer test sources and the decimal oracle live in `docs/superpowers/specs/stable-translog-audit/`. Task 6 produces the closure evidence. + +## Global Constraints + +- Function signature must be `(states: Array, params: Array) -> Array`; extra arguments only as keywords with defaults (`scale: float = 3.0`, `power: int = 4`). String lookup via `getattr(transition_functions, "stable_translog")` must work. +- Parameter layout identical to `translog`: `[linear (nfac), squares (nfac), interactions (nfac choose 2 in `itertools.combinations` order), constant]`. +- No new dependencies. No changes to `translog`, `robust_translog`, or any estimator code. +- Code style: the repo runs `prek` (ruff, ty). Type hints with `Array` from `jax` as the file actually does. Docstrings in the file's existing style. +- Commits on a new branch `stable-translog` created from `94aa213` (branch `missing-observed-factors` is the current checkout; do not commit there). Each task ends with a commit. + +## Review Focus + +Inputs or conditions the spec implies but which are easy to get wrong; each has a pinning test in the task named. + +1. `power` odd or non-integer: `|x/s|^p` is used, so odd p still yields an odd g, but p = 1 is not C-infinity at zero (although g itself has a first derivative there). Pin: Task 1 test that `power=4` default is used and that the docstring states even p; reject values outside the documented even-integer domain; also validate positive finite scale (Task 1). +2. `states` containing `inf` or `nan` (e.g. from an upstream overflow): g(inf) must be ±s, not nan. `x / (1 + |x/s|^p)^(1/p)` is inf/inf = nan at x = inf. Pin: Task 1 test with `jnp.inf` input expecting a finite nonlinear contribution; implementation uses `jnp.where(jnp.isfinite(x), ..., s * jnp.sign(x))`. +3. Gradients: the even-power mathematical clip is smooth. Verify the implemented derivative independently at zero, around both clip knees, and in finite tails, including identity coefficients; do not rely on a convention for the derivative of abs at zero (Task 1). +4. Mixed latent and observed factors: observed factors (inputs) are part of `states` and are also clipped inside nonlinear terms. For an input with |value| > scale (e.g. unscaled wealth) this silently changes the estimand. Pin: Task 4 docs state it; Task 1 test shows an observed input at 50 is clipped to below scale in the interaction term, so users see the behaviour. +5. Identity period: the first-period identity transition must be exact. Fixing squares and interactions at 0 and the own linear coefficient at 1 makes the output equal to the state regardless of g. Pin: Task 1 test that with identity-constraint values the function returns the own state exactly for states far beyond scale. + +--- + +### Task 1: The function, its companions, and unit tests + +**Files:** +- Modify: `src/skillmodels/common/transition_functions.py` (append after `identity_constraints_robust_translog`, line 383) +- Test: `tests/test_stable_translog.py` (new; from `docs/superpowers/specs/stable-translog-audit/test_kernel.py` + `test_tail_mutations.py`) +- Create: `tests/stable_translog_reference.py` (copy of `docs/superpowers/specs/stable-translog-audit/reference.py`, independent decimal oracle) + +**Interfaces:** +- Consumes: `translog`, `params_translog`, `identity_constraints_translog`, `FixedConstraintWithValue`, `combinations`, `jnp`, `Array` (all already imported in the module). +- Produces: `stable_translog(states, params, scale=3.0, power=4) -> Array`, `params_stable_translog(factors) -> list[str]`, `identity_constraints_stable_translog(factor, aug_period, all_factors) -> list[FixedConstraintWithValue]`, `_soft_clip(x, scale, power) -> Array`. + +- [ ] **Step 1: Create the branch** + +```bash +cd /home/hmg/econ/skillmodels-applications/skillmodels +git stash list # note: .ai-instructions is modified in the working tree; leave it alone +git switch -c stable-translog 94aa213 +``` + +- [ ] **Step 2: Write the failing tests** + +The tests are the reviewer's native acceptance suite (RT1) and tail generators (MT2) from +the round-0 audit, checked against an independent 90-digit `decimal` oracle. Copy them in +rather than retyping: + +```bash +cd /home/hmg/econ/skillmodels-applications/skillmodels +cp docs/superpowers/specs/stable-translog-audit/reference.py tests/stable_translog_reference.py +{ cat docs/superpowers/specs/stable-translog-audit/test_kernel.py + sed -n '/^@pytest.mark.parametrize/,$p' docs/superpowers/specs/stable-translog-audit/test_tail_mutations.py +} > tests/test_stable_translog.py +``` + +Then edit `tests/test_stable_translog.py` by hand: + +1. Delete the two `if sys.version_info[:2] != (3, 14): raise RuntimeError(...)` lines and the + `sys.path.insert(0, ...)` line (pytest prepends `tests/` to `sys.path` because the + directory has no `__init__.py`). +2. Replace `from audit_oracles.reference import clip, clip_derivative, transition` with + `from stable_translog_reference import clip, clip_derivative, transition`. +3. Replace the module docstring with + `"""stable_translog against an independent decimal oracle (round-0 audit RT1 + MT2)."""`. +4. Append this test (Review Focus 4, observed input beyond scale): + +```python +def test_observed_input_beyond_scale_is_clipped_in_interaction(api) -> None: + f = api[0] + # one latent at 1.0, one observed input at 50: only the interaction coefficient is on + params = jnp.array([0.0, 0.0, 0.0, 0.0, 1.0, 0.0]) + value = float(f(jnp.array([1.0, 50.0]), params)) + assert_allclose(value, float(clip(1.0) * clip(50.0)), rtol=3e-14) + assert value < 3.0 # translog would give 50 +``` + +`tests/stable_translog_reference.py` is stdlib only; keep its `main()` so +`pixi run -e tests-cpu python tests/stable_translog_reference.py` reprints the certificate +JSON (fixed-point count 1, fidelity 0.0061 / 0.0862, overflow witness). Add +`# ruff: noqa` as its second line; it is reviewer-authored reference code, not house style. + +The suite covers: finite tails through 1e80 and ±inf/NaN semantics; every coefficient +position in isolation for n = 1..4 and simultaneous factor/coefficient permutation; the +default fidelity budgets at |x| = 1 and 2 (kills a `scale=2.5` mutant); all 200 iterates +and the fixed point −0.013063101278542104 of the run E psychological map; analytical +gradients at zero, both clip knees and their neighbouring floats, and finite tails; +JIT/vmap/scan with static non-default `scale`/`power`; the scaling identity +g(a·x; a·s) = a·g(x; s); name and identity-constraint companions; loud `ValueError` for +invalid `scale` and `power`; and the float64 overflow threshold s·max^(1/p) with its +neighbouring floats for three (scale, power) pairs. + +- [ ] **Step 3: Run the tests to verify they fail** + +Run: `zsh -ic "cap pixi run -e tests-cpu pytest tests/test_stable_translog.py -v -p no:cacheprovider"` +Expected: collection error `ImportError: cannot import name 'stable_translog'`. + +- [ ] **Step 4: Implement** + +Add the standard-library `import math`, then append to `src/skillmodels/common/transition_functions.py` after `identity_constraints_robust_translog`: + +```python +def _soft_clip(x: Array, scale: float, power: int) -> Array: + """Smooth odd map; in real arithmetic |g(x)| < scale for finite x. + + Floating-point results may round to +/-scale. + + g(x) = x / (1 + |x / scale| ** power) ** (1 / power). The helper maps +/-infinity to +/-scale and preserves NaN. + The full transition does not repair nonfinite linear inputs. + """ + # Validate configuration in stable_translog; every evaluated branch is safe. + safe_x = jnp.where(jnp.isfinite(x), x, 0.0) + magnitude = jnp.abs(safe_x) + inside = magnitude <= scale + # Match this tie branch to the numerator branch for the correct derivative at |x|=scale. + m = jnp.where(inside, scale, magnitude) + unit_x = safe_x / m + unit_s = scale / m + denominator = (unit_s**power + unit_x**power) ** (1.0 / power) + # Keeping x itself in the small branch avoids losing subnormals in x / scale. + numerator = jnp.where(inside, safe_x, scale * unit_x) + clipped = numerator / denominator + return jnp.where(jnp.isfinite(x), clipped, scale * jnp.sign(x)) + + +def stable_translog( + states: Array, + params: Array, + *, + scale: float = 3.0, + power: int = 4, +) -> Array: + """Translog whose squares and interactions are evaluated on soft-clipped states. + + f = c + Σ_j β_j s_j + Σ_j γ_j g(s_j)² + Σ_{a= 2, got {power}." + raise ValueError(msg) + if not math.isfinite(scale) or scale <= 0: + msg = f"scale must be positive and finite, got {scale}." + raise ValueError(msg) + nfac = len(states) + constant = params[-1] + lin_beta = params[:nfac] + square_beta = params[nfac : 2 * nfac] + inter_beta = params[2 * nfac : -1] + + g = _soft_clip(states, scale=scale, power=power) + res = jnp.dot(states, lin_beta) + res += jnp.dot(g**2, square_beta) + for p, (a, b) in zip(inter_beta, combinations(range(nfac), 2), strict=False): + res += p * g[a] * g[b] + res += constant + return res + + +def params_stable_translog(factors: tuple[str, ...]) -> list[str]: + """Parameter names for stable_translog (same as translog).""" + return params_translog(factors) + + +def identity_constraints_stable_translog( + factor: str, + aug_period: int, + all_factors: tuple[str, ...], +) -> list[FixedConstraintWithValue]: + """Identity constraints for stable_translog (same as translog).""" + return identity_constraints_translog( + factor=factor, aug_period=aug_period, all_factors=all_factors + ) +``` + +Configuration must be closed over or explicitly static under JIT. Default string lookup is compatible; an explicitly passed Python int is not automatically static. Test `jax.jit(stable_translog, static_argnames=("scale", "power"))` for nondefaults. + +- [ ] **Step 5: Run the tests to verify they pass** + +Run: `zsh -ic "cap pixi run -e tests-cpu pytest tests/test_stable_translog.py tests/test_transition_functions.py -v -p no:cacheprovider"` +Expected: baseline tests and all new tests pass. Integrate the reviewer kernel +acceptance suite (RT1) before treating this step as green: actual default basis errors +at 1 and 2; direct oracle values rather than subtracting a huge linear term; finite +tails through 1e80; oddness/monotonicity; every coefficient position; simultaneous +factor permutations; every state in the 200-step path; zero/knee/tail analytical +gradients; JIT, vmap, scan, and static nondefault settings. A strict real-arithmetic +`|g| +Claude-Session: https://claude.ai/code/session_017psXwkMuDeVmTu5WgoM26k" +``` + +--- + +### Task 2: Register the name in the three allow-lists + +**Files:** +- Modify: `src/skillmodels/af/validate.py:15-45` (`_AF_COMPATIBLE_TRANSITIONS`, `_LEAKY_BUILTIN_PRODUCTION`) +- Modify: `src/skillmodels/amn/simulate_and_regress.py:254-262` (`builtin_names`) and the docstring lines 9, 359, 473 that list built-in names +- Test: `tests/test_transition_functions.py` +- Create: `tests/test_stable_translog_dispatch.py` (from `docs/superpowers/specs/stable-translog-audit/test_dispatch.py`) +**Interfaces:** +- Consumes: the name string `"stable_translog"` from Task 1. +- Produces: nothing new; AF validation accepts the name, AF leakage warning covers it, AMN stage 3 resolves it to the callable. + +- [ ] **Step 1: Write the failing tests** + +Append to `tests/test_transition_functions.py`: + +```python +def test_stable_translog_is_registered_in_allow_lists() -> None: + from skillmodels.af.validate import ( + _AF_COMPATIBLE_TRANSITIONS, + _LEAKY_BUILTIN_PRODUCTION, + ) + + assert "stable_translog" in _AF_COMPATIBLE_TRANSITIONS + assert "stable_translog" in _LEAKY_BUILTIN_PRODUCTION +``` + +Create `tests/test_stable_translog_dispatch.py` from the reviewer's RT2: + +```bash +cp docs/superpowers/specs/stable-translog-audit/test_dispatch.py tests/test_stable_translog_dispatch.py +``` + +and delete its `if sys.version_info[:2]!=(3,14): raise RuntimeError(...)` lines and the +`import sys`. It builds a real one-factor `ModelSpec`, runs `process_model`, and asserts +that `processed.transition_info.func` and `_resolve_transition_callable("stable_translog", ...)` +return the clipped law (9/√2 at x = 3 with params [0, 1, 0]; translog would give 9), and +that `validate_af_model` accepts the name. Source-string inspection is not an oracle. + +- [ ] **Step 2: Run them to verify they fail** + +Run: `zsh -ic "cap pixi run -e tests-cpu pytest tests/test_transition_functions.py tests/test_stable_translog_dispatch.py -v -p no:cacheprovider -k 'registered or stable_translog_dispatch or clipped or resolver or validation'"` +Expected: missing registration or an incorrect dispatched law fails the relevant test. + +- [ ] **Step 3: Edit the allow-lists** + +In `src/skillmodels/af/validate.py`, add `"stable_translog",` directly after each `"robust_translog",` line (lines 20 and 42). In `src/skillmodels/amn/simulate_and_regress.py`, add `"stable_translog",` after `"robust_translog",` in `builtin_names` (line 257) and append `stable_translog` to the three docstring enumerations at lines 9, 359 and 473 (e.g. `translog, robust_translog, stable_translog, linear_and_squares, ...`). + +- [ ] **Step 4: Run the tests** + +Run: `zsh -ic "cap pixi run -e tests-cpu pytest tests/test_transition_functions.py tests/test_stable_translog_dispatch.py tests/test_af_validate_production_leakage.py -v -p no:cacheprovider"` +Expected: all pass. + +- [ ] **Step 5: Commit** + +```bash +git add src/skillmodels/af/validate.py src/skillmodels/amn/simulate_and_regress.py tests/test_transition_functions.py tests/test_stable_translog_dispatch.py +git commit -m "Register stable_translog in AF and AMN built-in name lists + +Co-Authored-By: Claude Fable 5.1 +Claude-Session: https://claude.ai/code/session_017psXwkMuDeVmTu5WgoM26k" +``` + +--- + +### Task 3: End-to-end smoke test through the CHS estimator + +**Files:** +- Test: `tests/test_stable_translog_estimation.py` (new) + +**Interfaces:** +- Consumes: the CHS fixture of `tests/test_missing_observed_factors.py` (`_model`, `_data`, `_params`, `_loglikeobs`, `_endogenous_model`, `_endogenous_data`, `MOMENTS`, `OPTIONS`; importable as a sibling module because `tests/` has no `__init__.py`), `get_maximization_inputs` (keys `loglikeobs`, `loglike_and_gradient`, `params_template`), `register_params`, `params_translog`. +- Produces: proof that the string resolves through `process_model`, the params index, the constraints, the unscented predict step with the fixture's actual sigma points and weights (including the missing-observed-factor integration path), and the likelihood and its gradient, and that the dispatched law is the clipped one. + +Same-law oracle: a `@register_params` callable that evaluates the original formula +x / (1 + |x/3|⁴)^(1/4) with `jnp` on the bounded fixture states. It shares no code with +`stable_translog` or `_soft_clip` and goes through the custom-callable interface, so a +dispatcher that aliases translog fails by a numerical margin rather than passing with zero +discrepancy. No stable-versus-translog likelihood budget is asserted anywhere. + +- [ ] **Step 1: Write the failing test** + +Create `tests/test_stable_translog_estimation.py`: + +```python +"""stable_translog through the CHS likelihood, against an independent same-law oracle. + +Fixture: the two-latent, two-observed, three-period panel of +tests/test_missing_observed_factors.py (with missing observed-factor cells, so the +sigma-point integration over N(m, v) fills is exercised too) and its endogenous +two-period model with carry-forward substeps. +""" + +import jax +import jax.numpy as jnp +import numpy as np +import pytest +from numpy.testing import assert_allclose +from test_missing_observed_factors import ( + MOMENTS, + OPTIONS, + _data, + _endogenous_data, + _endogenous_model, + _loglikeobs, + _model, + _params, +) + +from skillmodels.chs.maximization_inputs import get_maximization_inputs +from skillmodels.common.decorators import register_params +from skillmodels.common.transition_functions import params_translog + +jax.config.update("jax_enable_x64", True) + + +def _g(x): + return x / (1.0 + jnp.abs(x / 3.0) ** 4) ** 0.25 + + +def _reference_law_for(all_factors: tuple[str, ...]): + """Original-formula translog-on-clipped-states as a registered custom callable.""" + names = params_translog(all_factors) + + @register_params(params=names) + def reference_law(params, **factors): + x = [factors[f] for f in all_factors] + g = [_g(v) for v in x] + out = params["constant"] + for f, v in zip(all_factors, x, strict=True): + out = out + params[f] * v + for f, gv in zip(all_factors, g, strict=True): + out = out + params[f"{f} ** 2"] * gv**2 + for i in range(len(x)): + for j in range(i + 1, len(x)): + out = out + params[f"{all_factors[i]} * {all_factors[j]}"] * g[i] * g[j] + return out + + return reference_law + + +REFERENCE = _reference_law_for(("fac1", "fac2", "ob1", "ob2")) + + +def _loglikeobs_and_grad(transition, data, nonlinear): + inputs = get_maximization_inputs(_model(2, transition, MOMENTS), data, chs_options=OPTIONS) + params = _params(inputs["params_template"], nonlinear=nonlinear) + _, grad = inputs["loglike_and_gradient"](params) + return np.asarray(inputs["loglikeobs"](params)), np.asarray(grad) + + +def test_zero_nonlinear_params_reproduce_linear_filter() -> None: + data = _data() + linear = _loglikeobs(_model(2, "linear", MOMENTS), data) + stable = _loglikeobs(_model(2, "stable_translog", MOMENTS), data) + assert_allclose(stable, linear, rtol=1e-10, atol=1e-10) + + +@pytest.mark.parametrize("ob_scale", [1.0, 10.0], ids=["inputs_inside_scale", "inputs_beyond_scale"]) +def test_contributions_and_gradient_match_same_law_reference(ob_scale) -> None: + data = _data() + data[["ob1", "ob2"]] *= ob_scale + stable, g_stable = _loglikeobs_and_grad("stable_translog", data, nonlinear=0.05) + reference, g_reference = _loglikeobs_and_grad(REFERENCE, data, nonlinear=0.05) + translog, _ = _loglikeobs_and_grad("translog", data, nonlinear=0.05) + assert np.all(np.isfinite(stable)) and np.all(np.isfinite(g_stable)) + assert_allclose(stable, reference, rtol=1e-10, atol=1e-10) + assert_allclose(g_stable, g_reference, rtol=1e-8, atol=1e-10) + # The sigma points reach the nonlinear region: an alias to translog must fail here. + assert np.max(np.abs(stable - translog)) > 1e-6 + + +def _endogenous_loglike(transition, nonlinear: float) -> float: + model = _endogenous_model(None) + model = model.with_transition_functions({"s": transition}) + inputs = get_maximization_inputs(model, _endogenous_data(), chs_options=OPTIONS) + params = inputs["params_template"].copy() + cat = params.index.get_level_values("category") + name2 = params.index.get_level_values(3).astype(str) + params["value"] = np.where(cat.isin(["meas_sds", "shock_sds", "loadings"]), 0.5, 0.1) + params.loc[(cat == "transition") & name2.str.contains(r"\*"), "value"] = nonlinear + for idx in params.query("category == 'initial_cholcovs'").index: + row, col = idx[3].split("-") + params.loc[idx, "value"] = float(row == col) + return float(inputs["loglike"](params)) + + +def test_endogenous_carry_forward_substeps_accept_stable_translog() -> None: + """Carry-forward substeps keep their identity/zero-kappa constraints; the law is finite.""" + linear = _endogenous_loglike("linear", nonlinear=0.0) + assert_allclose(_endogenous_loglike("stable_translog", nonlinear=0.0), linear, rtol=1e-10) + stable = _endogenous_loglike("stable_translog", nonlinear=0.1) + assert np.isfinite(stable) + assert abs(stable - _endogenous_loglike("translog", nonlinear=0.1)) > 1e-8 +``` + +If `ModelSpec.with_transition_functions` rejects a mapping for a single factor, use +`dataclasses.replace(model.factors["s"], transition_function=transition)` and rebuild the +`factors` dict as `tests/test_constraints.py::test_get_constraints_skips_custom_target_transition` +does. If the endogenous model's identity-constraint pass fixes nonlinear parameters to +zero on carry-forward substeps so that `stable` and `translog` coincide to 1e-8 in the last +assertion, lower the threshold is NOT the fix: print both values; if they are identical, +the nonlinear coefficient on `s` never enters the law and the fixture needs a measurement +in period 1 for `inv` so the transition is estimated, not pinned. +- [ ] **Step 2: Run it to verify it fails** + +Run: `zsh -ic "cap pixi run -e tests-cpu pytest tests/test_stable_translog_estimation.py -v -p no:cacheprovider"` +Expected: after implementing the real fixture, a missing/wrong dispatcher and a translog-alias mutation fail for numerical reasons, not for fictitious imports. + +- [ ] **Step 3: Run it to verify it passes** + +Same command. Expected: PASS. + +- [ ] **Step 4: Commit** + +```bash +git add tests/test_stable_translog_estimation.py +git commit -m "Smoke-test stable_translog through the CHS likelihood + +Co-Authored-By: Claude Fable 5.1 +Claude-Session: https://claude.ai/code/session_017psXwkMuDeVmTu5WgoM26k" +``` + +--- + +### Task 4: Documentation + +**Files:** +- Modify: `docs/reference_guides/transition_functions.md` (insert after the `### robust_translog` section, line 69-72; also add the name to the two enumerations at lines 143 and 159) + +- [ ] **Step 1: Insert the section** + +```markdown +### stable_translog + +Like `translog`, but every square and interaction is evaluated on a smoothly clipped +state, while the linear part is untouched: + +$$ +f_{t+1} = \sum_j \beta_j s_j + \sum_j \gamma_j g(s_j)^2 + \sum_{a +Claude-Session: https://claude.ai/code/session_017psXwkMuDeVmTu5WgoM26k" +``` + +--- + +### Task 5: Full suite, push, PR + +- [ ] **Step 1: Run the full non-long-running suite** + +Check for neighbours first: `systemctl --user status cap.slice`. Then +Run: `zsh -ic "cap pixi run -e tests-cpu pytest tests -m 'not long_running' -v -p no:cacheprovider -n 2"` +Expected: everything passes; preserve the actual command, revision, Python/JAX +versions, dtype, total session time, pytest call durations and Linux ru_maxrss. The +profile's JAX environment must agree with pyproject.toml (>=0.9). Native evidence is +not supplied by this review. Measure base versus implemented head on the same machine: +unit module <=30 seconds and <=4 GiB, new tests <5 seconds, full CI <=900 seconds and +<=8 GiB; warm/RSS repair triggers are 10%. Clarify the contract's ambiguous "after the +first call" wording versus zero warmups before certifying a warm-runtime comparison. +Do not label the supplied 2.47-second baseline pytest session as measured warm-kernel +time or infer missing peak memory. The normalized helper adds bounded O(n) arithmetic; +keep high-precision or exhaustive references out of the production hot path. + +- [ ] **Step 2: Push and open the PR** + +```bash +git push -u origin stable-translog +gh pr create --title "Add stable_translog transition function" --body "$(cat <<'EOF' +Translog whose squares and interactions are evaluated on soft-clipped states +g(x) = x / (1 + |x/s|^p)^(1/p), linear part untouched. Iterated transitions stay +bounded under the fixed-matrix, bounded-forcing theorem in the revised design; this +is not a general certificate for a composed stochastic model. + +Design note: docs/superpowers/specs/2026-10-16-stable-translog-design.md +Plan: docs/superpowers/plans/2026-10-16-stable-translog.md + +Motivation: in the health-cognition application the estimated psychological-capacity +translog has an unstable fixed point at -2.2, inside the data range; forward +predictions without measurements can diverge. The supplied diagnostic claims do +not establish that every likelihood value or gradient is unaffected; estimation and +simulation with the changed law must be checked separately. + +Tests: unit tests for clipping, boundedness, identity, JIT/grad, a 200-period +iteration with the estimated coefficients, allow-list registration, and a CHS +likelihood smoke test. + +https://claude.ai/code/session_017psXwkMuDeVmTu5WgoM26k +EOF +)" +``` + +--- + +### Task 6: Closure evidence for the audit + +**Files:** +- Create: `docs/superpowers/specs/2026-10-16-stable-translog-native-closure.log` +- Create: `docs/superpowers/specs/2026-10-16-stable-translog-native-resource-report.json` +- Create: `docs/superpowers/specs/2026-10-16-stable-translog-completion-record.md` (from `~/sciebo/pro-audits/skillmodels-stable-translog/bundle-round0/result/CLAUDE-COMPLETION-RECORD.template.md`) + +- [ ] **Step 1: Native closure log** + +```bash +cd /home/hmg/econ/skillmodels-applications/skillmodels +{ git rev-parse HEAD; pixi run -e tests-cpu python -c "import sys, jax; print(sys.version); print('jax', jax.__version__)" + pixi run -e tests-cpu python tests/stable_translog_reference.py + zsh -ic "cap pixi run -e tests-cpu pytest tests/test_stable_translog.py tests/test_stable_translog_dispatch.py tests/test_stable_translog_estimation.py tests/test_transition_functions.py -v -p no:cacheprovider --durations=0" +} 2>&1 | tee docs/superpowers/specs/2026-10-16-stable-translog-native-closure.log +``` + +Expected: every test passes; the oracle JSON reports `fixed_point_count: 1`. + +- [ ] **Step 2: Resource report, base versus head** + +Run the unit module on `94aa213` (base) and on the branch head in fresh processes and +record wall time and `ru_maxrss`: + +```bash +for ref in 94aa213 HEAD; do + git stash -q 2>/dev/null; git switch -q --detach $ref + pixi run -e tests-cpu python - <<'PY' +import json, resource, subprocess, sys, time +t = time.perf_counter() +r = subprocess.run([sys.executable, "-m", "pytest", "tests/test_transition_functions.py", "-q", "-p", "no:cacheprovider"], capture_output=True, text=True) +print(json.dumps({"ref": subprocess.check_output(["git", "rev-parse", "--short", "HEAD"], text=True).strip(), + "wall_seconds": round(time.perf_counter() - t, 2), + "ru_maxrss_children_gib": round(resource.getrusage(resource.RUSAGE_CHILDREN).ru_maxrss / 2**20, 3), + "returncode": r.returncode})) +PY +done | tee docs/superpowers/specs/2026-10-16-stable-translog-native-resource-report.json +git switch -q stable-translog +``` + +(`pytest -q` inside the subprocess is the reviewer's measurement convention, not an +interactive run; the hook only guards the interactive command line.) Add a third object +for the full `-m 'not long_running' -n 2` suite from Task 5 with its total wall time. +Budgets from the contract: unit module <= 30 s and <= 4 GiB; new tests < 5 s; full CI +<= 900 s and <= 8 GiB; warm-runtime and RSS regression triggers 10 %. Record "warm" as +"fresh process, zero warmups, single repetition" so the contract's wording is pinned. + +- [ ] **Step 3: Completion record and closure bundle** + +Fill the template section by section (strategy, witness, oracle agreement, mutation +results, eager/JIT/vmap/scan paths, dispositions, exact commands, final diff) and build +the closure round: + +```bash +python3 ~/.claude/skills/pro-comp-method-audit/scripts/prepare_prompt.py \ + --text docs/superpowers/specs/2026-10-16-stable-translog-design.md \ + --text docs/superpowers/plans/2026-10-16-stable-translog.md \ + --code src/skillmodels/common/transition_functions.py --code tests/test_stable_translog.py \ + --code tests/stable_translog_reference.py --code tests/test_stable_translog_dispatch.py \ + --code tests/test_stable_translog_estimation.py --code src/skillmodels/af/validate.py \ + --code src/skillmodels/amn/simulate_and_regress.py \ + --project-root . --workflow-class computational-method --output-detail compact \ + --scope-mode delta --profile default \ + --protocol-extra ~/.claude/skills/pro-comp-method-audit/references/numerical-defect-index.md \ + --profile-contract docs/superpowers/specs/2026-10-16-stable-translog-contract.yaml \ + --mode closure --round 1 \ + --prior ~/sciebo/pro-audits/skillmodels-stable-translog/bundle-round0/result/AUDIT-STATE.json \ + --evidence docs/superpowers/specs/2026-10-16-stable-translog-completion-record.md \ + --evidence docs/superpowers/specs/2026-10-16-stable-translog-native-closure.log \ + --evidence docs/superpowers/specs/2026-10-16-stable-translog-native-resource-report.json \ + --base-ref 94aa213 \ + --target "stable_translog design: translog transition function with soft-clipped nonlinear terms; verify the boundedness argument, the fidelity/uniqueness trade-off of the clip and its defaults (scale 3, power 4), the interaction with the unscented Kalman filter and identification, and the implementation plan, before code is written" \ + --out ~/sciebo/pro-audits/skillmodels-stable-translog +``` + +Verify with `verify_bundle.py`, upload to a fresh Pro chat, save the reply under +`bundle-round1/reply/`, then `ingest_report.py --merge` and `audit_gate.py` as in the +skill. Gate 0 closes the audit; the PR of Task 5 may be opened before that, but say so in +its description. + +--- + +## Follow-ups outside this plan (health-cognition repository) + +- Add a `stable` model variant (`transition_function="stable_translog"` for the four capacity states) and compare transition coefficients with run G's translog. +- A fifty-line script that, for each estimated equation and age group, solves for the fixed points of the own-state map (other states at zero and at ±1) and reports the number of stable fixed points; fail loudly if more than one. +- Re-run section 4.4 simulations with the stable variant; the state clip in the simulation code becomes unnecessary. +- pylcm law-of-motion export uses the stable variant. diff --git a/docs/superpowers/specs/2026-10-16-stable-translog-baseline-tests.log b/docs/superpowers/specs/2026-10-16-stable-translog-baseline-tests.log new file mode 100644 index 00000000..4efa83ba --- /dev/null +++ b/docs/superpowers/specs/2026-10-16-stable-translog-baseline-tests.log @@ -0,0 +1,139 @@ + WARN Encountered 2 warnings while parsing the manifest: + ⚠ the `[system-requirements]` table is deprecated in favor of virtual + │ packages on `platforms` + ╭─[/home/hmg/econ/skillmodels-applications/skillmodels/pyproject.toml:92:23] + 91 │ platforms = [ "linux-64" ] + 92 │ system-requirements = { cuda = "12" } + · ───────┬─────── + · ╰── declare these on the `platforms` entries instead + 93 │ [tool.pixi.feature.cuda.dependencies] + ╰──── + help: e.g. platforms = [{ name = "my-linux-64", platform = "linux-64", cuda + = "12" }] + + ⚠ the `[system-requirements]` table is deprecated in favor of virtual + │ packages on `platforms` + ╭─[/home/hmg/econ/skillmodels-applications/skillmodels/pyproject.toml:104:23] + 103 │ platforms = [ "linux-64" ] + 104 │ system-requirements = { cuda = "13" } + · ───────┬─────── + · ╰── declare these on the `platforms` entries instead + 105 │ [tool.pixi.feature.cuda13.dependencies] + ╰──── + help: e.g. platforms = [{ name = "my-linux-64", platform = "linux-64", cuda + = "13" }] + +============================= test session starts ============================== +platform linux -- Python 3.14.6, pytest-9.1.1, pluggy-1.6.0 -- /home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/bin/python3.14 +rootdir: /home/hmg/econ/skillmodels-applications/skillmodels +configfile: pyproject.toml +plugins: cov-7.1.0, memray-1.8.0, anyio-4.14.0, xdist-3.8.0 +collecting ... collected 25 items + +tests/test_transition_functions.py::test_linear PASSED [ 4%] +tests/test_transition_functions.py::test_translog PASSED [ 8%] +tests/test_transition_functions.py::test_translog_af_has_no_square_terms PASSED [ 12%] +tests/test_transition_functions.py::test_log_ces_af_matches_log_ces PASSED [ 16%] +tests/test_transition_functions.py::test_log_ces PASSED [ 20%] +tests/test_transition_functions.py::test_where_all_but_one_gammas_are_zero PASSED [ 24%] +tests/test_transition_functions.py::test_constant PASSED [ 28%] +tests/test_transition_functions.py::test_robust_translog PASSED [ 32%] +tests/test_transition_functions.py::test_log_ces_general PASSED [ 36%] +tests/test_transition_functions.py::test_log_ces_general_where_all_but_one_gammas_are_zero PASSED [ 40%] +tests/test_transition_functions.py::test_param_names_log_ces_general PASSED [ 44%] +tests/test_transition_functions.py::test_params_linear PASSED [ 48%] +tests/test_transition_functions.py::test_params_translog PASSED [ 52%] +tests/test_transition_functions.py::test_params_robust_translog PASSED [ 56%] +tests/test_transition_functions.py::test_params_linear_and_squares PASSED [ 60%] +tests/test_transition_functions.py::test_params_constant PASSED [ 64%] +tests/test_transition_functions.py::test_params_log_ces PASSED [ 68%] +tests/test_transition_functions.py::test_linear_and_squares PASSED [ 72%] +tests/test_transition_functions.py::test_identity_constraints_linear PASSED [ 76%] +tests/test_transition_functions.py::test_identity_constraints_translog PASSED [ 80%] +tests/test_transition_functions.py::test_identity_constraints_robust_translog PASSED [ 84%] +tests/test_transition_functions.py::test_identity_constraints_linear_and_squares PASSED [ 88%] +tests/test_transition_functions.py::test_identity_constraints_log_ces_is_noop PASSED [ 92%] +tests/test_transition_functions.py::test_identity_constraints_log_ces_general_is_noop PASSED [ 96%] +tests/test_transition_functions.py::test_constraints_log_ces PASSED [100%] + +=============================== warnings summary =============================== +.pixi/envs/tests-cpu/lib/python3.14/site-packages/estimagic/estimation_table.py:12 + /home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/estimagic/estimation_table.py:12: DeprecationWarning: NumPy warning suppression and assertion utilities are deprecated. Use warnings.catch_warnings, warnings.filterwarnings, pytest.warns, or pytest.filterwarnings instead. (Deprecated NumPy 2.4) + suppress_performance_warnings = np.testing.suppress_warnings() + +src/skillmodels/chs/process_debug_data.py:131 + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/process_debug_data.py:131: BeartypeClawDecorWarning: Function skillmodels.chs.process_debug_data._convert_state_array_to_df() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/process_debug_data.py" line 131 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + TypeError: Cannot interpret 'ScalarT' as a data type + + The above exception was the direct cause of the following exception: + + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + beartype.roar.BeartypeDecorHintNonpepNumpyException: Function skillmodels.chs.process_debug_data._convert_state_array_to_df() parameter "arr" NumPy data type ScalarT invalid (i.e., neither data type nor coercible into data type). + + def _convert_state_array_to_df( + +-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html +======================== 25 passed, 2 warnings in 2.47s ======================== diff --git a/docs/superpowers/specs/2026-10-16-stable-translog-completion-record.md b/docs/superpowers/specs/2026-10-16-stable-translog-completion-record.md new file mode 100644 index 00000000..60dc2dfa --- /dev/null +++ b/docs/superpowers/specs/2026-10-16-stable-translog-completion-record.md @@ -0,0 +1,270 @@ +# Claude Code completion record + +Evidence for one fresh compact closure audit of the `stable_translog` change. + +- Workflow class: `computational-method` +- Audit round / repair attempt: `1` / `0` +- Audited baseline commit: `94aa213d64955044c4afd436dd27af5e0f8852b1` +- Final commit: `HEAD` of branch `stable-translog` (feature commits `2ccfebb`, `be82adc`, + `ab9bd82`, `671f596`; one further commit adds this record, the native closure log and + the resource report). PR: https://github.com/OpenSourceEconomics/skillmodels/pull/101 +- Model used for implementation: `Opus 5.5` (subagent, medium effort), coordinated and + reviewed by `Fable 5.1` +- Reviewer patch IDs applied/adapted/rejected: `P1` applied in full to the design, plan and + contract (commit `2ccfebb`); the plan's prose test placeholders were then replaced by the + reviewer's own test files (see next line) +- Oracle/test/mutation/demo IDs retained: `OR1` (`tests/stable_translog_reference.py`), + `RT1` + `MT2` (`tests/test_stable_translog.py`), `RT2` + (`tests/test_stable_translog_dispatch.py`), `MT1` (run from the reply package, see + execution record; not added to the project suite because it is pure mathematics with no + project import) + +## Root-cause class disposition + +| Root cause | Defect class | Strategy | Class closure evidence | Status | +| --- | --- | --- | --- | --- | +| R1 | full-law-stability-scope | `text_change` | P1 wording in design 2.2 and 2.4, plan goal/docstring/docs section/PR body; MT1 stability witnesses pass (false gain, switched Schur family, small-entry matrix eigenvalue 1.21, control-function effective coefficient 3/2) | `closed` | +| R2 | finite-tail-soft-clip-overflow | `local_patch` | `_soft_clip` evaluates normalised powers with one shared `<=` predicate; RT1 finite tails through 1e80 and MT2 overflow-threshold neighbourhood for three (scale, power) pairs pass against OR1 | `closed` | +| R3 | non-discriminating-acceptance-oracles | `local_patch` | RT1 default-budget tests, RT2 dispatch tests, CHS same-law tests; scale-2.5 and translog-alias mutants fail numerically | `closed` | + +R1 invariant: every boundedness statement in the shipped text refers to the complete +recursively updated law, with a fixed Schur-stable matrix and uniformly bounded forcing, gain +written as the sum of the norms of the matrix powers, and switched, control-function and +stochastic cases explicitly excluded from the certificate. Counterexample class covered: the +text no longer makes any of the four overclaims MT1 refutes, and the design documents each of +them as a separately checked condition. The schema warning that F1 "lacks a runnable +witness/boundary test" is settled by MT1 (`audit_tests/test_reference_mutations.py`, run +below) together with `stability_witnesses()` in OR1, which is executed on every run of the +oracle; a text finding has no project test by construction. + +R2 invariant: g is evaluated as `numerator / (unit_s**p + unit_x**p)**(1/p)` with +`m = scale` inside `|x| <= scale` and `m = |x|` outside, numerator `x` inside and +`scale * x/m` outside, both selected by the same predicate; all operands of unselected +branches are finite; non-finite inputs are replaced by 0 before the arithmetic and restored to +`+/-scale` (inf) or NaN afterwards. Counterexample class covered: every finite float64 input +has powered operands of magnitude at most one, so no intermediate can overflow for any +(scale, power); MT2 samples the naive overflow threshold `scale * max**(1/p)` and its +neighbouring floats for (0.5, 4), (3, 4), (9, 8) and checks values, derivatives and +finiteness against OR1; RT1 pins the knee derivative at `nextafter(3, -inf)`, `3`, +`nextafter(3, inf)` and the tails at `+/-50`, `+/-1e76`, `+/-1e80`. + +R3 invariant: tests compare against an independent same-law oracle at informative inputs, +pin the public defaults directly, and test the dispatched callable's output rather than +source strings. Counterexample class covered: RT1 `test_default_profile_fidelity_for_squares_and_interactions` +asserts the 1 % / 10 % budgets at |x| = 1, 2 on the public default (a scale of 2.5 gives +15.8 % at 2 and fails); RT2 asserts 9/sqrt(2) at x = 3 from both `process_model` output and +the AMN resolver (translog gives 9); the CHS tests compare per-observation likelihood +contributions and gradients with a registered custom callable that evaluates the original +formula and share no code with `stable_translog`; a temporary alias of `stable_translog` to +`translog` made all three numerical CHS tests fail (max abs differences 1.11 and 1135.7 +on contributions; endogenous difference exactly 0.0, failing the `> 1e-8` assertion). + +## Finding disposition + +| Finding | Root cause | Final status | Evidence command/result | +| --- | --- | --- | --- | +| F1 | R1 | `verified_fixed` | P1 applied; `git diff 94aa213 HEAD -- docs/superpowers/specs/2026-10-16-stable-translog-design.md` shows sections 2.2 and 2.4; MT1: 3 tests OK | +| F2 | R2 | `verified_fixed` | `tests/test_stable_translog.py`: 26 passed, including `test_finite_tail_witness_and_limits` (1e80 -> 9.0 at rtol 3e-14) and `test_finite_power_overflow_neighborhood[3.0-4]` | +| F3 | R3 | `verified_fixed` | `tests/test_stable_translog_dispatch.py`: 3 passed; `tests/test_stable_translog_estimation.py`: 4 passed; alias mutant fails as recorded above | + +## Exact execution record + +All native runs on host `hmg-home`, Linux, CPU only, Python 3.14.6, JAX 0.10.2, float64 +(`jax_enable_x64` set by skillmodels at import), pixi environment `tests-cpu`, branch +`stable-translog`. Commands were run by the implementing subagent or by the coordinator; +observed output is quoted from the terminal or from the saved log. + +- [x] `pixi run -e tests-cpu python docs/superpowers/specs/stable-translog-audit/reference.py` + (coordinator, 2026-10-16, before implementation) — observed: JSON with + `fidelity {"1": 0.00611..., "2": 0.08618...}`, `fixed_point -0.01306310127854210308...`, + `fixed_point_count 1`, `sup_0_through_200 3`, `correct_transition 9.000...`. +- [x] `pixi run -e tests-cpu python tests/stable_translog_reference.py` (subagent, Task 6 + Step 1) — observed: same certificate, saved in + `docs/superpowers/specs/2026-10-16-stable-translog-native-closure.log` + (`"fixed_point_count": 1`). +- [x] RT1 integrated as `tests/test_stable_translog.py` (together with MT2): + `zsh -ic "cap pixi run -e tests-cpu pytest tests/test_stable_translog.py tests/test_transition_functions.py -v -p no:cacheprovider"` + — observed: `51 passed, 2 warnings in 15.29s` (26 new + 25 baseline). Before the + implementation the same command gave `3 failed, 23 errors` (fixture assertion + `callable(getattr(tf, 'stable_translog', None))`). +- [x] RT2 integrated as `tests/test_stable_translog_dispatch.py`: + `pytest tests/test_transition_functions.py tests/test_stable_translog_dispatch.py tests/test_af_validate_production_leakage.py -v` + — observed: `33 passed`. Before the `process_model` helper (see Project integration) + `test_public_model_uses_clipped_values` failed with dags + `InvalidFunctionArgumentsError: missing required arguments: scale, states`. +- [x] MT1: `pixi run --manifest-path pyproject.toml -e tests-cpu python audit_tests/test_reference_mutations.py` + from the reply package directory (coordinator, 2026-10-16) — observed: `Ran 3 tests in + 0.050s`, `OK` (`test_clip_symmetry_monotonicity_scaling_and_adjacent_boundary`, + `test_default_budget_mutation_is_detected`, `test_stability_families_and_false_gain`). +- [x] MT2 integrated into `tests/test_stable_translog.py` (`test_finite_power_overflow_neighborhood[0.5-4|3.0-4|9.0-8]`) + — observed: passed within the 26. +- [x] CHS same-law tests: `pytest tests/test_stable_translog_estimation.py -v` — observed: + `4 passed in 20.0s`. Endogenous fixture at nonlinear = 0.1: stable `-8.835967036515843`, + translog `-8.803603893696966`, linear `-9.236432508580393`; at nonlinear = 0 stable + equals linear to 1e-10. +- [x] Closure log (all four modules together, Task 6 Step 1) — observed: + `59 passed, 26 warnings in 33.65s`. +- [x] Full suite (Task 5): `zsh -ic "cap /usr/bin/time -v pixi run -e tests-cpu pytest tests -m 'not long_running' -v -p no:cacheprovider -n 2 --durations=20"` + — observed: `871 passed, 282 warnings in 1182.07s`, wall 1185 s, max RSS 6.24 GiB. +- [x] `pixi run prek run --all-files` — observed: all hooks pass (ruff, ty, yaml, docs + checks). `pixi run build-docs` — observed: exit 0, no warning for + `docs/reference_guides/transition_functions.md`. + +## Class-level acceptance evidence + +R2 (the only code-level blocking class): + +- Historical witness reproduced before repair: the planned naive expression + `x / (1 + |x/3|**4)**(1/4)` at x = 1e80 gives 0 in IEEE float64 (static prediction by the + reviewer, OR1 `overflow_witness`); the repaired helper gives `9.0` for params [0, 1, 0] + at rtol 3e-14 (`test_finite_tail_witness_and_limits`). +- Independent oracle after repair: OR1 (90-digit decimal, original formula). Maximum + observed discrepancy within the test tolerances: values rtol 4e-13 / atol 4e-13 on random + states in [-6, 6] for n = 1..4, rtol 3e-14 on tails and defaults, rtol 8e-14 on the + overflow-threshold neighbourhood. +- Boundary cases: 0, -0, `+/-nextafter(3)`, `+/-3`, `+/-50`, `+/-1e76`, `+/-1e80`, + `+/-inf`, NaN, overflow threshold and its neighbours, isolated unit coefficient vectors, + factor permutations. +- Generated mutation/neighbourhood suite: MT2, 3 (scale, power) pairs x 13 magnitudes x 2 + signs, values + gradients + finiteness + monotonicity; all pass. +- Transformations: `jit`, `vmap`, `lax.scan` (200 steps), `grad` (states and params), + `static_argnames=("scale", "power")` for non-default configuration, scaling identity + g(a x; a s) = a g(x; s). +- Level effect after repair: none inside the data region (the helper is algebraically the + original formula); in the tail the nonlinear term saturates at scale**2 instead of + silently vanishing. +- Decision/estimand effect: none beyond the documented model change of the function + itself; CHS likelihood contributions and gradients equal the same-law oracle to 1e-10 / + 1e-8. +- Fail-loud behaviour: `ValueError` for non-positive or non-finite `scale` and for + `power` not an even integer >= 2; beartype rejects a float `power` before the body runs + (tested). + +R3: covered by the dispositions above (default-budget pin, dispatch pin, same-law CHS +comparison, two mutants demonstrated). + +R1: text only; MT1 and OR1 `stability_witnesses()` pass; no project code claims the +refuted bound. + +## Project integration + +- Targeted tests: 59 passed (closure log). +- Relevant project suite: 871 passed, 0 failed (full `not long_running` suite). +- Linters/type checks/docs: `prek run --all-files` clean; `build-docs` exit 0. +- Performance comparison: unit module base 5.27 s / 0.497 GiB versus head 5.24 s / + 0.498 GiB (fresh process, zero warmups, single repetition), inside the 30 s / 4 GiB + profile budget and inside the 10 % regression triggers. Full suite 1182 s versus the + contract's 900 s `ci.max_wall_seconds`, and the two CHS reference tests take about 10 s + each versus the contract note of under 5 s for new tests. **Maintainer decision + (Hans-Martin von Gaudecker, 2026-10-16): both breaches are waived.** Rationale: the full + suite is dominated by three pre-existing tests in `tests/test_chs_estimate.py` at + roughly 250 s, 233 s and 233 s, which the branch does not touch; no base full-suite run + was made. Peak memory 6.24 GiB is inside the 8 GiB budget. A follow-up PR will shard + the CI run (the three long tests each on their own runner plus the rest). + +Scope extension beyond the plan's "no estimator code" constraint, declared here: commit +`be82adc` adds `_hide_keyword_only_config` (15 lines) to +`src/skillmodels/common/process_model.py`. dags exposes keyword-only arguments of a +string-named built-in transition as inputs of the transition graph, so `"stable_translog"` +could not be processed at all. The helper binds keyword-only arguments at their defaults +for string built-ins only; `translog`, `robust_translog`, the constraints and every +custom-callable path are untouched. RT2 and the CHS tests exercise it. + +Other deviations from the plan, all mechanical: `power` hint stays `int` and the invalid- +power test also accepts `BeartypeCallHintParamViolation`; the oracle and the copied +reviewer sources are lint-exempted via `pyproject.toml` per-file ignores and a ty exclude +instead of in-file `noqa`; `.pre-commit-config.yaml` excludes `docs/superpowers/` so the +audit artefacts are committed byte-identical; the plan's same-law reference callable uses +explicit factor arguments because dags cannot feed `**factors`; the endogenous fixture is +rebuilt with `dataclasses.replace` because `with_transition_functions` rejects a +single-factor mapping. + +## Final changeset + +The bundle's `project/.git` carries the exact diff: `git diff 94aa213...HEAD` on branch +`stable-translog`. 21 files changed, 2722 insertions, 8 deletions before this record was +added. Source files: `src/skillmodels/common/transition_functions.py` (+92), +`src/skillmodels/common/process_model.py` (+19 -2), `src/skillmodels/af/validate.py` (+2), +`src/skillmodels/amn/simulate_and_regress.py` (+9 -2), `pyproject.toml` (+7), +`.pre-commit-config.yaml`; tests: `tests/test_stable_translog.py`, +`tests/test_stable_translog_dispatch.py`, `tests/test_stable_translog_estimation.py`, +`tests/stable_translog_reference.py`, `tests/test_transition_functions.py` (+10); docs: +`docs/reference_guides/transition_functions.md`, `docs/superpowers/**`. + +## Remaining blocker + +`none` + +## Round 1 closure addendum (2026-10-16, after the reviewer's round-1 reply) + +Reviewer verdict in round 1: `potentially_serious` / `implementation_required`; F1 +verified fixed; F2 numerical repair verified with the resource comparison B2 (U2) +outstanding; F3 moderate, nonblocking, with the endogenous same-law gradient check and the +sigma-weighted moment reconstruction missing and design §3 item 3 overclaiming. + +### R2 / F2: resource evidence B2 (U2) + +- Strategy: ran the reviewer's RT3 (`benchmark_stable_translog.py`, copied unchanged to + the scratchpad and invoked from the project root) in the supported environment. + Command: `zsh -ic "cap pixi run -e tests-cpu python /rt3/benchmark_stable_translog.py --output docs/superpowers/specs/2026-10-16-stable-translog-native-resource-comparison.json"`. + Exit 0; JSON plus four worker logs next to this document. Environment: hmg-office, + Python 3.14.6, JAX 0.10.2, CPU, x64, git head c2db3e9; `translog` source unchanged. +- Observed (first call incl. compile / warm per call / worker peak RSS): + three_factor_toy translog 0.099 s / 6.8 µs / 0.386 GiB, stable_translog 0.099 s / + 11.3 µs / 0.394 GiB (warm ratio 1.66, RSS ratio 1.02); run_e_one_factor translog + 0.026 s / 6.5 µs / 0.367 GiB, stable_translog 0.061 s / 6.8 µs / 0.381 GiB (warm ratio + 1.05, RSS ratio 1.04). +- Assessment against the declared triggers: the contract's `warm_seconds` metric is the + wall time of `tests/test_transition_functions.py` in a fresh process, and the 10 % + triggers compare base and head on that metric; that comparison (5.27 s vs 5.24 s, + 0.497 vs 0.498 GiB) is inside the triggers and is unchanged. The kernel microbenchmark + is a supplemental measurement on a 9-row vmap where one call costs about 7 µs, so the + 4.5 µs difference is the cost of the extra elementwise operations plus dispatch, not a + workload regression. To show the workload-level effect, the CHS likelihood-and-gradient + of the estimation fixture was timed for both laws in fresh processes + (`2026-10-16-stable-translog-native-loglike-timing.json`, script kept at + `stable-translog-audit/time_loglike.py`): translog 2.75 / 2.63 ms per warm call, + stable_translog 1.85 / 2.51 ms; the within-law spread exceeds the between-law + difference; peak RSS 0.59 vs 0.60 GiB. No regression at the 10 % trigger on the declared + metric or on the workload. The kernel ratio is reported, not waived; if the maintainer + regards the microbenchmark as a trigger metric, a scoped decision is required. + +### R3 / F3: promised acceptance scope completed + +- `tests/test_stable_translog_estimation.py` now contains, in addition to the + missing-observed fixture tests: `REFERENCE_ENDOGENOUS`, a registered original-formula + callable for the endogenous fixture's factors (s, inv, x, z); + `test_endogenous_contributions_and_gradient_match_same_law_reference` (per-observation + contributions at 1e-10 and gradient at rtol 1e-8 against the reference, margin > 1e-8 + from translog; the carry-forward substep of `s` is written explicitly as identity/zero + for every law, since a custom callable has no `identity_constraints_*` hook); and + `test_unscented_predict_moments_equal_sigma_weighted_reference_law`, which pushes the + fixture's own sigma points (`_calculate_sigma_points`) and Julier weights through an + independent NumPy evaluation of the clipped law, forms the weighted mean and covariance + plus the shock variance by hand, and compares with `kalman_predict` for + `stable_translog` at rtol 1e-10 (3 persons × 2 mixtures, random coefficients, seed 1). +- Design §3 item 3 updated to state exactly this coverage and to name the mutant logs. +- Mutant transcripts (exact commands and output in the logs): + `2026-10-16-stable-translog-mutant-translog-alias.log` (g = states inside + `stable_translog`): 23 failed, 12 passed, exit 1; every CHS/predict test and every + dispatch test fails numerically. `2026-10-16-stable-translog-mutant-scale-2.5.log` + (default scale 2.5): 11 failed, 18 passed, exit 1; the at-2 budget test fails + (15.77 % > 10 %) along with the knee/tail and dispatch value tests. Source restored + after each mutant (`git diff src/` empty). + +### Execution record + +- Targeted suite after the changes: + `2026-10-16-stable-translog-native-closure-round1.log`: 61 passed, 32 warnings in + 45.44 s, exit 0 (two new tests: 5.99 s and 2.44 s). +- `prek run` on the changed files: clean (ruff auto-fixed one import order). +- No change to `src/`; `translog` and `stable_translog` sources are those audited in + round 1. + +### Finding dispositions after this addendum + +F1 `verified_fixed` (unchanged). F2 `verified_fixed`: numerical repair verified by the +reviewer; B2 supplied natively with the reviewer's own RT3 plus a workload-level timing. +F3 `verified_fixed`: the promised endogenous gradient and sigma-moment checks exist and +pass; the design text matches the tests. Remaining blocker: none, subject to the +maintainer's view on the kernel microbenchmark ratio noted under R2. diff --git a/docs/superpowers/specs/2026-10-16-stable-translog-contract.yaml b/docs/superpowers/specs/2026-10-16-stable-translog-contract.yaml new file mode 100644 index 00000000..7be2901b --- /dev/null +++ b/docs/superpowers/specs/2026-10-16-stable-translog-contract.yaml @@ -0,0 +1,83 @@ +# Profile contract for the stable_translog design audit (skillmodels). +contract_version: "1" +target: "stable_translog design: translog transition function with soft-clipped nonlinear terms; verify the boundedness argument, the fidelity/uniqueness trade-off of the clip and its defaults (scale 3, power 4), the interaction with the unscented Kalman filter and identification, and the implementation plan, before code is written" +environment: + hardware: "hmg-office, Linux, CPU only" + backend: "jax >=0.9 as required by pyproject.toml; record exact installed version in native evidence; XLA:CPU" + dtype: "float64" + jax_flags: "jax_enable_x64=True (skillmodels sets it at import)" + +metric_definitions: + nonlinear_fidelity_rel_error: "|g(x)^2 - x^2| / x^2 at a given |x|, for the default scale and power; the same quantity for g(x_a) g(x_b) versus x_a x_b at |x_a| = |x_b| = |x|" + iteration_bound: "sup over t of |theta_t| when the one-factor own map theta' = c + rho*theta + gamma*g(theta)^2 is iterated 200 times from a given start, using the run E psychological coefficients c=-0.003, rho=0.769, gamma=-0.103" + fixed_point_count: "number of real solutions of f(theta) = theta of the one-factor own map on [-60, 60], with stability by |f'(theta)| < 1" + moment_or_objective_change: "not used in this round (no estimation is run); reserved for the health-cognition closure round: relative change in percent of each translog transition coefficient when the model is re-estimated with stable_translog" + zero_baseline_absolute: 1.0e-8 + warm_seconds: "median wall time of tests/test_transition_functions.py after the first call" + compile_seconds: "not_applicable in this round" + peak_host_gib: "resource.getrusage(RUSAGE_SELF).ru_maxrss after the test module" + +measurement_protocol: + repetitions: 1 + warmup_calls: 0 + aggregation: median + seed_aggregation: max + workload_aggregation: per_workload + noise_floor_pct: 3 + isolation: "one pytest at a time; cap.slice checked for neighbours" + timer: "pytest durations" + memory_probe: "resource.getrusage(RUSAGE_SELF).ru_maxrss" + device_probe: "not_applicable" + cache_reset: "fresh process per run" + seeds: [0] + comparison: "translog (baseline) versus stable_translog (proposed) on identical inputs" + +profiles: + + default: + intended_use: "the only profile: CHS maximum likelihood estimation with the unscented Kalman filter, and iterated simulation of estimated technologies" + applicability: required + workloads: + - name: unit + command: "pixi run -e tests-cpu pytest tests/test_transition_functions.py -v" + grid: "3-factor toy parameter vector from the existing translog tests; 1-factor run E psychological coefficients" + numerical: + max_nonlinear_fidelity_rel_error_at_1: 0.01 # defaults scale=3, power=4 + max_nonlinear_fidelity_rel_error_at_2: 0.10 + max_iteration_bound_from_minus_3: 5.0 # bounded excursion, run E coefficients + required_fixed_point_count_run_e: 1 # unique attractor for the run E map at the defaults + oracle: structural # independent real-equation evaluation and boundedness/root proof + max_policy_disagreement_mass: not_applicable + max_boundary_shift_grid_cells: not_applicable + max_moment_change_pct: not_applicable + max_parameter_change_pct: not_applicable + candidate_set_error: + assessed_by: structural_bound + source: "docs/superpowers/specs/2026-10-16-stable-translog-design.md" + source_digest: "sha256:see BUNDLE-MANIFEST.json entry for the spec" + structural_bound: + value: 0.0 + assumptions: "the only approximation is the deviation of g(x) from x inside the data region, which is reported as nonlinear_fidelity_rel_error, not hidden" + applies_to: "default profile" + configuration: "n/a" + max_regret: not_applicable + on_unavailable: report_unknown + resource: + max_warm_seconds: 30.0 + max_compile_seconds: not_applicable + max_peak_host_gib: 4.0 + max_peak_device_gib: not_applicable + max_executable_cache_entries: not_applicable + on_budget_exhaustion: "fail the test" + on_unresolved_certification: "not_applicable" + +ci: + max_wall_seconds: 900 + max_peak_host_gib: 8.0 + note: "the new tests must add less than five seconds to tests/test_transition_functions.py" + +repair_review_triggers: + max_warm_runtime_regression_pct: 10 + max_compile_regression_pct: not_applicable + max_peak_memory_regression_pct: 10 + comparison: "main -> stable-translog branch" diff --git a/docs/superpowers/specs/2026-10-16-stable-translog-design.md b/docs/superpowers/specs/2026-10-16-stable-translog-design.md new file mode 100644 index 00000000..1f1de64d --- /dev/null +++ b/docs/superpowers/specs/2026-10-16-stable-translog-design.md @@ -0,0 +1,246 @@ +# `stable_translog`: a translog transition function with saturating curvature + +Status: design for review (no code yet). Target repository: skillmodels, branch to be +created from `94aa213`. First consumer: the health-cognition application (HRS, ages +68-93, four latent capacity states, three latent investments, four observed inputs). + +## 1. Problem + +The translog transition function + + θ_{t+1} = c + Σ_j β_j θ_j + Σ_j γ_j θ_j² + Σ_{a 0, p an even integer + +Properties of g: smooth (C^∞ for even p), odd, |g(x)| < s, g(x) = x + O(|x/s|^p · x) +near zero, g'(x) ∈ (0, 1], g(x) → ±s as x → ±∞ with g'(x) → 0. + +Defaults: s = 3.0, p = 4. Parameter names, parameter count, identity constraints and +start values are those of `translog`; the function is a drop-in replacement selected by +the string `"stable_translog"`. + +### 2.1 Why this and not the alternatives discussed + +- `θ·tanh(θ/s)` in place of `θ²` only: leaves the interaction terms unbounded; a product + of two large states diverges as fast as a square. +- softplus hinge `log(1+exp(k(θ-c)))/k`: needs a kink location, changes the meaning of + every coefficient, does not reduce to the translog anywhere. +- `s·tanh(x/s)` as g: same structure as the proposal, but worse fidelity at equal + saturation level (relative error of g² versus x² at |x| = 2 is 24 % for s = 3, against + 8.6 % for the algebraic clip with s = 3, p = 4). The algebraic clip is the same idea + with a flatter approach to the identity. +- CES technology as in Cunha, Heckman and Schennach: smooth and well behaved but requires + positive inputs; our states are centred latent factors. + +### 2.2 What is guaranteed and what is not + +Boundedness (fixed-coefficient deterministic theorem). Let x contain the recursively +updated latent coordinates and let z_t be bounded exogenous inputs. Assume the COMPLETE +transition can be written as x_{t+1} = A x_t + b_t(x_t), with a fixed square matrix A, +rho(A) < 1, and sup_{t,x} ||b_t(x)||_infinity <= M. The base clipped nonlinear remainder +has componentwise bounds R_i = s^2 (sum_j |gamma_ij| + sum_{a=0} ||A^k|| is finite. The gain is NOT generally ||(I-A)^(-1)||: +the forcing is state/time dependent and cannot be pulled through a signed matrix sum. +If a compatible norm has ||A|| <= q < 1, the familiar bound is +q^t ||x_0|| + M(1-q^t)/(1-q). For time-varying A_t, require a uniform product bound +||A_{t-1}...A_k|| <= C q^(t-k), not merely rho(A_t)<1 separately. Periodic/augmented +models may instead be checked over a complete calendar-period product; carry-forward +identity substeps need not individually have spectral radius below one. + +This is a conditional theorem, not an estimator constraint or a stability certificate +for the application. Diagonals in [0.6,0.85] and cross coefficients below 0.13 do not +prove stability (a 4-by-4 matrix with diagonal 0.85 and off-diagonal 0.12 has eigenvalue +1.21). Check the full estimated matrix/product, not own coefficients or scalar slices. +The supplied bundle does not contain those full application matrices. + +Control-function and endogenous-factor composition must be checked separately. +process_model adds the control-function term AFTER the base production transition. +A linear kappa*(investment - first_stage_prediction) changes the effective A; a +higher-degree correction is not clipped by this function. Unless the COMPLETE law +satisfies the displayed decomposition with bounded remainder, the theorem does not +apply. Do not clip those corrections silently: that changes the econometric model. + +The theorem concerns deterministic drift or bounded forcing. Gaussian innovations +have no uniform infinite-horizon pathwise bound even for x_{t+1}=epsilon_t. Moment +stability, filter stability, finite simulation horizons, and absence of NaNs require +their own assumptions and diagnostics. A finite-horizon test is not an asymptotic proof. +The existing robust_translog also bounds deterministic outputs for fixed finite +coefficients by clipping its entire input at 1e12; its drawback is distortion of linear +dynamics and the potentially enormous resulting bound, not mathematical unboundedness. + +Uniqueness of the attractor (not guaranteed, application-dependent). The clip removes +divergence but can leave a second stable fixed point far out in the tail if s lies +far enough into the tail: a nearly preserved repelling crossing can coexist with a +new attracting tail crossing. Finite s does not make the soft clip exactly equal to +the translog at a nonzero point. With +the run E psychological coefficients: + +| g | fixed points | rel. error of g² at |x| = 1, 2, 2.5 | +|------------------|---------------------------------------------------|-------------------------------------| +| identity (translog) | -2.23 (unstable), -0.013 (stable) | 0, 0, 0 | +| tanh, s = 3 | -0.013 (stable) | 0.070, 0.236, 0.330 | +| alg, s = 3, p = 4 | -0.013 (stable) | 0.006, 0.086, 0.179 | +| alg, s = 2.5, p = 8 | -0.013 (stable) | 0.000, 0.038, 0.159 | +| alg, s = 3, p = 8 | -3.92 (stable), -2.29 (unstable), -0.013 (stable) | 0.000, 0.010, 0.051 | +| alg, s = 4, p = 8 | -7.13 (stable), -2.24 (unstable), -0.013 (stable) | 0.000, 0.001, 0.006 | + +There is a trade-off between fidelity to the translog inside the data region and a +unique attractor: the translog's own unstable fixed point sits at 2.2, inside the data, +and a function that matches the translog EXACTLY on an interval containing its +repelling fixed point inherits that point. Approximate agreement requires a separate +crossing-margin argument; the value of s alone is not a uniqueness test. The default +(s = 3, p = 4) buys the unique attractor at the price of a 9 % deviation of the squared +term at two units from the mean. The library documents this and leaves the choice to the +application; the application checks the fixed points of its estimated equations with a +fifty-line script (planned on the health-cognition side, not in skillmodels). + +Nesting (approximate). For every participating coordinate |theta_j| <= 1, each individual squared +or interaction basis term differs by less than 1% at the defaults (absolute zero +error for a vanishing product). This is not a relative-error bound on a cancelling +sum of nonlinear terms or on the likelihood; estimates on data with filtered states mostly +inside ±2 should land close to the translog estimates, and the comparison is a robustness +check rather than a new model. This is a conjecture to be verified on the health-cognition +data, not a property of the function. + +Finite precision. Boundedness of the real-valued nonlinear basis does not prevent an +intermediate overflow in a naive formula. Evaluate g with bounded normalized powers, +not `(abs(x/s))**p` on unrestricted x. For example, with m=max(s,|x|), the denominator +`((s/m)**p + (x/m)**p)**(1/p)` is between 1 and 2**(1/p); use numerator x when |x|<=s +and s*(x/m) otherwise. In code select m and the numerator with the SAME <= predicate; +a generic maximum subgradient at |x|=s combined with a one-sided numerator selection +would give an incorrect derivative at the clip knee. All branches need safe operands. +In floating point |g| may round to s, so use <=s with a stated rounding allowance. +The helper preserves NaN and may return +/-s for +/-infinity; the full transition +still propagates nonfinite linear inputs. Linear products/sums or coefficients can +still overflow. No unconditional finite-output or NaN-free likelihood guarantee is made. + +### 2.3 Hyperparameters and the string lookup + +skillmodels resolves string transition names by `getattr(transition_functions, name)` +and obtains `params_` and `identity_constraints_` by the same convention. +The string `"stable_translog"` uses the documented defaults. scale is a positive finite +Python scalar and power an even Python integer >=2; both are keyword-only configuration. +Close over nondefault configuration before JIT, or explicitly mark scale and power +static with `jax.jit(..., static_argnames=("scale", "power"))`. A supplied Python int +is not automatically static when passed as an ordinary argument to a jitted function. + +A one-line `(states, params)` wrapper is NOT a complete alternative registration. +A new module-level string name also needs its parameter/identity companions and all +relevant allow-lists. A public registered callable must instead name its consumed +factors, accept the registered parameter mapping, and reconstruct the ordered vector. +A factory/spec-level option remains out of scope. Document a complete tested recipe +before advertising nondefault configuration through an estimator, rather than an +untested one-line wrapper. Direct calls may use the keyword arguments. + +### 2.4 UKF, units, and identification + +Saturation changes the model at ALL nonzero inputs, not just an extrapolation rule. +A UKF evaluates sigma points, whose spread depends on covariance, dimension and its +chosen weights; filtered means inside +/-1 do not imply that the points are there. +The pointwise fidelity figures imply no 1% likelihood or coefficient-change bound. +Check actual weighted predicted means/covariances, finite gradients and the fraction +of sigma points near/beyond the clip scale. Compare the same stable law against an +independent sigma-point evaluation; quadrature error against Gaussian integration is +a separate diagnostic, not evidence that the clipped law was incorrectly dispatched. +Do not tune the sigma rule merely to conceal a changed model. + +Exact identity/carry-forward transitions survive because their nonlinear coefficients +are zero and their own linear coefficient is one. The shipped constraint machinery +also pins kappa to zero on carry-forward substeps. These identities are not by +themselves an identification proof: preserve measurement location/scale anchors. +The fixed clipping scale is in the factors' specified units, not automatically in +standard deviations. g(a*x; a*s,p)=a*g(x;s,p) for a>0; keeping s fixed while rescaling +factors changes the function family. Translations require transforming the clipping +centre as well and are not generally absorbable into translog coefficients. +Saturated square columns approach s^2 and become nearly collinear with the constant, +so tail-only data may weakly identify curvature. The defaults remain an explicit +heuristic supported by the supplied scalar calibration, not a universal choice or a +reason to drop existing normalization constraints. + +## 3. Scope of the skillmodels PR + +In scope: + +1. `stable_translog`, `params_stable_translog`, `identity_constraints_stable_translog` + in `src/skillmodels/common/transition_functions.py`. +2. Registration in the three name allow-lists: `_AF_COMPATIBLE_TRANSITIONS` and + `_LEAKY_BUILTIN_PRODUCTION` in `src/skillmodels/af/validate.py`, `builtin_names` in + `src/skillmodels/amn/simulate_and_regress.py`. +3. Tests. `tests/test_stable_translog.py` (the round-0 reviewer's acceptance suite RT1 and + tail generators MT2 against the independent decimal oracle + `tests/stable_translog_reference.py`): finite tails through 1e80 and ±inf/NaN semantics, + every coefficient position and factor permutation, the default fidelity budgets at + |x| = 1 and 2, all 200 iterates and the fixed point of the run E psychological map, + analytical gradients at zero, both clip knees and finite tails, JIT/vmap/scan with + static non-default configuration, name and identity companions, loud errors for invalid + `scale`/`power`, and the float64 overflow threshold neighbourhood. + `tests/test_stable_translog_dispatch.py` (RT2): the public model and the AMN resolver + return the clipped law, not translog. `tests/test_stable_translog_estimation.py`: CHS + likelihood contributions and gradients equal those of an independent same-law + registered callable on a fixture with missing observed factors and on the endogenous + carry-forward fixture, and differ from translog by a numerical margin; the + unscented predict step's moments for `stable_translog` equal the sigma-weighted mean + and covariance of an independent NumPy evaluation of the clipped law on the fixture's + own sigma points and weights. Mutant transcripts (translog alias; default scale 2.5) + are kept as `2026-10-16-stable-translog-mutant-*.log` next to this document. +4. Documentation section in `docs/reference_guides/transition_functions.md` with the + formula, the boundedness statement, the uniqueness caveat and the default values. + +Out of scope (health-cognition repository): the `stable` model variant, the fixed-point +check of estimated equations, re-running simulations with the new function, and the +pylcm law-of-motion export. + +## 4. Questions for the external reviewer + +1. Is the boundedness argument in 2.2 correct as stated, including with observed factors + and with the control-function and endogenous-factor code paths of skillmodels? +2. Is the algebraic soft clip the right g, or does a different bounded, smooth, odd map + with g'(0) = 1 give a better fidelity/uniqueness trade-off at equal saturation level? +3. Are the defaults s = 3, p = 4 defensible for a general-purpose library whose latent + states have application-specific scale, or should the function refuse to run without + an explicit scale? +4. Does replacing θ_j by g(θ_j) in the squares and interactions interact badly with the + unscented Kalman filter's sigma points (the predict step evaluates the transition at + sigma points that can lie outside the data region by design)? +5. Does anything in the identification argument for the translog (normalisations via the + identity transition in the first period, the anchoring of scales) break when the + nonlinear terms saturate? +6. Is there a reason to prefer bounding the states before the whole function (including + the linear part), which would also bound the output, over bounding only the nonlinear + terms, which keeps the linear dynamics exact? diff --git a/docs/superpowers/specs/2026-10-16-stable-translog-evidence.md b/docs/superpowers/specs/2026-10-16-stable-translog-evidence.md new file mode 100644 index 00000000..a5ace735 --- /dev/null +++ b/docs/superpowers/specs/2026-10-16-stable-translog-evidence.md @@ -0,0 +1,216 @@ +# Evidence for the stable_translog design audit + +All numbers below were produced on 2026-10-16 on hmg-office. Scripts are reproduced in +full so the reviewer can re-derive them; they need only numpy. + +## 1. Baseline tests of the current transition functions + +`pixi run -e tests-cpu pytest tests/test_transition_functions.py -v` at revision 94aa213: +see `2026-10-16-stable-translog-baseline-tests.log` (25 passed). + +## 2. Divergence in the health-cognition application (translog, unrestricted diagnostics) + +Stability diagnostics of two estimation runs *before* the diagnostics tables were +restricted to person-periods with at least one measurement. Columns: SD of the filtered +state and max |state| per factor (P physical, S sensory, M psychological, C cognition), +then explosive persons (|state| > 5) now / cumulative / share / overflow. Linear +transition models in the same runs show max |state| about 3 at every age and zero +explosive persons. + +### Run "sensnutr", 1-mix translog, alive loads on physical and cognition +68 & 0.38 & 0.38 & 0.49 & 0.28 & 1.88 & 1.95 & 2.72 & 1.36 & 0 & 0 & 0.000 & 0 +70 & 0.45 & 0.47 & 0.54 & 0.30 & 2.17 & 2.24 & 3.30 & 1.37 & 0 & 0 & 0.000 & 0 +72 & 0.50 & 0.53 & 0.60 & 0.32 & 2.39 & 2.58 & 3.69 & 1.51 & 0 & 0 & 0.000 & 0 +74 & 0.55 & 0.57 & 0.65 & 0.33 & 2.65 & 2.59 & 4.74 & 2.26 & 0 & 0 & 0.000 & 0 +76 & 0.57 & 0.60 & 0.68 & 0.35 & 2.56 & 2.52 & 5.80 & 3.47 & 9 & 9 & 0.001 & 0 +78 & 0.60 & 0.62 & 0.73 & 0.37 & 2.70 & 2.84 & 7.74 & 6.99 & 24 & 24 & 0.001 & 0 +80 & 0.63 & 0.65 & 0.84 & 0.48 & 10.07 & 9.04 & 16.63 & 28.65 & 55 & 55 & 0.003 & 0 +82 & 2.31 & 1.78 & 3.86 & 2.66 & 281.15 & 209.73 & 466.99 & 331.21 & 120 & 120 & 0.007 & 0 +84 & 75.90 & 4.62 & 812.50 & 228.84 & 9.7e+03 & 581.41 & 1.0e+05 & 2.9e+04 & 209 & 209 & 0.013 & 0 +86 & 1.3e+07 & 7.5e+06 & 6.2e+07 & 8.0e+06 & 1.7e+09 & 9.6e+08 & 8.0e+09 & 1.0e+09 & 332 & 332 & 0.020 & 0 +88 & 6.6e+16 & 1.1e+17 & 2.8e+17 & 8.0e+15 & 8.4e+18 & 1.4e+19 & 3.6e+19 & 1.0e+18 & 474 & 474 & 0.029 & 0 +90 & 1.7e+36 & 2.2e+36 & 6.9e+36 & 5.3e+35 & 2.2e+38 & 2.8e+38 & 8.8e+38 & 6.8e+37 & 623 & 623 & 0.038 & 0 +92 & 8.7e+74 & 1.4e+75 & 3.5e+75 & 8.4e+73 & 1.1e+77 & 1.7e+77 & 4.6e+77 & 1.1e+76 & 815 & 815 & 0.049 & 0 + +### Run "loadtrend", 2-mix translog, alive loads on all four states +68 & 0.38 & 0.37 & 0.61 & 0.28 & 1.93 & 1.91 & 3.30 & 1.35 & 0 & 0 & 0.000 & 0 +70 & 0.45 & 0.44 & 0.65 & 0.30 & 2.09 & 2.15 & 3.39 & 1.38 & 0 & 0 & 0.000 & 0 +72 & 0.50 & 0.49 & 0.69 & 0.32 & 2.16 & 2.13 & 3.47 & 1.45 & 0 & 0 & 0.000 & 0 +74 & 0.54 & 0.52 & 0.72 & 0.33 & 2.28 & 2.28 & 4.65 & 1.65 & 0 & 0 & 0.000 & 0 +76 & 0.57 & 0.55 & 0.74 & 0.34 & 2.27 & 2.23 & 5.42 & 1.94 & 1 & 1 & 0.000 & 0 +78 & 0.59 & 0.58 & 0.79 & 0.35 & 2.32 & 2.30 & 6.17 & 2.44 & 3 & 3 & 0.000 & 0 +80 & 0.62 & 0.60 & 0.83 & 0.36 & 2.39 & 2.77 & 7.53 & 3.25 & 6 & 7 & 0.000 & 0 +82 & 0.61 & 0.61 & 0.85 & 0.35 & 2.26 & 4.33 & 13.77 & 4.21 & 11 & 12 & 0.001 & 0 +84 & 0.62 & 0.62 & 1.01 & 0.35 & 5.87 & 8.96 & 43.95 & 8.64 & 35 & 36 & 0.002 & 0 +86 & 1.03 & 0.91 & 4.35 & 0.66 & 100.71 & 83.76 & 520.40 & 70.10 & 97 & 98 & 0.006 & 0 +88 & 1.98 & 124.49 & 907.09 & 25.96 & 220.61 & 1.6e+04 & 1.2e+05 & 3.3e+03 & 175 & 176 & 0.011 & 0 +90 & 1.4e+07 & 5.2e+06 & 1.9e+07 & 3.2e+06 & 1.8e+09 & 6.6e+08 & 2.4e+09 & 4.1e+08 & 260 & 261 & 0.016 & 0 +92 & 7.5e+15 & 2.6e+15 & 2.2e+16 & 5.2e+15 & 9.6e+17 & 3.4e+17 & 2.8e+18 & 6.6e+17 & 368 & 369 & 0.022 & 0 + +The data session established for run D that every explosive person sits on rows after +death or after the last interview (forward predictions without measurement updates); +no likelihood-relevant row is affected. After restricting the tables to measured rows, +max |state| is below 4.7 at every age in runs D, E, F. + +## 3. Estimated own-state coefficients, run E main translog model (age group 68-73) + +Psychological capacity: constant -0.003, own linear 0.769, own square -0.103. +Cognition: constant -0.074, own linear 0.596, own square -0.112. +Full transition tables with standard errors are in the health-cognition build +`bld-2026-10-spec2/tables/no_feedback_to_investments_1mix_alive_ph_cog/pooled/transition_params/`. + +## 4. Fixed points and iteration (script and output) + +```python +import numpy as np, warnings +warnings.simplefilter("ignore") +np.seterr(all="ignore") +# run E main translog, 68-73, own terms only (others at zero) +cases = {"psychological": (-0.003, 0.769, -0.103), "cognition": (-0.074, 0.596, -0.112)} +for name, (c, rho, b) in cases.items(): + roots = np.roots([b, rho - 1, c]) + print(name, "fixed points", np.sort(roots), "slopes", rho + 2 * b * np.sort(roots)) + for th0 in (-2.0, -2.5, -3.0, 3.0, 5.0): + th = np.float64(th0) + path = [th] + for _ in range(20): + th = np.float64(c + rho * th + b * th**2) + path.append(th) + print(f" translog start {th0:5.1f}: after 20 = {path[-1]:.3g}") + s = 3.0 + for th0 in (-2.5, -3.0, 5.0, 50.0): + th = np.float64(th0) + for _ in range(200): + g = s * np.tanh(th / s) + th = c + rho * th + b * g**2 + print(f" stable start {th0:5.1f}: after 200 = {th:.4f}") + # max deviation stable vs translog on |theta|<=2 + x = np.linspace(-2, 2, 401); g = s*np.tanh(x/s) + print(" max |g^2 - x^2| on [-2,2]:", np.max(np.abs(g**2 - x**2)), " at |x|=1:", abs((s*np.tanh(1/s))**2-1)) +``` + +Output: + +``` +psychological fixed points [-2.22965535 -0.0130631 ] slopes [1.228309 0.771691] + translog start -2.0: after 20 = -0.192 + translog start -2.5: after 20 = -1.1e+113 + translog start -3.0: after 20 = -inf + translog start 3.0: after 20 = -0.00772 + translog start 5.0: after 20 = -0.00793 + stable start -2.5: after 200 = -0.0131 + stable start -3.0: after 200 = -0.0131 + stable start 5.0: after 200 = -0.0131 + stable start 50.0: after 200 = -0.0131 + max |g^2 - x^2| on [-2,2]: 0.9432763475045336 at |x|=1: 0.06966603644422964 +cognition fixed points [-3.4135887 -0.19355416] slopes [1.36064387 0.63935613] + translog start -2.0: after 20 = -0.194 + translog start -2.5: after 20 = -0.196 + translog start -3.0: after 20 = -0.201 + translog start 3.0: after 20 = -0.193 + translog start 5.0: after 20 = -0.194 + stable start -2.5: after 200 = -0.1935 + stable start -3.0: after 200 = -0.1935 + stable start 5.0: after 200 = -0.1935 + stable start 50.0: after 200 = -0.1935 + max |g^2 - x^2| on [-2,2]: 0.9432763475045336 at |x|=1: 0.06966603644422964 +``` + +## 5. Candidate clipping maps: fidelity, excursion, fixed points (scripts and output) + +```python +import numpy as np +np.seterr(all="ignore") +def tanh_g(x, s): return s*np.tanh(x/s) +def alg_g(x, s, p): return x/(1+np.abs(x/s)**p)**(1/p) +c, rho, b = -0.003, 0.769, -0.103 # psychological 68-73, run E +print("name s p | rel.err g^2 at |x|=1,2,2.5 | sup|g| | max excursion from start -3,-5,-50 (200 it) | periods to |theta|<0.1 from -3") +for name, fn, s, p in [("tanh",tanh_g,3,None),("tanh",tanh_g,5,None),("tanh",tanh_g,10,None), + ("alg",alg_g,3,4),("alg",alg_g,4,4),("alg",alg_g,4,8),("alg",alg_g,5,8)]: + g = (lambda x: fn(x,s)) if p is None else (lambda x: fn(x,s,p)) + errs = [abs(g(x)**2-x**2)/x**2 for x in (1,2,2.5)] + exc=[]; + for th0 in (-3,-5,-50): + th=np.float64(th0); m=0; n=None + for t in range(200): + th = c+rho*th+b*g(th)**2; m=max(m,abs(th)) + if n is None and abs(th)<0.1: n=t+1 + exc.append((m,n)) + print(f"{name:6} {s:4} {str(p):>4} | {errs[0]:.3f} {errs[1]:.3f} {errs[2]:.3f} | {s:4} | " + " ".join(f"{m:7.2f}" for m,_ in exc) + f" | {exc[0][1]}") +``` + +Output: + +``` +name s p | rel.err g^2 at |x|=1,2,2.5 | sup|g| | max excursion from start -3,-5,-50 (200 it) | periods to |theta|<0.1 from -3 +tanh 3 None | 0.070 0.236 0.330 | 3 | 2.85 4.65 39.38 | 26 +tanh 5 None | 0.026 0.098 0.146 | 5 | 10.51 10.51 41.03 | None +tanh 10 None | 0.007 0.026 0.040 | 10 | 44.58 44.58 48.75 | None +alg 3 4 | 0.006 0.086 0.179 | 3 | 2.97 4.72 39.38 | 44 +alg 4 4 | 0.002 0.030 0.069 | 4 | 6.74 6.74 40.10 | None +alg 4 8 | 0.000 0.001 0.006 | 4 | 7.13 7.13 40.10 | None +alg 5 8 | 0.000 0.000 0.001 | 5 | 11.16 11.16 41.03 | None +``` + +`None` in the last column means the iteration never returned to within 0.1 of the +translog fixed point from a start at -3: it converged to a second, spurious attractor. + +```python +import numpy as np +np.seterr(all="ignore") +c, rho, b = -0.003, 0.769, -0.103 +def fps(f, lo=-60, hi=60, n=600001): + x=np.linspace(lo,hi,n); d=f(x)-x; idx=np.where(np.sign(d[:-1])!=np.sign(d[1:]))[0] + out=[] + for i in idx: + r=x[i]; h=1e-5; slope=(f(r+h)-f(r-h))/(2*h); out.append((round(float(r),3), "stable" if abs(slope)<1 else "unstable")) + return out +G={ + "translog": lambda x: x, + "tanh s=3": lambda x: 3*np.tanh(x/3), + "alg s=3 p=4": lambda x: x/(1+np.abs(x/3)**4)**0.25, + "alg s=4 p=8": lambda x: x/(1+np.abs(x/4)**8)**0.125, + "alg s=2.5 p=8": lambda x: x/(1+np.abs(x/2.5)**8)**0.125, +} +for k,g in G.items(): + print(f"{k:14}", fps(lambda x: c+rho*x+b*g(x)**2)) +# decaying nonlinearity x^2 exp(-(x/s)^2) +for s in (3,4): + h=lambda x: x**2*np.exp(-(x/s)**2) + print(f"decay s={s} ", fps(lambda x: c+rho*x+b*h(x)), " rel.err at 2:", abs(h(2.0)-4)/4) +``` + +Output: + +``` +translog [(-2.23, 'unstable'), (-0.013, 'stable')] +tanh s=3 [(-0.013, 'stable')] +alg s=3 p=4 [(-0.013, 'stable')] +alg s=4 p=8 [(-7.13, 'stable'), (-2.235, 'unstable'), (-0.013, 'stable')] +alg s=2.5 p=8 [(-0.013, 'stable')] +decay s=3 [(-0.013, 'stable')] rel.err at 2: 0.3588196115700454 +decay s=4 [(-0.013, 'stable')] rel.err at 2: 0.22119921692859512 +``` + +```python +import numpy as np +np.seterr(all="ignore") +c, rho, b = -0.003, 0.769, -0.103 +def fps(f, lo=-60, hi=60, n=600001): + x=np.linspace(lo,hi,n); d=f(x)-x; idx=np.where(np.sign(d[:-1])!=np.sign(d[1:]))[0] + return [(round(float(x[i]),3), "stable" if abs((f(x[i]+1e-5)-f(x[i]-1e-5))/2e-5)<1 else "unstable") for i in idx] +for s,p in [(3,8),(3,6),(3.5,8),(2.5,8),(3,4)]: + g=lambda x: x/(1+np.abs(x/s)**p)**(1/p) + errs=[abs(g(x)**2-x**2)/x**2 for x in (1,2,2.5,3)] + print(f"alg s={s} p={p}: fixed points {fps(lambda x: c+rho*x+b*g(x)**2)} rel.err g^2 at 1,2,2.5,3 = {[round(e,3) for e in errs]}") +``` + +Output: + +``` +alg s=3 p=8: fixed points [(-3.915, 'stable'), (-2.292, 'unstable'), (-0.013, 'stable')] rel.err g^2 at 1,2,2.5,3 = [np.float64(0.0), np.float64(0.01), np.float64(0.051), np.float64(0.159)] +alg s=3 p=6: fixed points [(-3.709, 'stable'), (-2.419, 'unstable'), (-0.013, 'stable')] rel.err g^2 at 1,2,2.5,3 = [np.float64(0.0), np.float64(0.028), np.float64(0.092), np.float64(0.206)] +alg s=3.5 p=8: fixed points [(-5.436, 'stable'), (-2.246, 'unstable'), (-0.013, 'stable')] rel.err g^2 at 1,2,2.5,3 = [np.float64(0.0), np.float64(0.003), np.float64(0.016), np.float64(0.062)] +alg s=2.5 p=8: fixed points [(-0.013, 'stable')] rel.err g^2 at 1,2,2.5,3 = [np.float64(0.0), np.float64(0.038), np.float64(0.159), np.float64(0.341)] +alg s=3 p=4: fixed points [(-0.013, 'stable')] rel.err g^2 at 1,2,2.5,3 = [np.float64(0.006), np.float64(0.086), np.float64(0.179), np.float64(0.293)] +``` diff --git a/docs/superpowers/specs/2026-10-16-stable-translog-mutant-scale-2.5.log b/docs/superpowers/specs/2026-10-16-stable-translog-mutant-scale-2.5.log new file mode 100644 index 00000000..b21a7f43 --- /dev/null +++ b/docs/superpowers/specs/2026-10-16-stable-translog-mutant-scale-2.5.log @@ -0,0 +1,439 @@ +MUTANT: default scale 2.5 instead of 3.0; expected: default-budget test at |x|=2 fails (15.77% > 10%) +COMMAND: pixi run -e tests-cpu pytest tests/test_stable_translog.py tests/test_stable_translog_dispatch.py -v -p no:cacheprovider + WARN Encountered 2 warnings while parsing the manifest: + ⚠ the `[system-requirements]` table is deprecated in favor of virtual + │ packages on `platforms` + ╭─[/home/hmg/econ/skillmodels-applications/skillmodels/pyproject.toml:92:23] + 91 │ platforms = [ "linux-64" ] + 92 │ system-requirements = { cuda = "12" } + · ───────┬─────── + · ╰── declare these on the `platforms` entries instead + 93 │ [tool.pixi.feature.cuda.dependencies] + ╰──── + help: e.g. platforms = [{ name = "my-linux-64", platform = "linux-64", cuda + = "12" }] + ⚠ the `[system-requirements]` table is deprecated in favor of virtual + │ packages on `platforms` + ╭─[/home/hmg/econ/skillmodels-applications/skillmodels/pyproject.toml:104:23] + 103 │ platforms = [ "linux-64" ] + 104 │ system-requirements = { cuda = "13" } + · ───────┬─────── + · ╰── declare these on the `platforms` entries instead + 105 │ [tool.pixi.feature.cuda13.dependencies] + ╰──── + help: e.g. platforms = [{ name = "my-linux-64", platform = "linux-64", cuda + = "13" }] +============================= test session starts ============================== +platform linux -- Python 3.14.6, pytest-9.1.1, pluggy-1.6.0 -- /home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/bin/python3.14 +rootdir: /home/hmg/econ/skillmodels-applications/skillmodels +configfile: pyproject.toml +plugins: cov-7.1.0, memray-1.8.0, anyio-4.14.0, xdist-3.8.0 +collecting ... collected 29 items +tests/test_stable_translog.py::test_finite_tail_witness_and_limits FAILED [ 3%] +tests/test_stable_translog.py::test_shape_order_permutations_and_parameter_basis[1] FAILED [ 6%] +tests/test_stable_translog.py::test_shape_order_permutations_and_parameter_basis[2] FAILED [ 10%] +tests/test_stable_translog.py::test_shape_order_permutations_and_parameter_basis[3] FAILED [ 13%] +tests/test_stable_translog.py::test_shape_order_permutations_and_parameter_basis[4] FAILED [ 17%] +tests/test_stable_translog.py::test_default_profile_fidelity_for_squares_and_interactions[1.0-0.01] FAILED [ 20%] +tests/test_stable_translog.py::test_default_profile_fidelity_for_squares_and_interactions[2.0-0.1] FAILED [ 24%] +tests/test_stable_translog.py::test_all_200_iterates_and_fixed_point PASSED [ 27%] +tests/test_stable_translog.py::test_derivatives_at_zero_clip_knee_and_tails FAILED [ 31%] +tests/test_stable_translog.py::test_static_configuration_and_scaling[0.5-2] PASSED [ 34%] +tests/test_stable_translog.py::test_static_configuration_and_scaling[3.0-4] PASSED [ 37%] +tests/test_stable_translog.py::test_static_configuration_and_scaling[9.0-8] PASSED [ 41%] +tests/test_stable_translog.py::test_identity_and_name_companions PASSED [ 44%] +tests/test_stable_translog.py::test_invalid_scale_fails_loud[0.0] PASSED [ 48%] +tests/test_stable_translog.py::test_invalid_scale_fails_loud[-3.0] PASSED [ 51%] +tests/test_stable_translog.py::test_invalid_scale_fails_loud[inf] PASSED [ 55%] +tests/test_stable_translog.py::test_invalid_scale_fails_loud[nan] PASSED [ 58%] +tests/test_stable_translog.py::test_invalid_power_fails_loud[0] PASSED [ 62%] +tests/test_stable_translog.py::test_invalid_power_fails_loud[1] PASSED [ 65%] +tests/test_stable_translog.py::test_invalid_power_fails_loud[3] PASSED [ 68%] +tests/test_stable_translog.py::test_invalid_power_fails_loud[4.0] PASSED [ 72%] +tests/test_stable_translog.py::test_invalid_power_fails_loud[True] PASSED [ 75%] +tests/test_stable_translog.py::test_finite_power_overflow_neighborhood[0.5-4] PASSED [ 79%] +tests/test_stable_translog.py::test_finite_power_overflow_neighborhood[3.0-4] PASSED [ 82%] +tests/test_stable_translog.py::test_finite_power_overflow_neighborhood[9.0-8] PASSED [ 86%] +tests/test_stable_translog.py::test_observed_input_beyond_scale_is_clipped_in_interaction FAILED [ 89%] +tests/test_stable_translog_dispatch.py::test_public_model_uses_clipped_values FAILED [ 93%] +tests/test_stable_translog_dispatch.py::test_amn_resolver_returns_the_right_law FAILED [ 96%] +tests/test_stable_translog_dispatch.py::test_af_public_validation_accepts_name PASSED [100%] +=================================== FAILURES =================================== +_____________________ test_finite_tail_witness_and_limits ______________________ +api = (, >, .vmap_f at 0x759458007740>>) + def test_finite_tail_witness_and_limits(api): + f, compiled, batch = api + x = jnp.array([[-1e80], [-1e76], [-50.0], [0.0], [50.0], [1e76], [1e80]]) + p = jnp.array([0.0, 1.0, 0.0]) + expected = np.array([float(transition(row, p)) for row in np.asarray(x)]) # ty: ignore[invalid-argument-type] +> assert_allclose(batch(x, p), expected, rtol=3e-14, atol=2e-14) +E AssertionError: +E Not equal to tolerance rtol=3e-14, atol=2e-14 +E +E Mismatched elements: 6 / 7 (85.7%) +E First 5 mismatches are at indices: +E [0]: 6.25 (ACTUAL), 9.0 (DESIRED) +E [1]: 6.25 (ACTUAL), 9.0 (DESIRED) +E [2]: 6.249980468841554 (ACTUAL), 8.999941680566865 (DESIRED) +E [4]: 6.249980468841554 (ACTUAL), 8.999941680566865 (DESIRED) +E [5]: 6.25 (ACTUAL), 9.0 (DESIRED) +E Max absolute difference among violations: 2.75 +E Max relative difference among violations: 0.30555556 +E ACTUAL: array([6.25 , 6.25 , 6.24998, 0. , 6.24998, 6.25 , 6.25 ]) +E DESIRED: array([9. , 9. , 8.999942, 0. , 8.999942, 9. , +E 9. ]) +tests/test_stable_translog.py:35: AssertionError +_____________ test_shape_order_permutations_and_parameter_basis[1] _____________ +api = (, >, .vmap_f at 0x759458007740>>) +n = 1 + @pytest.mark.parametrize("n", [1, 2, 3, 4]) + def test_shape_order_permutations_and_parameter_basis(api, n): + f, compiled, batch = api + rng = np.random.default_rng(0) + states = rng.uniform(-6, 6, size=(8, n)) + k = 2 * n + n * (n - 1) // 2 + 1 + params = rng.normal(size=k) + expected = np.array([float(transition(row, params)) for row in states]) +> assert_allclose( + batch(jnp.asarray(states), jnp.asarray(params)), + expected, + rtol=4e-13, + atol=4e-13, + ) +E AssertionError: +E Not equal to tolerance rtol=4e-13, atol=4e-13 +E +E Mismatched elements: 8 / 8 (100%) +E First 5 mismatches are at indices: +E [0]: -4.917569411265951 (ACTUAL), -5.053798892672461 (DESIRED) +E [1]: -4.7980019669850655 (ACTUAL), -6.044858529871753 (DESIRED) +E [2]: -4.493127753784644 (ACTUAL), -7.665459103512282 (DESIRED) +E [3]: -4.31640428981995 (ACTUAL), -7.542716409306062 (DESIRED) +E [4]: -10.501863493905725 (ACTUAL), -12.874926344960715 (DESIRED) +E Max absolute difference among violations: 3.22631212 +E Max relative difference among violations: 0.42773875 +E ACTUAL: array([ -4.917569, -4.798002, -4.493128, -4.316404, -10.501863, +E -11.773006, -3.528211, -8.664814]) +E DESIRED: array([ -5.053799, -6.044859, -7.665459, -7.542716, -12.874926, +E -14.80094 , -3.562395, -9.900285]) +tests/test_stable_translog.py:56: AssertionError +_____________ test_shape_order_permutations_and_parameter_basis[2] _____________ +api = (, >, .vmap_f at 0x759458007740>>) +n = 2 + @pytest.mark.parametrize("n", [1, 2, 3, 4]) + def test_shape_order_permutations_and_parameter_basis(api, n): + f, compiled, batch = api + rng = np.random.default_rng(0) + states = rng.uniform(-6, 6, size=(8, n)) + k = 2 * n + n * (n - 1) // 2 + 1 + params = rng.normal(size=k) + expected = np.array([float(transition(row, params)) for row in states]) +> assert_allclose( + batch(jnp.asarray(states), jnp.asarray(params)), + expected, + rtol=4e-13, + atol=4e-13, + ) +E AssertionError: +E Not equal to tolerance rtol=4e-13, atol=4e-13 +E +E Mismatched elements: 8 / 8 (100%) +E First 5 mismatches are at indices: +E [0]: 7.852459062880633 (ACTUAL), 8.977725234597402 (DESIRED) +E [1]: 14.337147216733168 (ACTUAL), 17.702102507310308 (DESIRED) +E [2]: 5.664423407826265 (ACTUAL), 8.65777145123314 (DESIRED) +E [3]: 5.124010880598812 (ACTUAL), 6.115359600700208 (DESIRED) +E [4]: 5.727777715928939 (ACTUAL), 8.255790610299176 (DESIRED) +E Max absolute difference among violations: 3.82058717 +E Max relative difference among violations: 0.34574117 +E ACTUAL: array([ 7.852459, 14.337147, 5.664423, 5.124011, 5.727778, 10.73115 , +E 10.402337, 9.786083]) +E DESIRED: array([ 8.977725, 17.702103, 8.657771, 6.11536 , 8.255791, 14.475556, +E 14.222924, 12.414664]) +tests/test_stable_translog.py:56: AssertionError +_____________ test_shape_order_permutations_and_parameter_basis[3] _____________ +api = (, >, .vmap_f at 0x759458007740>>) +n = 3 + @pytest.mark.parametrize("n", [1, 2, 3, 4]) + def test_shape_order_permutations_and_parameter_basis(api, n): + f, compiled, batch = api + rng = np.random.default_rng(0) + states = rng.uniform(-6, 6, size=(8, n)) + k = 2 * n + n * (n - 1) // 2 + 1 + params = rng.normal(size=k) + expected = np.array([float(transition(row, params)) for row in states]) +> assert_allclose( + batch(jnp.asarray(states), jnp.asarray(params)), + expected, + rtol=4e-13, + atol=4e-13, + ) +E AssertionError: +E Not equal to tolerance rtol=4e-13, atol=4e-13 +E +E Mismatched elements: 8 / 8 (100%) +E First 5 mismatches are at indices: +E [0]: 6.155187575221884 (ACTUAL), 6.490264289495424 (DESIRED) +E [1]: -8.653831021163983 (ACTUAL), -8.938177321824725 (DESIRED) +E [2]: -5.152191805460342 (ACTUAL), -5.938292290669064 (DESIRED) +E [3]: -0.5710967435813042 (ACTUAL), -4.442182991746442 (DESIRED) +E [4]: 0.4717654115627852 (ACTUAL), -0.15402138268425988 (DESIRED) +E Max absolute difference among violations: 3.87108625 +E Max relative difference among violations: 4.06298647 +E ACTUAL: array([ 6.155188, -8.653831, -5.152192, -0.571097, 0.471765, -4.953996, +E -3.810565, -6.17638 ]) +E DESIRED: array([ 6.490264, -8.938177, -5.938292, -4.442183, -0.154021, -5.663169, +E -4.326617, -7.185585]) +tests/test_stable_translog.py:56: AssertionError +_____________ test_shape_order_permutations_and_parameter_basis[4] _____________ +api = (, >, .vmap_f at 0x759458007740>>) +n = 4 + @pytest.mark.parametrize("n", [1, 2, 3, 4]) + def test_shape_order_permutations_and_parameter_basis(api, n): + f, compiled, batch = api + rng = np.random.default_rng(0) + states = rng.uniform(-6, 6, size=(8, n)) + k = 2 * n + n * (n - 1) // 2 + 1 + params = rng.normal(size=k) + expected = np.array([float(transition(row, params)) for row in states]) +> assert_allclose( + batch(jnp.asarray(states), jnp.asarray(params)), + expected, + rtol=4e-13, + atol=4e-13, + ) +E AssertionError: +E Not equal to tolerance rtol=4e-13, atol=4e-13 +E +E Mismatched elements: 8 / 8 (100%) +E First 5 mismatches are at indices: +E [0]: 5.161189028593867 (ACTUAL), 9.81033140404612 (DESIRED) +E [1]: 15.910147709861935 (ACTUAL), 16.572597489035367 (DESIRED) +E [2]: 18.994051017518704 (ACTUAL), 25.381156885173958 (DESIRED) +E [3]: 11.49034636621635 (ACTUAL), 15.641290174084519 (DESIRED) +E [4]: -12.79728470390402 (ACTUAL), -16.549246417963857 (DESIRED) +E Max absolute difference among violations: 8.49729638 +E Max relative difference among violations: 0.47390268 +E ACTUAL: array([ 5.161189, 15.910148, 18.994051, 11.490346, -12.797285, +E -22.708369, 22.831991, 5.953681]) +E DESIRED: array([ 9.810331, 16.572597, 25.381157, 15.64129 , -16.549246, +E -31.205665, 29.098097, 6.447245]) +tests/test_stable_translog.py:56: AssertionError +_____ test_default_profile_fidelity_for_squares_and_interactions[1.0-0.01] _____ +api = (, >, .vmap_f at 0x759458007740>>) +x = 1.0, budget = 0.01 + @pytest.mark.parametrize(("x", "budget"), [(1.0, 0.01), (2.0, 0.10)]) + def test_default_profile_fidelity_for_squares_and_interactions(api, x, budget): + f = api[0] + square = float(f(jnp.array([x]), jnp.array([0.0, 1.0, 0.0]))) + cross = float(f(jnp.array([x, -x]), jnp.array([0.0, 0.0, 0.0, 0.0, 1.0, 0.0]))) +> assert abs(square - x * x) / (x * x) <= budget +E assert (0.01255936808329483 / (1.0 * 1.0)) <= 0.01 +E + where 0.01255936808329483 = abs((0.9874406319167052 - (1.0 * 1.0))) +tests/test_stable_translog.py:97: AssertionError +_____ test_default_profile_fidelity_for_squares_and_interactions[2.0-0.1] ______ +api = (, >, .vmap_f at 0x759458007740>>) +x = 2.0, budget = 0.1 + @pytest.mark.parametrize(("x", "budget"), [(1.0, 0.01), (2.0, 0.10)]) + def test_default_profile_fidelity_for_squares_and_interactions(api, x, budget): + f = api[0] + square = float(f(jnp.array([x]), jnp.array([0.0, 1.0, 0.0]))) + cross = float(f(jnp.array([x, -x]), jnp.array([0.0, 0.0, 0.0, 0.0, 1.0, 0.0]))) +> assert abs(square - x * x) / (x * x) <= budget +E assert (0.6309143973539539 / (2.0 * 2.0)) <= 0.1 +E + where 0.6309143973539539 = abs((3.369085602646046 - (2.0 * 2.0))) +tests/test_stable_translog.py:97: AssertionError +_________________ test_derivatives_at_zero_clip_knee_and_tails _________________ +api = (, >, .vmap_f at 0x759458007740>>) + def test_derivatives_at_zero_clip_knee_and_tails(api): + f = api[0] + knee = 3.0 + x = np.array( + [ + -50.0, + -knee, + -2.0, + -1.0, + -0.0, + 0.0, + 1.0, + 2.0, + np.nextafter(knee, -np.inf), + knee, + np.nextafter(knee, np.inf), + 50.0, + ] + ) + params = jnp.array([0.4, 0.2, 0.1]) + def objective(z): + return f(jnp.array([z]), params) + result = jax.jit(jax.vmap(jax.grad(objective)))(jnp.asarray(x)) + expected = np.array([0.4 + 0.4 * float(clip(v) * clip_derivative(v)) for v in x]) + assert bool(jnp.all(jnp.isfinite(result))) +> assert_allclose(result, expected, rtol=2e-12, atol=2e-13) +E AssertionError: +E Not equal to tolerance rtol=2e-12, atol=2e-13 +E +E Mismatched elements: 10 / 12 (83.3%) +E First 5 mismatches are at indices: +E [0]: 0.3999996875029297 (ACTUAL), 0.3999990668981396 (DESIRED) +E [1]: 0.17730512383055275 (ACTUAL), -0.024264068711928488 (DESIRED) +E [2]: -0.07802009118133446 (ACTUAL), -0.2104637974287903 (DESIRED) +E [3]: 0.014882748862439454 (ACTUAL), 0.0072947194704237606 (DESIRED) +E [6]: 0.7851172511375606 (ACTUAL), 0.7927052805295762 (DESIRED) +E Max absolute difference among violations: 0.20156919 +E Max relative difference among violations: 8.30731214 +E ACTUAL: array([ 0.4 , 0.177305, -0.07802 , 0.014883, 0.4 , 0.4 , +E 0.785117, 0.87802 , 0.622695, 0.622695, 0.622695, 0.4 ]) +E DESIRED: array([ 0.399999, -0.024264, -0.210464, 0.007295, 0.4 , 0.4 , +E 0.792705, 1.010464, 0.824264, 0.824264, 0.824264, 0.400001]) +tests/test_stable_translog.py:150: AssertionError +__________ test_observed_input_beyond_scale_is_clipped_in_interaction __________ +api = (, >, .vmap_f at 0x759458007740>>) + def test_observed_input_beyond_scale_is_clipped_in_interaction(api) -> None: + f = api[0] + # latent at 1.0, observed input at 50: only the interaction coefficient is on + params = jnp.array([0.0, 0.0, 0.0, 0.0, 1.0, 0.0]) + value = float(f(jnp.array([1.0, 50.0]), params)) +> assert_allclose(value, float(clip(1.0) * clip(50.0)), rtol=3e-14) +E AssertionError: +E Not equal to tolerance rtol=3e-14, atol=0 +E +E Mismatched elements: 1 / 1 (100%) +E Max absolute difference among violations: 0.50655454 +E Max relative difference among violations: 0.16937081 +E ACTUAL: array(2.484247) +E DESIRED: array(2.990802) +tests/test_stable_translog.py:252: AssertionError +____________________ test_public_model_uses_clipped_values _____________________ +model_and_processed = (ModelSpec(_factors=mappingproxy({'skill': FactorSpec(measurements=(('m0', 'm1', 'm2'), ('m0', 'm1', 'm2')), normaliza..., 1: 1})), factor_info=mappingproxy({'skill': FactorInfo(factor_type=)}), control_function=None))) + def test_public_model_uses_clipped_values(model_and_processed): + _, processed = model_and_processed + info = processed.transition_info + assert info is not None + states = jnp.array([[2.0], [3.0]]) + params = {"skill": jnp.array([0.0, 1.0, 0.0])} + expected = jnp.array([[36.0 / jnp.sqrt(97.0)], [9.0 / jnp.sqrt(2.0)]]) + # process_model wraps the full transition with in_axes=(None,0). +> assert_allclose(info.func(params, states), expected, rtol=3e-13, atol=3e-13) +E AssertionError: +E Not equal to tolerance rtol=3e-13, atol=3e-13 +E +E Mismatched elements: 2 / 2 (100%) +E Mismatch at indices: +E [0, 0]: 3.369085602646046 (ACTUAL), 3.655246194481029 (DESIRED) +E [1, 0]: 5.133562285458099 (ACTUAL), 6.363961030678928 (DESIRED) +E Max absolute difference among violations: 1.23039875 +E Max relative difference among violations: 0.19333851 +E ACTUAL: array([[3.369086], +E [5.133562]]) +E DESIRED: array([[3.655246], +E [6.363961]]) +tests/test_stable_translog_dispatch.py:48: AssertionError +___________________ test_amn_resolver_returns_the_right_law ____________________ +model_and_processed = (ModelSpec(_factors=mappingproxy({'skill': FactorSpec(measurements=(('m0', 'm1', 'm2'), ('m0', 'm1', 'm2')), normaliza..., 1: 1})), factor_info=mappingproxy({'skill': FactorInfo(factor_type=)}), control_function=None))) + def test_amn_resolver_returns_the_right_law(model_and_processed): + model, processed = model_and_processed + func, names = _resolve_transition_callable( + "stable_translog", "skill", processed, model + ) + assert func is tf.stable_translog + assert names == ("skill", "skill ** 2", "constant") + value = func(jnp.array([3.0]), jnp.array([0.0, 1.0, 0.0])) +> assert_allclose(value, 9.0 / jnp.sqrt(2.0), rtol=3e-14) +E AssertionError: +E Not equal to tolerance rtol=3e-14, atol=0 +E +E Mismatched elements: 1 / 1 (100%) +E Max absolute difference among violations: 1.23039875 +E Max relative difference among violations: 0.19333851 +E ACTUAL: array(5.133562) +E DESIRED: array(6.363961) +tests/test_stable_translog_dispatch.py:63: AssertionError +=============================== warnings summary =============================== +.pixi/envs/tests-cpu/lib/python3.14/site-packages/estimagic/estimation_table.py:12 + suppress_performance_warnings = np.testing.suppress_warnings() +src/skillmodels/chs/process_debug_data.py:131 + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/process_debug_data.py:131: BeartypeClawDecorWarning: Function skillmodels.chs.process_debug_data._convert_state_array_to_df() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/process_debug_data.py" line 131 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def _convert_state_array_to_df( +-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html +- generated xml file: /tmp/claude-1000/-home-hmg-Dropbox-health-cognition-draft/f368457b-f0d1-419e-80f9-d3c98cf19bb0/scratchpad/mut2.xml - +=========================== short test summary info ============================ +FAILED tests/test_stable_translog.py::test_finite_tail_witness_and_limits - A... +FAILED tests/test_stable_translog.py::test_shape_order_permutations_and_parameter_basis[1] +FAILED tests/test_stable_translog.py::test_shape_order_permutations_and_parameter_basis[2] +FAILED tests/test_stable_translog.py::test_shape_order_permutations_and_parameter_basis[3] +FAILED tests/test_stable_translog.py::test_shape_order_permutations_and_parameter_basis[4] +FAILED tests/test_stable_translog.py::test_default_profile_fidelity_for_squares_and_interactions[1.0-0.01] +FAILED tests/test_stable_translog.py::test_default_profile_fidelity_for_squares_and_interactions[2.0-0.1] +FAILED tests/test_stable_translog.py::test_derivatives_at_zero_clip_knee_and_tails +FAILED tests/test_stable_translog.py::test_observed_input_beyond_scale_is_clipped_in_interaction +FAILED tests/test_stable_translog_dispatch.py::test_public_model_uses_clipped_values +FAILED tests/test_stable_translog_dispatch.py::test_amn_resolver_returns_the_right_law +================== 11 failed, 18 passed, 2 warnings in 6.95s =================== +EXIT: 1 diff --git a/docs/superpowers/specs/2026-10-16-stable-translog-mutant-translog-alias.log b/docs/superpowers/specs/2026-10-16-stable-translog-mutant-translog-alias.log new file mode 100644 index 00000000..1cbf8a50 --- /dev/null +++ b/docs/superpowers/specs/2026-10-16-stable-translog-mutant-translog-alias.log @@ -0,0 +1,23201 @@ +MUTANT: translog alias (g = states in stable_translog); expected: numerical failures +COMMAND: pixi run -e tests-cpu pytest tests/test_stable_translog_estimation.py tests/test_stable_translog_dispatch.py tests/test_stable_translog.py -v -p no:cacheprovider + WARN Encountered 2 warnings while parsing the manifest: + ⚠ the `[system-requirements]` table is deprecated in favor of virtual + │ packages on `platforms` + ╭─[/home/hmg/econ/skillmodels-applications/skillmodels/pyproject.toml:92:23] + 91 │ platforms = [ "linux-64" ] + 92 │ system-requirements = { cuda = "12" } + · ───────┬─────── + · ╰── declare these on the `platforms` entries instead + 93 │ [tool.pixi.feature.cuda.dependencies] + ╰──── + help: e.g. platforms = [{ name = "my-linux-64", platform = "linux-64", cuda + = "12" }] + ⚠ the `[system-requirements]` table is deprecated in favor of virtual + │ packages on `platforms` + ╭─[/home/hmg/econ/skillmodels-applications/skillmodels/pyproject.toml:104:23] + 103 │ platforms = [ "linux-64" ] + 104 │ system-requirements = { cuda = "13" } + · ───────┬─────── + · ╰── declare these on the `platforms` entries instead + 105 │ [tool.pixi.feature.cuda13.dependencies] + ╰──── + help: e.g. platforms = [{ name = "my-linux-64", platform = "linux-64", cuda + = "13" }] +============================= test session starts ============================== +platform linux -- Python 3.14.6, pytest-9.1.1, pluggy-1.6.0 -- /home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/bin/python3.14 +rootdir: /home/hmg/econ/skillmodels-applications/skillmodels +configfile: pyproject.toml +plugins: cov-7.1.0, memray-1.8.0, anyio-4.14.0, xdist-3.8.0 +collecting ... collected 35 items +tests/test_stable_translog_estimation.py::test_zero_nonlinear_params_reproduce_linear_filter PASSED [ 2%] +tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_inside_scale] FAILED [ 5%] +tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_beyond_scale] FAILED [ 8%] +tests/test_stable_translog_estimation.py::test_endogenous_carry_forward_substeps_accept_stable_translog FAILED [ 11%] +tests/test_stable_translog_estimation.py::test_endogenous_contributions_and_gradient_match_same_law_reference FAILED [ 14%] +tests/test_stable_translog_estimation.py::test_unscented_predict_moments_equal_sigma_weighted_reference_law FAILED [ 17%] +tests/test_stable_translog_dispatch.py::test_public_model_uses_clipped_values FAILED [ 20%] +tests/test_stable_translog_dispatch.py::test_amn_resolver_returns_the_right_law FAILED [ 22%] +tests/test_stable_translog_dispatch.py::test_af_public_validation_accepts_name PASSED [ 25%] +tests/test_stable_translog.py::test_finite_tail_witness_and_limits FAILED [ 28%] +tests/test_stable_translog.py::test_shape_order_permutations_and_parameter_basis[1] FAILED [ 31%] +tests/test_stable_translog.py::test_shape_order_permutations_and_parameter_basis[2] FAILED [ 34%] +tests/test_stable_translog.py::test_shape_order_permutations_and_parameter_basis[3] FAILED [ 37%] +tests/test_stable_translog.py::test_shape_order_permutations_and_parameter_basis[4] FAILED [ 40%] +tests/test_stable_translog.py::test_default_profile_fidelity_for_squares_and_interactions[1.0-0.01] FAILED [ 42%] +tests/test_stable_translog.py::test_default_profile_fidelity_for_squares_and_interactions[2.0-0.1] FAILED [ 45%] +tests/test_stable_translog.py::test_all_200_iterates_and_fixed_point FAILED [ 48%] +tests/test_stable_translog.py::test_derivatives_at_zero_clip_knee_and_tails FAILED [ 51%] +tests/test_stable_translog.py::test_static_configuration_and_scaling[0.5-2] FAILED [ 54%] +tests/test_stable_translog.py::test_static_configuration_and_scaling[3.0-4] FAILED [ 57%] +tests/test_stable_translog.py::test_static_configuration_and_scaling[9.0-8] FAILED [ 60%] +tests/test_stable_translog.py::test_identity_and_name_companions PASSED [ 62%] +tests/test_stable_translog.py::test_invalid_scale_fails_loud[0.0] PASSED [ 65%] +tests/test_stable_translog.py::test_invalid_scale_fails_loud[-3.0] PASSED [ 68%] +tests/test_stable_translog.py::test_invalid_scale_fails_loud[inf] PASSED [ 71%] +tests/test_stable_translog.py::test_invalid_scale_fails_loud[nan] PASSED [ 74%] +tests/test_stable_translog.py::test_invalid_power_fails_loud[0] PASSED [ 77%] +tests/test_stable_translog.py::test_invalid_power_fails_loud[1] PASSED [ 80%] +tests/test_stable_translog.py::test_invalid_power_fails_loud[3] PASSED [ 82%] +tests/test_stable_translog.py::test_invalid_power_fails_loud[4.0] PASSED [ 85%] +tests/test_stable_translog.py::test_invalid_power_fails_loud[True] PASSED [ 88%] +tests/test_stable_translog.py::test_finite_power_overflow_neighborhood[0.5-4] FAILED [ 91%] +tests/test_stable_translog.py::test_finite_power_overflow_neighborhood[3.0-4] FAILED [ 94%] +tests/test_stable_translog.py::test_finite_power_overflow_neighborhood[9.0-8] FAILED [ 97%] +tests/test_stable_translog.py::test_observed_input_beyond_scale_is_clipped_in_interaction FAILED [100%] +=================================== FAILURES =================================== +_ test_contributions_and_gradient_match_same_law_reference[inputs_inside_scale] _ +ob_scale = 1.0 + @pytest.mark.parametrize( + "ob_scale", [1.0, 10.0], ids=["inputs_inside_scale", "inputs_beyond_scale"] + ) + def test_contributions_and_gradient_match_same_law_reference(ob_scale) -> None: + data = _data() + data[["ob1", "ob2"]] *= ob_scale + stable, g_stable = _loglikeobs_and_grad("stable_translog", data, nonlinear=0.05) + reference, g_reference = _loglikeobs_and_grad(REFERENCE, data, nonlinear=0.05) + translog, _ = _loglikeobs_and_grad("translog", data, nonlinear=0.05) + assert np.all(np.isfinite(stable)) + assert np.all(np.isfinite(g_stable)) +> assert_allclose(stable, reference, rtol=1e-10, atol=1e-10) +E AssertionError: +E Not equal to tolerance rtol=1e-10, atol=1e-10 +E +E Mismatched elements: 6 / 6 (100%) +E First 5 mismatches are at indices: +E [0]: -49.867718134388895 (ACTUAL), -49.6498848784974 (DESIRED) +E [1]: -28.991113800245774 (ACTUAL), -28.96852578365068 (DESIRED) +E [2]: -26.5779972250427 (ACTUAL), -26.677854224699292 (DESIRED) +E [3]: -29.413488437129423 (ACTUAL), -29.438635565519043 (DESIRED) +E [4]: -48.175072543469156 (ACTUAL), -47.06434066900236 (DESIRED) +E Max absolute difference among violations: 1.11073187 +E Max relative difference among violations: 0.02360029 +E ACTUAL: array([-49.867718, -28.991114, -26.577997, -29.413488, -48.175073, +E -22.347022]) +E DESIRED: array([-49.649885, -28.968526, -26.677854, -29.438636, -47.064341, +E -22.346092]) +tests/test_stable_translog_estimation.py:98: AssertionError +_ test_contributions_and_gradient_match_same_law_reference[inputs_beyond_scale] _ +ob_scale = 10.0 + @pytest.mark.parametrize( + "ob_scale", [1.0, 10.0], ids=["inputs_inside_scale", "inputs_beyond_scale"] + ) + def test_contributions_and_gradient_match_same_law_reference(ob_scale) -> None: + data = _data() + data[["ob1", "ob2"]] *= ob_scale + stable, g_stable = _loglikeobs_and_grad("stable_translog", data, nonlinear=0.05) + reference, g_reference = _loglikeobs_and_grad(REFERENCE, data, nonlinear=0.05) + translog, _ = _loglikeobs_and_grad("translog", data, nonlinear=0.05) + assert np.all(np.isfinite(stable)) + assert np.all(np.isfinite(g_stable)) +> assert_allclose(stable, reference, rtol=1e-10, atol=1e-10) +E AssertionError: +E Not equal to tolerance rtol=1e-10, atol=1e-10 +E +E Mismatched elements: 6 / 6 (100%) +E First 5 mismatches are at indices: +E [0]: -1937.6980312080207 (ACTUAL), -986.3325921260333 (DESIRED) +E [1]: -68.14703937719555 (ACTUAL), -71.73558743409964 (DESIRED) +E [2]: -759.1384315895207 (ACTUAL), -1032.311160901287 (DESIRED) +E [3]: -41.339276381651786 (ACTUAL), -40.67071502158919 (DESIRED) +E [4]: -2633.2935244248383 (ACTUAL), -1497.6278861190424 (DESIRED) +E Max absolute difference among violations: 1135.66563831 +E Max relative difference among violations: 0.96454831 +E ACTUAL: array([-1937.698031, -68.147039, -759.138432, -41.339276, +E -2633.293524, -266.36701 ]) +E DESIRED: array([ -986.332592, -71.735587, -1032.311161, -40.670715, +E -1497.627886, -177.923722]) +tests/test_stable_translog_estimation.py:98: AssertionError +________ test_endogenous_carry_forward_substeps_accept_stable_translog _________ + def test_endogenous_carry_forward_substeps_accept_stable_translog() -> None: + """Carry-forward substeps keep their identity/zero-kappa constraints.""" + linear = _endogenous_loglike("linear", nonlinear=0.0) + assert_allclose( + _endogenous_loglike("stable_translog", nonlinear=0.0), linear, rtol=1e-10 + ) + stable = _endogenous_loglike("stable_translog", nonlinear=0.1) + assert np.isfinite(stable) +> assert abs(stable - _endogenous_loglike("translog", nonlinear=0.1)) > 1e-8 +E AssertionError: assert 0.0 > 1e-08 +E + where 0.0 = abs((-8.13977198052863 - -8.13977198052863)) +E + where -8.13977198052863 = _endogenous_loglike('translog', nonlinear=0.1) +tests/test_stable_translog_estimation.py:158: AssertionError +_____ test_endogenous_contributions_and_gradient_match_same_law_reference ______ + def test_endogenous_contributions_and_gradient_match_same_law_reference() -> None: + stable, g_stable = _endogenous_loglikeobs_and_grad("stable_translog", 0.1) + reference, g_reference = _endogenous_loglikeobs_and_grad(REFERENCE_ENDOGENOUS, 0.1) + translog, _ = _endogenous_loglikeobs_and_grad("translog", 0.1) + assert np.all(np.isfinite(g_stable)) +> assert_allclose(stable, reference, rtol=1e-10, atol=1e-10) +E AssertionError: +E Not equal to tolerance rtol=1e-10, atol=1e-10 +E +E Mismatched elements: 2 / 2 (100%) +E Mismatch at indices: +E [0]: -2.3090328295913816 (ACTUAL), -2.2959881826705795 (DESIRED) +E [1]: -5.83073915093725 (ACTUAL), -5.967443734673983 (DESIRED) +E Max absolute difference among violations: 0.13670458 +E Max relative difference among violations: 0.0229084 +E ACTUAL: array([-2.309033, -5.830739]) +E DESIRED: array([-2.295988, -5.967444]) +tests/test_stable_translog_estimation.py:166: AssertionError +______ test_unscented_predict_moments_equal_sigma_weighted_reference_law _______ + def test_unscented_predict_moments_equal_sigma_weighted_reference_law() -> None: + """Predicted moments are the sigma-weighted moments of the clipped law. + The fixture's own sigma points and weights are pushed through an independent + NumPy evaluation of the original formula; weighted mean and covariance plus the + shock variance must equal what `kalman_predict` returns for `stable_translog`. + """ + inp = _predict_inputs() + rng = np.random.default_rng(1) + n_fac = 4 + names = (*LATENT, "ob1", "ob2") + n_par = len(params_translog(names)) + coeffs = {f: jnp.array(rng.normal(scale=0.3, size=n_par)) for f in LATENT} + scaling_factor, weights = calculate_sigma_scaling_factor_and_weights(2, 2) + shock_sds = inp["shock_sds"] / inp["scaling"][1, :2] + means, chols = kalman_predict( + _stable_translog_transition, + jnp.array(inp["states"]), + jnp.array(inp["chols"]), + scaling_factor, + weights, + coeffs, + jnp.array(shock_sds), + jnp.array(inp["scaling"]), + jnp.array(inp["constants"]), + jnp.array(inp["observed"]), + ) + covs = np.einsum("nkja,nkjb->nkab", chols, chols) + sigma = np.asarray( + _calculate_sigma_points( + jnp.array(inp["states"]), + jnp.array(inp["chols"]), + scaling_factor, + jnp.array(inp["observed"]), + ) + ) + w = np.asarray(weights) + s_in, s_out = inp["scaling"][0, :2], inp["scaling"][1, :2] + c_in, c_out = inp["constants"][0, :2], inp["constants"][1, :2] + n_obs, n_mix, n_sigma, _ = sigma.shape + for i in range(n_obs): + for k in range(n_mix): + out = np.empty((n_sigma, 2)) + for q in range(n_sigma): + x = sigma[i, k, q].copy() + x[:2] = x[:2] * s_in + c_in + g = _g_np(x) + for j, f in enumerate(LATENT): + p = np.asarray(coeffs[f]) + val = p[-1] + p[:n_fac] @ x + p[n_fac : 2 * n_fac] @ g**2 + pos = 2 * n_fac + for a in range(n_fac): + for b in range(a + 1, n_fac): + val += p[pos] * g[a] * g[b] + pos += 1 + out[q, j] = (val - c_out[j]) / s_out[j] + mean = w @ out + dev = out - mean + cov = (dev * w[:, None]).T @ dev + np.diag(shock_sds**2) +> assert_allclose(means[i, k], mean, rtol=1e-10, atol=1e-12) +E AssertionError: +E Not equal to tolerance rtol=1e-10, atol=1e-12 +E +E Mismatched elements: 2 / 2 (100%) +E Mismatch at indices: +E [0]: 3.5232386149409076 (ACTUAL), 0.5034668691561932 (DESIRED) +E [1]: 0.048765047036336946 (ACTUAL), 0.26803980873202515 (DESIRED) +E Max absolute difference among violations: 3.01977175 +E Max relative difference among violations: 5.99795524 +E ACTUAL: array([3.523239, 0.048765]) +E DESIRED: array([0.503467, 0.26804 ]) +tests/test_stable_translog_estimation.py:244: AssertionError +____________________ test_public_model_uses_clipped_values _____________________ +model_and_processed = (ModelSpec(_factors=mappingproxy({'skill': FactorSpec(measurements=(('m0', 'm1', 'm2'), ('m0', 'm1', 'm2')), normaliza..., 1: 1})), factor_info=mappingproxy({'skill': FactorInfo(factor_type=)}), control_function=None))) + def test_public_model_uses_clipped_values(model_and_processed): + _, processed = model_and_processed + info = processed.transition_info + assert info is not None + states = jnp.array([[2.0], [3.0]]) + params = {"skill": jnp.array([0.0, 1.0, 0.0])} + expected = jnp.array([[36.0 / jnp.sqrt(97.0)], [9.0 / jnp.sqrt(2.0)]]) + # process_model wraps the full transition with in_axes=(None,0). +> assert_allclose(info.func(params, states), expected, rtol=3e-13, atol=3e-13) +E AssertionError: +E Not equal to tolerance rtol=3e-13, atol=3e-13 +E +E Mismatched elements: 2 / 2 (100%) +E Mismatch at indices: +E [0, 0]: 4.0 (ACTUAL), 3.655246194481029 (DESIRED) +E [1, 0]: 9.0 (ACTUAL), 6.363961030678928 (DESIRED) +E Max absolute difference among violations: 2.63603897 +E Max relative difference among violations: 0.41421356 +E ACTUAL: array([[4.], +E [9.]]) +E DESIRED: array([[3.655246], +E [6.363961]]) +tests/test_stable_translog_dispatch.py:48: AssertionError +___________________ test_amn_resolver_returns_the_right_law ____________________ +model_and_processed = (ModelSpec(_factors=mappingproxy({'skill': FactorSpec(measurements=(('m0', 'm1', 'm2'), ('m0', 'm1', 'm2')), normaliza..., 1: 1})), factor_info=mappingproxy({'skill': FactorInfo(factor_type=)}), control_function=None))) + def test_amn_resolver_returns_the_right_law(model_and_processed): + model, processed = model_and_processed + func, names = _resolve_transition_callable( + "stable_translog", "skill", processed, model + ) + assert func is tf.stable_translog + assert names == ("skill", "skill ** 2", "constant") + value = func(jnp.array([3.0]), jnp.array([0.0, 1.0, 0.0])) +> assert_allclose(value, 9.0 / jnp.sqrt(2.0), rtol=3e-14) +E AssertionError: +E Not equal to tolerance rtol=3e-14, atol=0 +E +E Mismatched elements: 1 / 1 (100%) +E Max absolute difference among violations: 2.63603897 +E Max relative difference among violations: 0.41421356 +E ACTUAL: array(9.) +E DESIRED: array(6.363961) +tests/test_stable_translog_dispatch.py:63: AssertionError +_____________________ test_finite_tail_witness_and_limits ______________________ +api = (, >, .vmap_f at 0x7e2647969b10>>) + def test_finite_tail_witness_and_limits(api): + f, compiled, batch = api + x = jnp.array([[-1e80], [-1e76], [-50.0], [0.0], [50.0], [1e76], [1e80]]) + p = jnp.array([0.0, 1.0, 0.0]) + expected = np.array([float(transition(row, p)) for row in np.asarray(x)]) # ty: ignore[invalid-argument-type] +> assert_allclose(batch(x, p), expected, rtol=3e-14, atol=2e-14) +E AssertionError: +E Not equal to tolerance rtol=3e-14, atol=2e-14 +E +E Mismatched elements: 6 / 7 (85.7%) +E First 5 mismatches are at indices: +E [0]: 1e+160 (ACTUAL), 9.0 (DESIRED) +E [1]: 1e+152 (ACTUAL), 9.0 (DESIRED) +E [2]: 2500.0 (ACTUAL), 8.999941680566865 (DESIRED) +E [4]: 2500.0 (ACTUAL), 8.999941680566865 (DESIRED) +E [5]: 1e+152 (ACTUAL), 9.0 (DESIRED) +E Max absolute difference among violations: 1.e+160 +E Max relative difference among violations: 1.11111111e+159 +E ACTUAL: array([1.0e+160, 1.0e+152, 2.5e+003, 0.0e+000, 2.5e+003, 1.0e+152, +E 1.0e+160]) +E DESIRED: array([9. , 9. , 8.999942, 0. , 8.999942, 9. , +E 9. ]) +tests/test_stable_translog.py:35: AssertionError +_____________ test_shape_order_permutations_and_parameter_basis[1] _____________ +api = (, >, .vmap_f at 0x7e2647969b10>>) +n = 1 + @pytest.mark.parametrize("n", [1, 2, 3, 4]) + def test_shape_order_permutations_and_parameter_basis(api, n): + f, compiled, batch = api + rng = np.random.default_rng(0) + states = rng.uniform(-6, 6, size=(8, n)) + k = 2 * n + n * (n - 1) // 2 + 1 + params = rng.normal(size=k) + expected = np.array([float(transition(row, params)) for row in states]) +> assert_allclose( + batch(jnp.asarray(states), jnp.asarray(params)), + expected, + rtol=4e-13, + atol=4e-13, + ) +E AssertionError: +E Not equal to tolerance rtol=4e-13, atol=4e-13 +E +E Mismatched elements: 8 / 8 (100%) +E First 5 mismatches are at indices: +E [0]: -5.1980791854608395 (ACTUAL), -5.053798892672461 (DESIRED) +E [1]: -8.336524910611736 (ACTUAL), -6.044858529871753 (DESIRED) +E [2]: -35.141743780104214 (ACTUAL), -7.665459103512282 (DESIRED) +E [3]: -39.13370768161835 (ACTUAL), -7.542716409306062 (DESIRED) +E [4]: -21.151604622732382 (ACTUAL), -12.874926344960715 (DESIRED) +E Max absolute difference among violations: 31.59099127 +E Max relative difference among violations: 4.18827774 +E ACTUAL: array([ -5.198079, -8.336525, -35.141744, -39.133708, -21.151605, +E -35.153345, -3.595861, -12.158654]) +E DESIRED: array([ -5.053799, -6.044859, -7.665459, -7.542716, -12.874926, +E -14.80094 , -3.562395, -9.900285]) +tests/test_stable_translog.py:56: AssertionError +_____________ test_shape_order_permutations_and_parameter_basis[2] _____________ +api = (, >, .vmap_f at 0x7e2647969b10>>) +n = 2 + @pytest.mark.parametrize("n", [1, 2, 3, 4]) + def test_shape_order_permutations_and_parameter_basis(api, n): + f, compiled, batch = api + rng = np.random.default_rng(0) + states = rng.uniform(-6, 6, size=(8, n)) + k = 2 * n + n * (n - 1) // 2 + 1 + params = rng.normal(size=k) + expected = np.array([float(transition(row, params)) for row in states]) +> assert_allclose( + batch(jnp.asarray(states), jnp.asarray(params)), + expected, + rtol=4e-13, + atol=4e-13, + ) +E AssertionError: +E Not equal to tolerance rtol=4e-13, atol=4e-13 +E +E Mismatched elements: 8 / 8 (100%) +E First 5 mismatches are at indices: +E [0]: 10.997437708697985 (ACTUAL), 8.977725234597402 (DESIRED) +E [1]: 49.671688468821216 (ACTUAL), 17.702102507310308 (DESIRED) +E [2]: 26.753490060790362 (ACTUAL), 8.65777145123314 (DESIRED) +E [3]: 7.926721308971641 (ACTUAL), 6.115359600700208 (DESIRED) +E [4]: 27.60797031357751 (ACTUAL), 8.255790610299176 (DESIRED) +E Max absolute difference among violations: 32.65645391 +E Max relative difference among violations: 2.34407347 +E ACTUAL: array([10.997438, 49.671688, 26.75349 , 7.926721, 27.60797 , 47.13201 , +E 44.117482, 21.395296]) +E DESIRED: array([ 8.977725, 17.702103, 8.657771, 6.11536 , 8.255791, 14.475556, +E 14.222924, 12.414664]) +tests/test_stable_translog.py:56: AssertionError +_____________ test_shape_order_permutations_and_parameter_basis[3] _____________ +api = (, >, .vmap_f at 0x7e2647969b10>>) +n = 3 + @pytest.mark.parametrize("n", [1, 2, 3, 4]) + def test_shape_order_permutations_and_parameter_basis(api, n): + f, compiled, batch = api + rng = np.random.default_rng(0) + states = rng.uniform(-6, 6, size=(8, n)) + k = 2 * n + n * (n - 1) // 2 + 1 + params = rng.normal(size=k) + expected = np.array([float(transition(row, params)) for row in states]) +> assert_allclose( + batch(jnp.asarray(states), jnp.asarray(params)), + expected, + rtol=4e-13, + atol=4e-13, + ) +E AssertionError: +E Not equal to tolerance rtol=4e-13, atol=4e-13 +E +E Mismatched elements: 8 / 8 (100%) +E First 5 mismatches are at indices: +E [0]: 10.614294117849749 (ACTUAL), 6.490264289495424 (DESIRED) +E [1]: -15.055380632421704 (ACTUAL), -8.938177321824725 (DESIRED) +E [2]: -7.281442659516112 (ACTUAL), -5.938292290669064 (DESIRED) +E [3]: -23.669430768208798 (ACTUAL), -4.442182991746442 (DESIRED) +E [4]: -3.56126547724111 (ACTUAL), -0.15402138268425988 (DESIRED) +E Max absolute difference among violations: 19.22724778 +E Max relative difference among violations: 22.12189006 +E ACTUAL: array([ 10.614294, -15.055381, -7.281443, -23.669431, -3.561265, +E -8.352554, -2.106437, -14.211528]) +E DESIRED: array([ 6.490264, -8.938177, -5.938292, -4.442183, -0.154021, -5.663169, +E -4.326617, -7.185585]) +tests/test_stable_translog.py:56: AssertionError +_____________ test_shape_order_permutations_and_parameter_basis[4] _____________ +api = (, >, .vmap_f at 0x7e2647969b10>>) +n = 4 + @pytest.mark.parametrize("n", [1, 2, 3, 4]) + def test_shape_order_permutations_and_parameter_basis(api, n): + f, compiled, batch = api + rng = np.random.default_rng(0) + states = rng.uniform(-6, 6, size=(8, n)) + k = 2 * n + n * (n - 1) // 2 + 1 + params = rng.normal(size=k) + expected = np.array([float(transition(row, params)) for row in states]) +> assert_allclose( + batch(jnp.asarray(states), jnp.asarray(params)), + expected, + rtol=4e-13, + atol=4e-13, + ) +E AssertionError: +E Not equal to tolerance rtol=4e-13, atol=4e-13 +E +E Mismatched elements: 8 / 8 (100%) +E First 5 mismatches are at indices: +E [0]: 53.0309173891181 (ACTUAL), 9.81033140404612 (DESIRED) +E [1]: 10.208110508465543 (ACTUAL), 16.572597489035367 (DESIRED) +E [2]: 73.29859909605383 (ACTUAL), 25.381156885173958 (DESIRED) +E [3]: 32.17469926709835 (ACTUAL), 15.641290174084519 (DESIRED) +E [4]: -32.234786131560945 (ACTUAL), -16.549246417963857 (DESIRED) +E Max absolute difference among violations: 57.08844104 +E Max relative difference among violations: 4.40561936 +E ACTUAL: array([ 53.030917, 10.208111, 73.298599, 32.174699, -32.234786, +E -88.232781, 86.186538, 7.15708 ]) +E DESIRED: array([ 9.810331, 16.572597, 25.381157, 15.64129 , -16.549246, +E -31.205665, 29.098097, 6.447245]) +tests/test_stable_translog.py:56: AssertionError +_____ test_default_profile_fidelity_for_squares_and_interactions[1.0-0.01] _____ +api = (, >, .vmap_f at 0x7e2647969b10>>) +x = 1.0, budget = 0.01 + @pytest.mark.parametrize(("x", "budget"), [(1.0, 0.01), (2.0, 0.10)]) + def test_default_profile_fidelity_for_squares_and_interactions(api, x, budget): + f = api[0] + square = float(f(jnp.array([x]), jnp.array([0.0, 1.0, 0.0]))) + cross = float(f(jnp.array([x, -x]), jnp.array([0.0, 0.0, 0.0, 0.0, 1.0, 0.0]))) + assert abs(square - x * x) / (x * x) <= budget + assert abs(cross + x * x) / (x * x) <= budget + # Checks the actual default equation, not just a loose upper bound. +> assert_allclose(square, float(clip(x) ** 2), rtol=3e-14, atol=2e-14) +E AssertionError: +E Not equal to tolerance rtol=3e-14, atol=2e-14 +E +E Mismatched elements: 1 / 1 (100%) +E Max absolute difference among violations: 0.00611627 +E Max relative difference among violations: 0.0061539 +E ACTUAL: array(1.) +E DESIRED: array(0.993884) +tests/test_stable_translog.py:100: AssertionError +_____ test_default_profile_fidelity_for_squares_and_interactions[2.0-0.1] ______ +api = (, >, .vmap_f at 0x7e2647969b10>>) +x = 2.0, budget = 0.1 + @pytest.mark.parametrize(("x", "budget"), [(1.0, 0.01), (2.0, 0.10)]) + def test_default_profile_fidelity_for_squares_and_interactions(api, x, budget): + f = api[0] + square = float(f(jnp.array([x]), jnp.array([0.0, 1.0, 0.0]))) + cross = float(f(jnp.array([x, -x]), jnp.array([0.0, 0.0, 0.0, 0.0, 1.0, 0.0]))) + assert abs(square - x * x) / (x * x) <= budget + assert abs(cross + x * x) / (x * x) <= budget + # Checks the actual default equation, not just a loose upper bound. +> assert_allclose(square, float(clip(x) ** 2), rtol=3e-14, atol=2e-14) +E AssertionError: +E Not equal to tolerance rtol=3e-14, atol=2e-14 +E +E Mismatched elements: 1 / 1 (100%) +E Max absolute difference among violations: 0.34475381 +E Max relative difference among violations: 0.09431753 +E ACTUAL: array(4.) +E DESIRED: array(3.655246) +tests/test_stable_translog.py:100: AssertionError +____________________ test_all_200_iterates_and_fixed_point _____________________ +api = (, >, .vmap_f at 0x7e2647969b10>>) + def test_all_200_iterates_and_fixed_point(api): + f = api[0] + p = jnp.array([0.769, -0.103, -0.003]) + def step(x, _): + y = f(jnp.array([x]), p) + return y, y + final, trace = jax.jit( + lambda: jax.lax.scan(step, jnp.array(-3.0), None, length=200) + )() + all_states = jnp.concatenate((jnp.array([-3.0]), trace)) +> assert bool(jnp.all(jnp.isfinite(all_states))) +E assert False +E + where False = bool(Array(False, dtype=bool)) +E + where Array(False, dtype=bool) = (Array([ True, True, True, True, True, True, True, True, True,\n True, True, True, True, True, True, True, True, True,\n False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False,\n False, False, False], dtype=bool)) +E + where = jnp.all +E + and Array([ True, True, True, True, True, True, True, True, True,\n True, True, True, True, True, True, True, True, True,\n False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False,\n False, False, False], dtype=bool) = >(Array([-3.00000000e+000, -3.23700000e+000, -3.57150441e+000,\n -4.06331819e+000, -4.82827883e+000, -6.11711089e+000,\n -8.56121998e+000, -1.41359104e+001, -3.14553832e+001,\n -1.26104626e+002, -1.73492227e+003, -3.11359552e+005,\n -9.98555081e+009, -1.02702562e+019, -1.08642507e+037,\n -1.21572901e+073, -1.52233695e+145, -2.38703507e+289,\n -inf, -inf, -inf,\n -inf, -inf, -inf,\n -inf, -inf, -inf,\n -inf, -inf, -inf,\n -inf, -inf, -inf,\n -inf, -inf, -inf,\n -inf, -inf, -inf,\n -inf, -inf, -inf,\n -inf, -inf, -inf,\n -inf, -inf, -inf,\n -inf, -inf, -inf,\n -inf, -inf, -inf,\n -inf, -inf, -inf,\n -inf, -i..., -inf,\n -inf, -inf, -inf,\n -inf, -inf, -inf,\n -inf, -inf, -inf,\n -inf, -inf, -inf,\n -inf, -inf, -inf,\n -inf, -inf, -inf,\n -inf, -inf, -inf,\n -inf, -inf, -inf,\n -inf, -inf, -inf,\n -inf, -inf, -inf,\n -inf, -inf, -inf,\n -inf, -inf, -inf,\n -inf, -inf, -inf,\n -inf, -inf, -inf,\n -inf, -inf, -inf,\n -inf, -inf, -inf,\n -inf, -inf, -inf,\n -inf, -inf, -inf,\n -inf, -inf, -inf], dtype=float64)) +E + where > = jnp.isfinite +tests/test_stable_translog.py:115: AssertionError +_________________ test_derivatives_at_zero_clip_knee_and_tails _________________ +api = (, >, .vmap_f at 0x7e2647969b10>>) + def test_derivatives_at_zero_clip_knee_and_tails(api): + f = api[0] + knee = 3.0 + x = np.array( + [ + -50.0, + -knee, + -2.0, + -1.0, + -0.0, + 0.0, + 1.0, + 2.0, + np.nextafter(knee, -np.inf), + knee, + np.nextafter(knee, np.inf), + 50.0, + ] + ) + params = jnp.array([0.4, 0.2, 0.1]) + def objective(z): + return f(jnp.array([z]), params) + result = jax.jit(jax.vmap(jax.grad(objective)))(jnp.asarray(x)) + expected = np.array([0.4 + 0.4 * float(clip(v) * clip_derivative(v)) for v in x]) + assert bool(jnp.all(jnp.isfinite(result))) +> assert_allclose(result, expected, rtol=2e-12, atol=2e-13) +E AssertionError: +E Not equal to tolerance rtol=2e-12, atol=2e-13 +E +E Mismatched elements: 10 / 12 (83.3%) +E First 5 mismatches are at indices: +E [0]: -19.6 (ACTUAL), 0.3999990668981396 (DESIRED) +E [1]: -0.8 (ACTUAL), -0.024264068711928488 (DESIRED) +E [2]: -0.4 (ACTUAL), -0.2104637974287903 (DESIRED) +E [3]: 0.0 (ACTUAL), 0.0072947194704237606 (DESIRED) +E [6]: 0.8 (ACTUAL), 0.7927052805295762 (DESIRED) +E Max absolute difference among violations: 19.99999907 +E Max relative difference among violations: 50.00011431 +E ACTUAL: array([-19.6, -0.8, -0.4, 0. , 0.4, 0.4, 0.8, 1.2, 1.6, +E 1.6, 1.6, 20.4]) +E DESIRED: array([ 0.399999, -0.024264, -0.210464, 0.007295, 0.4 , 0.4 , +E 0.792705, 1.010464, 0.824264, 0.824264, 0.824264, 0.400001]) +tests/test_stable_translog.py:150: AssertionError +_________________ test_static_configuration_and_scaling[0.5-2] _________________ +api = (, >, .vmap_f at 0x7e2647969b10>>) +scale = 0.5, power = 2 + @pytest.mark.parametrize(("scale", "power"), [(0.5, 2), (3.0, 4), (9.0, 8)]) + def test_static_configuration_and_scaling(api, scale, power): + f = api[0] + compiled = jax.jit(f, static_argnames=("scale", "power")) + params = jnp.array([0.0, 1.0, 0.0]) + for x in (-2 * scale, 0.0, 0.5 * scale, 2 * scale): + value = compiled(jnp.array([x]), params, scale=scale, power=power) +> assert_allclose( + value, float(clip(x, scale, power) ** 2), rtol=5e-14, atol=5e-14 + ) +E AssertionError: +E Not equal to tolerance rtol=5e-14, atol=5e-14 +E +E Mismatched elements: 1 / 1 (100%) +E Max absolute difference among violations: 0.8 +E Max relative difference among violations: 4. +E ACTUAL: array(1.) +E DESIRED: array(0.2) +tests/test_stable_translog.py:165: AssertionError +_________________ test_static_configuration_and_scaling[3.0-4] _________________ +api = (, >, .vmap_f at 0x7e2647969b10>>) +scale = 3.0, power = 4 + @pytest.mark.parametrize(("scale", "power"), [(0.5, 2), (3.0, 4), (9.0, 8)]) + def test_static_configuration_and_scaling(api, scale, power): + f = api[0] + compiled = jax.jit(f, static_argnames=("scale", "power")) + params = jnp.array([0.0, 1.0, 0.0]) + for x in (-2 * scale, 0.0, 0.5 * scale, 2 * scale): + value = compiled(jnp.array([x]), params, scale=scale, power=power) +> assert_allclose( + value, float(clip(x, scale, power) ** 2), rtol=5e-14, atol=5e-14 + ) +E AssertionError: +E Not equal to tolerance rtol=5e-14, atol=5e-14 +E +E Mismatched elements: 1 / 1 (100%) +E Max absolute difference among violations: 27.2687175 +E Max relative difference among violations: 3.12310563 +E ACTUAL: array(36.) +E DESIRED: array(8.731283) +tests/test_stable_translog.py:165: AssertionError +_________________ test_static_configuration_and_scaling[9.0-8] _________________ +api = (, >, .vmap_f at 0x7e2647969b10>>) +scale = 9.0, power = 8 + @pytest.mark.parametrize(("scale", "power"), [(0.5, 2), (3.0, 4), (9.0, 8)]) + def test_static_configuration_and_scaling(api, scale, power): + f = api[0] + compiled = jax.jit(f, static_argnames=("scale", "power")) + params = jnp.array([0.0, 1.0, 0.0]) + for x in (-2 * scale, 0.0, 0.5 * scale, 2 * scale): + value = compiled(jnp.array([x]), params, scale=scale, power=power) +> assert_allclose( + value, float(clip(x, scale, power) ** 2), rtol=5e-14, atol=5e-14 + ) +E AssertionError: +E Not equal to tolerance rtol=5e-14, atol=5e-14 +E +E Mismatched elements: 1 / 1 (100%) +E Max absolute difference among violations: 243.07890901 +E Max relative difference among violations: 3.00390054 +E ACTUAL: array(324.) +E DESIRED: array(80.921091) +tests/test_stable_translog.py:165: AssertionError +________________ test_finite_power_overflow_neighborhood[0.5-4] ________________ +scale = 0.5, power = 4 + @pytest.mark.parametrize(("scale", "power"), [(0.5, 4), (3.0, 4), (9.0, 8)]) + def test_finite_power_overflow_neighborhood(scale, power): + limit = np.finfo(np.float64).max + threshold = scale * math.exp(math.log(limit) / power) + samples = [ + 0.0, + scale, + np.nextafter(scale, 0.0), + np.nextafter(scale, np.inf), + 50.0, + threshold / 2, + np.nextafter(threshold, 0.0), + threshold, + np.nextafter(threshold, np.inf), + threshold * 2, + 1e80, + 1e150, + 1e300, + ] + samples = sorted({v for x in samples for v in (x, -x) if np.isfinite(v)}) + x = jnp.array(samples) + helper = jax.jit(lambda z: tf._soft_clip(z, scale, power)) + got = helper(x) + expected = np.array([float(clip(v, scale, power)) for v in samples]) + assert bool(jnp.all(jnp.isfinite(got))) + assert bool(jnp.all(jnp.diff(got) >= -2e-13 * scale)) + assert_allclose(got, expected, rtol=8e-14, atol=8e-14 * scale) + f = jax.jit(tf.stable_translog, static_argnames=("scale", "power")) + p = jnp.array([0.0, 1.0, 0.0]) + vals = jax.vmap(lambda z: f(jnp.array([z]), p, scale=scale, power=power))(x) +> assert_allclose(vals, expected**2, rtol=2e-13, atol=2e-13 * scale**2) +E AssertionError: +E Not equal to tolerance rtol=2e-13, atol=5e-14 +E +E inf location mismatch: +E ACTUAL: array([ inf, 1.000000e+300, 1.000000e+160, 1.340781e+154, +E 3.351952e+153, 3.351952e+153, 3.351952e+153, 8.379880e+152, +E 2.500000e+003, 2.500000e-001, 2.500000e-001, 2.500000e-001,... +E DESIRED: array([0.25 , 0.25 , 0.25 , 0.25 , 0.25 , 0.25 , +E 0.25 , 0.25 , 0.25 , 0.176777, 0.176777, 0.176777, +E 0. , 0.176777, 0.176777, 0.176777, 0.25 , 0.25 ,... +tests/test_stable_translog.py:234: AssertionError +________________ test_finite_power_overflow_neighborhood[3.0-4] ________________ +scale = 3.0, power = 4 + @pytest.mark.parametrize(("scale", "power"), [(0.5, 4), (3.0, 4), (9.0, 8)]) + def test_finite_power_overflow_neighborhood(scale, power): + limit = np.finfo(np.float64).max + threshold = scale * math.exp(math.log(limit) / power) + samples = [ + 0.0, + scale, + np.nextafter(scale, 0.0), + np.nextafter(scale, np.inf), + 50.0, + threshold / 2, + np.nextafter(threshold, 0.0), + threshold, + np.nextafter(threshold, np.inf), + threshold * 2, + 1e80, + 1e150, + 1e300, + ] + samples = sorted({v for x in samples for v in (x, -x) if np.isfinite(v)}) + x = jnp.array(samples) + helper = jax.jit(lambda z: tf._soft_clip(z, scale, power)) + got = helper(x) + expected = np.array([float(clip(v, scale, power)) for v in samples]) + assert bool(jnp.all(jnp.isfinite(got))) + assert bool(jnp.all(jnp.diff(got) >= -2e-13 * scale)) + assert_allclose(got, expected, rtol=8e-14, atol=8e-14 * scale) + f = jax.jit(tf.stable_translog, static_argnames=("scale", "power")) + p = jnp.array([0.0, 1.0, 0.0]) + vals = jax.vmap(lambda z: f(jnp.array([z]), p, scale=scale, power=power))(x) +> assert_allclose(vals, expected**2, rtol=2e-13, atol=2e-13 * scale**2) +E AssertionError: +E Not equal to tolerance rtol=2e-13, atol=1.8e-12 +E +E inf location mismatch: +E ACTUAL: array([ inf, 1.000000e+300, 1.000000e+160, 4.826811e+155, +E 1.206703e+155, 1.206703e+155, 1.206703e+155, 3.016757e+154, +E 2.500000e+003, 9.000000e+000, 9.000000e+000, 9.000000e+000,... +E DESIRED: array([9. , 9. , 9. , 9. , 9. , 9. , +E 9. , 9. , 8.999942, 6.363961, 6.363961, 6.363961, +E 0. , 6.363961, 6.363961, 6.363961, 8.999942, 9. ,... +tests/test_stable_translog.py:234: AssertionError +________________ test_finite_power_overflow_neighborhood[9.0-8] ________________ +scale = 9.0, power = 8 + @pytest.mark.parametrize(("scale", "power"), [(0.5, 4), (3.0, 4), (9.0, 8)]) + def test_finite_power_overflow_neighborhood(scale, power): + limit = np.finfo(np.float64).max + threshold = scale * math.exp(math.log(limit) / power) + samples = [ + 0.0, + scale, + np.nextafter(scale, 0.0), + np.nextafter(scale, np.inf), + 50.0, + threshold / 2, + np.nextafter(threshold, 0.0), + threshold, + np.nextafter(threshold, np.inf), + threshold * 2, + 1e80, + 1e150, + 1e300, + ] + samples = sorted({v for x in samples for v in (x, -x) if np.isfinite(v)}) + x = jnp.array(samples) + helper = jax.jit(lambda z: tf._soft_clip(z, scale, power)) + got = helper(x) + expected = np.array([float(clip(v, scale, power)) for v in samples]) + assert bool(jnp.all(jnp.isfinite(got))) + assert bool(jnp.all(jnp.diff(got) >= -2e-13 * scale)) + assert_allclose(got, expected, rtol=8e-14, atol=8e-14 * scale) + f = jax.jit(tf.stable_translog, static_argnames=("scale", "power")) + p = jnp.array([0.0, 1.0, 0.0]) + vals = jax.vmap(lambda z: f(jnp.array([z]), p, scale=scale, power=power))(x) +> assert_allclose(vals, expected**2, rtol=2e-13, atol=2e-13 * scale**2) +E AssertionError: +E Not equal to tolerance rtol=2e-13, atol=1.62e-11 +E +E inf location mismatch: +E ACTUAL: array([ inf, 1.000000e+300, 1.000000e+160, 3.751664e+079, +E 9.379159e+078, 9.379159e+078, 9.379159e+078, 2.344790e+078, +E 2.500000e+003, 8.100000e+001, 8.100000e+001, 8.100000e+001,... +E DESIRED: array([81. , 81. , 81. , 81. , 81. , 81. , +E 81. , 81. , 80.999978, 68.11261 , 68.11261 , 68.11261 , +E 0. , 68.11261 , 68.11261 , 68.11261 , 80.999978, 81. ,... +tests/test_stable_translog.py:234: AssertionError +__________ test_observed_input_beyond_scale_is_clipped_in_interaction __________ +api = (, >, .vmap_f at 0x7e2647969b10>>) + def test_observed_input_beyond_scale_is_clipped_in_interaction(api) -> None: + f = api[0] + # latent at 1.0, observed input at 50: only the interaction coefficient is on + params = jnp.array([0.0, 0.0, 0.0, 0.0, 1.0, 0.0]) + value = float(f(jnp.array([1.0, 50.0]), params)) +> assert_allclose(value, float(clip(1.0) * clip(50.0)), rtol=3e-14) +E AssertionError: +E Not equal to tolerance rtol=3e-14, atol=0 +E +E Mismatched elements: 1 / 1 (100%) +E Max absolute difference among violations: 47.00919816 +E Max relative difference among violations: 15.71792471 +E ACTUAL: array(50.) +E DESIRED: array(2.990802) +tests/test_stable_translog.py:252: AssertionError +=============================== warnings summary =============================== +.pixi/envs/tests-cpu/lib/python3.14/site-packages/estimagic/estimation_table.py:12 + suppress_performance_warnings = np.testing.suppress_warnings() +src/skillmodels/chs/process_debug_data.py:131 + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/process_debug_data.py:131: BeartypeClawDecorWarning: Function skillmodels.chs.process_debug_data._convert_state_array_to_df() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/process_debug_data.py" line 131 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def _convert_state_array_to_df( +tests/test_stable_translog_estimation.py::test_zero_nonlinear_params_reproduce_linear_filter + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:187: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglikeobs() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 187 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglikeobs(params: pd.DataFrame) -> NDArray[np.floating]: +tests/test_stable_translog_estimation.py::test_zero_nonlinear_params_reproduce_linear_filter + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:191: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglike_and_gradient() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 191 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglike_and_gradient( +tests/test_stable_translog_estimation.py::test_zero_nonlinear_params_reproduce_linear_filter + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:187: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglikeobs() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 187 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglikeobs(params: pd.DataFrame) -> NDArray[np.floating]: +tests/test_stable_translog_estimation.py::test_zero_nonlinear_params_reproduce_linear_filter + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:191: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglike_and_gradient() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 191 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglike_and_gradient( +tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_inside_scale] + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:187: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglikeobs() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 187 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglikeobs(params: pd.DataFrame) -> NDArray[np.floating]: +tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_inside_scale] + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:191: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglike_and_gradient() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 191 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglike_and_gradient( +tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_inside_scale] + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:187: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglikeobs() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 187 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglikeobs(params: pd.DataFrame) -> NDArray[np.floating]: +tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_inside_scale] + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:191: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglike_and_gradient() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 191 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglike_and_gradient( +tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_inside_scale] + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:187: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglikeobs() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 187 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglikeobs(params: pd.DataFrame) -> NDArray[np.floating]: +tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_inside_scale] + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:191: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglike_and_gradient() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 191 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglike_and_gradient( +tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_beyond_scale] + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:187: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglikeobs() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 187 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglikeobs(params: pd.DataFrame) -> NDArray[np.floating]: +tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_beyond_scale] + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:191: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglike_and_gradient() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 191 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglike_and_gradient( +tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_beyond_scale] + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:187: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglikeobs() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 187 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglikeobs(params: pd.DataFrame) -> NDArray[np.floating]: +tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_beyond_scale] + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:191: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglike_and_gradient() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 191 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglike_and_gradient( +tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_beyond_scale] + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:187: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglikeobs() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 187 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglikeobs(params: pd.DataFrame) -> NDArray[np.floating]: +tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_beyond_scale] + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:191: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglike_and_gradient() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 191 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglike_and_gradient( +tests/test_stable_translog_estimation.py::test_endogenous_carry_forward_substeps_accept_stable_translog + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:187: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglikeobs() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 187 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglikeobs(params: pd.DataFrame) -> NDArray[np.floating]: +tests/test_stable_translog_estimation.py::test_endogenous_carry_forward_substeps_accept_stable_translog + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:191: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglike_and_gradient() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 191 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglike_and_gradient( +tests/test_stable_translog_estimation.py::test_endogenous_carry_forward_substeps_accept_stable_translog + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:187: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglikeobs() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 187 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglikeobs(params: pd.DataFrame) -> NDArray[np.floating]: +tests/test_stable_translog_estimation.py::test_endogenous_carry_forward_substeps_accept_stable_translog + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:191: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglike_and_gradient() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 191 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglike_and_gradient( +tests/test_stable_translog_estimation.py::test_endogenous_carry_forward_substeps_accept_stable_translog + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:187: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglikeobs() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 187 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglikeobs(params: pd.DataFrame) -> NDArray[np.floating]: +tests/test_stable_translog_estimation.py::test_endogenous_carry_forward_substeps_accept_stable_translog + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:191: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglike_and_gradient() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 191 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglike_and_gradient( +tests/test_stable_translog_estimation.py::test_endogenous_carry_forward_substeps_accept_stable_translog + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:187: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglikeobs() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 187 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglikeobs(params: pd.DataFrame) -> NDArray[np.floating]: +tests/test_stable_translog_estimation.py::test_endogenous_carry_forward_substeps_accept_stable_translog + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:191: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglike_and_gradient() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 191 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglike_and_gradient( +tests/test_stable_translog_estimation.py::test_endogenous_contributions_and_gradient_match_same_law_reference + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:187: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglikeobs() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 187 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglikeobs(params: pd.DataFrame) -> NDArray[np.floating]: +tests/test_stable_translog_estimation.py::test_endogenous_contributions_and_gradient_match_same_law_reference + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:191: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglike_and_gradient() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 191 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglike_and_gradient( +tests/test_stable_translog_estimation.py::test_endogenous_contributions_and_gradient_match_same_law_reference + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:187: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglikeobs() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 187 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglikeobs(params: pd.DataFrame) -> NDArray[np.floating]: +tests/test_stable_translog_estimation.py::test_endogenous_contributions_and_gradient_match_same_law_reference + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:191: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglike_and_gradient() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 191 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglike_and_gradient( +tests/test_stable_translog_estimation.py::test_endogenous_contributions_and_gradient_match_same_law_reference + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:187: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglikeobs() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 187 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglikeobs(params: pd.DataFrame) -> NDArray[np.floating]: +tests/test_stable_translog_estimation.py::test_endogenous_contributions_and_gradient_match_same_law_reference + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:191: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglike_and_gradient() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 191 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglike_and_gradient( +-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html +- generated xml file: /tmp/claude-1000/-home-hmg-Dropbox-health-cognition-draft/f368457b-f0d1-419e-80f9-d3c98cf19bb0/scratchpad/mut1.xml - +=========================== short test summary info ============================ +FAILED tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_inside_scale] +FAILED tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_beyond_scale] +FAILED tests/test_stable_translog_estimation.py::test_endogenous_carry_forward_substeps_accept_stable_translog +FAILED tests/test_stable_translog_estimation.py::test_endogenous_contributions_and_gradient_match_same_law_reference +FAILED tests/test_stable_translog_estimation.py::test_unscented_predict_moments_equal_sigma_weighted_reference_law +FAILED tests/test_stable_translog_dispatch.py::test_public_model_uses_clipped_values +FAILED tests/test_stable_translog_dispatch.py::test_amn_resolver_returns_the_right_law +FAILED tests/test_stable_translog.py::test_finite_tail_witness_and_limits - A... +FAILED tests/test_stable_translog.py::test_shape_order_permutations_and_parameter_basis[1] +FAILED tests/test_stable_translog.py::test_shape_order_permutations_and_parameter_basis[2] +FAILED tests/test_stable_translog.py::test_shape_order_permutations_and_parameter_basis[3] +FAILED tests/test_stable_translog.py::test_shape_order_permutations_and_parameter_basis[4] +FAILED tests/test_stable_translog.py::test_default_profile_fidelity_for_squares_and_interactions[1.0-0.01] +FAILED tests/test_stable_translog.py::test_default_profile_fidelity_for_squares_and_interactions[2.0-0.1] +FAILED tests/test_stable_translog.py::test_all_200_iterates_and_fixed_point +FAILED tests/test_stable_translog.py::test_derivatives_at_zero_clip_knee_and_tails +FAILED tests/test_stable_translog.py::test_static_configuration_and_scaling[0.5-2] +FAILED tests/test_stable_translog.py::test_static_configuration_and_scaling[3.0-4] +FAILED tests/test_stable_translog.py::test_static_configuration_and_scaling[9.0-8] +FAILED tests/test_stable_translog.py::test_finite_power_overflow_neighborhood[0.5-4] +FAILED tests/test_stable_translog.py::test_finite_power_overflow_neighborhood[3.0-4] +FAILED tests/test_stable_translog.py::test_finite_power_overflow_neighborhood[9.0-8] +FAILED tests/test_stable_translog.py::test_observed_input_beyond_scale_is_clipped_in_interaction +================= 23 failed, 12 passed, 32 warnings in 31.02s ================== +EXIT: 1 diff --git a/docs/superpowers/specs/2026-10-16-stable-translog-native-closure-round1.log b/docs/superpowers/specs/2026-10-16-stable-translog-native-closure-round1.log new file mode 100644 index 00000000..55a98a98 --- /dev/null +++ b/docs/superpowers/specs/2026-10-16-stable-translog-native-closure-round1.log @@ -0,0 +1,22542 @@ +COMMAND: zsh -ic "cap pixi run -e tests-cpu pytest tests/test_stable_translog.py tests/test_stable_translog_dispatch.py tests/test_stable_translog_estimation.py tests/test_transition_functions.py -v -p no:cacheprovider --durations=0" +GIT: c2db3e9 plus uncommitted round-1 closure changes (tests/test_stable_translog_estimation.py, docs/superpowers/specs); src/ unchanged + WARN Encountered 2 warnings while parsing the manifest: + ⚠ the `[system-requirements]` table is deprecated in favor of virtual + │ packages on `platforms` + ╭─[/home/hmg/econ/skillmodels-applications/skillmodels/pyproject.toml:92:23] + 91 │ platforms = [ "linux-64" ] + 92 │ system-requirements = { cuda = "12" } + · ───────┬─────── + · ╰── declare these on the `platforms` entries instead + 93 │ [tool.pixi.feature.cuda.dependencies] + ╰──── + help: e.g. platforms = [{ name = "my-linux-64", platform = "linux-64", cuda + = "12" }] + ⚠ the `[system-requirements]` table is deprecated in favor of virtual + │ packages on `platforms` + ╭─[/home/hmg/econ/skillmodels-applications/skillmodels/pyproject.toml:104:23] + 103 │ platforms = [ "linux-64" ] + 104 │ system-requirements = { cuda = "13" } + · ───────┬─────── + · ╰── declare these on the `platforms` entries instead + 105 │ [tool.pixi.feature.cuda13.dependencies] + ╰──── + help: e.g. platforms = [{ name = "my-linux-64", platform = "linux-64", cuda + = "13" }] +============================= test session starts ============================== +platform linux -- Python 3.14.6, pytest-9.1.1, pluggy-1.6.0 -- /home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/bin/python3.14 +rootdir: /home/hmg/econ/skillmodels-applications/skillmodels +configfile: pyproject.toml +plugins: cov-7.1.0, memray-1.8.0, anyio-4.14.0, xdist-3.8.0 +collecting ... collected 61 items +tests/test_stable_translog.py::test_finite_tail_witness_and_limits PASSED [ 1%] +tests/test_stable_translog.py::test_shape_order_permutations_and_parameter_basis[1] PASSED [ 3%] +tests/test_stable_translog.py::test_shape_order_permutations_and_parameter_basis[2] PASSED [ 4%] +tests/test_stable_translog.py::test_shape_order_permutations_and_parameter_basis[3] PASSED [ 6%] +tests/test_stable_translog.py::test_shape_order_permutations_and_parameter_basis[4] PASSED [ 8%] +tests/test_stable_translog.py::test_default_profile_fidelity_for_squares_and_interactions[1.0-0.01] PASSED [ 9%] +tests/test_stable_translog.py::test_default_profile_fidelity_for_squares_and_interactions[2.0-0.1] PASSED [ 11%] +tests/test_stable_translog.py::test_all_200_iterates_and_fixed_point PASSED [ 13%] +tests/test_stable_translog.py::test_derivatives_at_zero_clip_knee_and_tails PASSED [ 14%] +tests/test_stable_translog.py::test_static_configuration_and_scaling[0.5-2] PASSED [ 16%] +tests/test_stable_translog.py::test_static_configuration_and_scaling[3.0-4] PASSED [ 18%] +tests/test_stable_translog.py::test_static_configuration_and_scaling[9.0-8] PASSED [ 19%] +tests/test_stable_translog.py::test_identity_and_name_companions PASSED [ 21%] +tests/test_stable_translog.py::test_invalid_scale_fails_loud[0.0] PASSED [ 22%] +tests/test_stable_translog.py::test_invalid_scale_fails_loud[-3.0] PASSED [ 24%] +tests/test_stable_translog.py::test_invalid_scale_fails_loud[inf] PASSED [ 26%] +tests/test_stable_translog.py::test_invalid_scale_fails_loud[nan] PASSED [ 27%] +tests/test_stable_translog.py::test_invalid_power_fails_loud[0] PASSED [ 29%] +tests/test_stable_translog.py::test_invalid_power_fails_loud[1] PASSED [ 31%] +tests/test_stable_translog.py::test_invalid_power_fails_loud[3] PASSED [ 32%] +tests/test_stable_translog.py::test_invalid_power_fails_loud[4.0] PASSED [ 34%] +tests/test_stable_translog.py::test_invalid_power_fails_loud[True] PASSED [ 36%] +tests/test_stable_translog.py::test_finite_power_overflow_neighborhood[0.5-4] PASSED [ 37%] +tests/test_stable_translog.py::test_finite_power_overflow_neighborhood[3.0-4] PASSED [ 39%] +tests/test_stable_translog.py::test_finite_power_overflow_neighborhood[9.0-8] PASSED [ 40%] +tests/test_stable_translog.py::test_observed_input_beyond_scale_is_clipped_in_interaction PASSED [ 42%] +tests/test_stable_translog_dispatch.py::test_public_model_uses_clipped_values PASSED [ 44%] +tests/test_stable_translog_dispatch.py::test_amn_resolver_returns_the_right_law PASSED [ 45%] +tests/test_stable_translog_dispatch.py::test_af_public_validation_accepts_name PASSED [ 47%] +tests/test_stable_translog_estimation.py::test_zero_nonlinear_params_reproduce_linear_filter PASSED [ 49%] +tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_inside_scale] PASSED [ 50%] +tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_beyond_scale] PASSED [ 52%] +tests/test_stable_translog_estimation.py::test_endogenous_carry_forward_substeps_accept_stable_translog PASSED [ 54%] +tests/test_stable_translog_estimation.py::test_endogenous_contributions_and_gradient_match_same_law_reference PASSED [ 55%] +tests/test_stable_translog_estimation.py::test_unscented_predict_moments_equal_sigma_weighted_reference_law PASSED [ 57%] +tests/test_transition_functions.py::test_linear PASSED [ 59%] +tests/test_transition_functions.py::test_translog PASSED [ 60%] +tests/test_transition_functions.py::test_translog_af_has_no_square_terms PASSED [ 62%] +tests/test_transition_functions.py::test_log_ces_af_matches_log_ces PASSED [ 63%] +tests/test_transition_functions.py::test_log_ces PASSED [ 65%] +tests/test_transition_functions.py::test_where_all_but_one_gammas_are_zero PASSED [ 67%] +tests/test_transition_functions.py::test_constant PASSED [ 68%] +tests/test_transition_functions.py::test_robust_translog PASSED [ 70%] +tests/test_transition_functions.py::test_log_ces_general PASSED [ 72%] +tests/test_transition_functions.py::test_log_ces_general_where_all_but_one_gammas_are_zero PASSED [ 73%] +tests/test_transition_functions.py::test_param_names_log_ces_general PASSED [ 75%] +tests/test_transition_functions.py::test_params_linear PASSED [ 77%] +tests/test_transition_functions.py::test_params_translog PASSED [ 78%] +tests/test_transition_functions.py::test_params_robust_translog PASSED [ 80%] +tests/test_transition_functions.py::test_params_linear_and_squares PASSED [ 81%] +tests/test_transition_functions.py::test_params_constant PASSED [ 83%] +tests/test_transition_functions.py::test_params_log_ces PASSED [ 85%] +tests/test_transition_functions.py::test_linear_and_squares PASSED [ 86%] +tests/test_transition_functions.py::test_identity_constraints_linear PASSED [ 88%] +tests/test_transition_functions.py::test_identity_constraints_translog PASSED [ 90%] +tests/test_transition_functions.py::test_identity_constraints_robust_translog PASSED [ 91%] +tests/test_transition_functions.py::test_identity_constraints_linear_and_squares PASSED [ 93%] +tests/test_transition_functions.py::test_identity_constraints_log_ces_is_noop PASSED [ 95%] +tests/test_transition_functions.py::test_identity_constraints_log_ces_general_is_noop PASSED [ 96%] +tests/test_transition_functions.py::test_constraints_log_ces PASSED [ 98%] +tests/test_transition_functions.py::test_stable_translog_is_registered_in_allow_lists PASSED [100%] +=============================== warnings summary =============================== +.pixi/envs/tests-cpu/lib/python3.14/site-packages/estimagic/estimation_table.py:12 + suppress_performance_warnings = np.testing.suppress_warnings() +src/skillmodels/chs/process_debug_data.py:131 + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/process_debug_data.py:131: BeartypeClawDecorWarning: Function skillmodels.chs.process_debug_data._convert_state_array_to_df() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/process_debug_data.py" line 131 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def _convert_state_array_to_df( +tests/test_stable_translog_estimation.py::test_zero_nonlinear_params_reproduce_linear_filter + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:187: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglikeobs() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 187 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglikeobs(params: pd.DataFrame) -> NDArray[np.floating]: +tests/test_stable_translog_estimation.py::test_zero_nonlinear_params_reproduce_linear_filter + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:191: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglike_and_gradient() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 191 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglike_and_gradient( +tests/test_stable_translog_estimation.py::test_zero_nonlinear_params_reproduce_linear_filter + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:187: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglikeobs() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 187 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglikeobs(params: pd.DataFrame) -> NDArray[np.floating]: +tests/test_stable_translog_estimation.py::test_zero_nonlinear_params_reproduce_linear_filter + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:191: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglike_and_gradient() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 191 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglike_and_gradient( +tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_inside_scale] + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:187: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglikeobs() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 187 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglikeobs(params: pd.DataFrame) -> NDArray[np.floating]: +tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_inside_scale] + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:191: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglike_and_gradient() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 191 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglike_and_gradient( +tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_inside_scale] + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:187: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglikeobs() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 187 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglikeobs(params: pd.DataFrame) -> NDArray[np.floating]: +tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_inside_scale] + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:191: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglike_and_gradient() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 191 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglike_and_gradient( +tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_inside_scale] + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:187: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglikeobs() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 187 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglikeobs(params: pd.DataFrame) -> NDArray[np.floating]: +tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_inside_scale] + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:191: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglike_and_gradient() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 191 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglike_and_gradient( +tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_beyond_scale] + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:187: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglikeobs() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 187 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglikeobs(params: pd.DataFrame) -> NDArray[np.floating]: +tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_beyond_scale] + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:191: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglike_and_gradient() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 191 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglike_and_gradient( +tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_beyond_scale] + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:187: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglikeobs() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 187 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglikeobs(params: pd.DataFrame) -> NDArray[np.floating]: +tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_beyond_scale] + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:191: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglike_and_gradient() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 191 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglike_and_gradient( +tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_beyond_scale] + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:187: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglikeobs() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 187 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglikeobs(params: pd.DataFrame) -> NDArray[np.floating]: +tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_beyond_scale] + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:191: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglike_and_gradient() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 191 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglike_and_gradient( +tests/test_stable_translog_estimation.py::test_endogenous_carry_forward_substeps_accept_stable_translog + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:187: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglikeobs() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 187 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglikeobs(params: pd.DataFrame) -> NDArray[np.floating]: +tests/test_stable_translog_estimation.py::test_endogenous_carry_forward_substeps_accept_stable_translog + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:191: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglike_and_gradient() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 191 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglike_and_gradient( +tests/test_stable_translog_estimation.py::test_endogenous_carry_forward_substeps_accept_stable_translog + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:187: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglikeobs() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 187 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglikeobs(params: pd.DataFrame) -> NDArray[np.floating]: +tests/test_stable_translog_estimation.py::test_endogenous_carry_forward_substeps_accept_stable_translog + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:191: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglike_and_gradient() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 191 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglike_and_gradient( +tests/test_stable_translog_estimation.py::test_endogenous_carry_forward_substeps_accept_stable_translog + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:187: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglikeobs() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 187 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglikeobs(params: pd.DataFrame) -> NDArray[np.floating]: +tests/test_stable_translog_estimation.py::test_endogenous_carry_forward_substeps_accept_stable_translog + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:191: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglike_and_gradient() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 191 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglike_and_gradient( +tests/test_stable_translog_estimation.py::test_endogenous_carry_forward_substeps_accept_stable_translog + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:187: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglikeobs() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 187 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglikeobs(params: pd.DataFrame) -> NDArray[np.floating]: +tests/test_stable_translog_estimation.py::test_endogenous_carry_forward_substeps_accept_stable_translog + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:191: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglike_and_gradient() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 191 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglike_and_gradient( +tests/test_stable_translog_estimation.py::test_endogenous_contributions_and_gradient_match_same_law_reference + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:187: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglikeobs() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 187 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglikeobs(params: pd.DataFrame) -> NDArray[np.floating]: +tests/test_stable_translog_estimation.py::test_endogenous_contributions_and_gradient_match_same_law_reference + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:191: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglike_and_gradient() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 191 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglike_and_gradient( +tests/test_stable_translog_estimation.py::test_endogenous_contributions_and_gradient_match_same_law_reference + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:187: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglikeobs() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 187 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglikeobs(params: pd.DataFrame) -> NDArray[np.floating]: +tests/test_stable_translog_estimation.py::test_endogenous_contributions_and_gradient_match_same_law_reference + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:191: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglike_and_gradient() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 191 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglike_and_gradient( +tests/test_stable_translog_estimation.py::test_endogenous_contributions_and_gradient_match_same_law_reference + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:187: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglikeobs() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 187 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglikeobs(params: pd.DataFrame) -> NDArray[np.floating]: +tests/test_stable_translog_estimation.py::test_endogenous_contributions_and_gradient_match_same_law_reference + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:191: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglike_and_gradient() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 191 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + The above exception was the direct cause of the following exception: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + def loglike_and_gradient( +-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html +- generated xml file: /tmp/claude-1000/-home-hmg-Dropbox-health-cognition-draft/f368457b-f0d1-419e-80f9-d3c98cf19bb0/scratchpad/closure2.xml - +============================== slowest durations =============================== +8.66s call tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_beyond_scale] +8.65s call tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_inside_scale] +5.99s call tests/test_stable_translog_estimation.py::test_endogenous_contributions_and_gradient_match_same_law_reference +2.44s call tests/test_stable_translog_estimation.py::test_unscented_predict_moments_equal_sigma_weighted_reference_law +2.40s call tests/test_stable_translog.py::test_finite_tail_witness_and_limits +2.24s call tests/test_stable_translog.py::test_shape_order_permutations_and_parameter_basis[4] +2.23s call tests/test_stable_translog_estimation.py::test_endogenous_carry_forward_substeps_accept_stable_translog +1.97s call tests/test_stable_translog.py::test_shape_order_permutations_and_parameter_basis[3] +1.76s call tests/test_stable_translog.py::test_derivatives_at_zero_clip_knee_and_tails +1.48s call tests/test_stable_translog_estimation.py::test_zero_nonlinear_params_reproduce_linear_filter +1.34s call tests/test_stable_translog.py::test_shape_order_permutations_and_parameter_basis[2] +0.98s call tests/test_stable_translog.py::test_shape_order_permutations_and_parameter_basis[1] +0.89s call tests/test_stable_translog_dispatch.py::test_public_model_uses_clipped_values +0.64s call tests/test_stable_translog.py::test_finite_power_overflow_neighborhood[0.5-4] +0.52s call tests/test_transition_functions.py::test_log_ces_general +0.51s call tests/test_stable_translog.py::test_all_200_iterates_and_fixed_point +0.42s call tests/test_stable_translog.py::test_finite_power_overflow_neighborhood[9.0-8] +0.40s call tests/test_stable_translog.py::test_finite_power_overflow_neighborhood[3.0-4] +0.30s call tests/test_transition_functions.py::test_log_ces_general_where_all_but_one_gammas_are_zero +0.27s call tests/test_transition_functions.py::test_log_ces_af_matches_log_ces +0.25s call tests/test_transition_functions.py::test_where_all_but_one_gammas_are_zero +0.16s call tests/test_stable_translog.py::test_identity_and_name_companions +0.15s call tests/test_stable_translog.py::test_static_configuration_and_scaling[0.5-2] +0.15s call tests/test_transition_functions.py::test_linear +0.12s call tests/test_stable_translog.py::test_static_configuration_and_scaling[9.0-8] +0.11s call tests/test_transition_functions.py::test_translog +0.07s call tests/test_stable_translog.py::test_static_configuration_and_scaling[3.0-4] +0.05s call tests/test_transition_functions.py::test_robust_translog +0.02s call tests/test_stable_translog.py::test_default_profile_fidelity_for_squares_and_interactions[1.0-0.01] +0.02s setup tests/test_stable_translog_dispatch.py::test_public_model_uses_clipped_values +0.02s call tests/test_transition_functions.py::test_constant +0.01s setup tests/test_stable_translog_dispatch.py::test_amn_resolver_returns_the_right_law +0.01s setup tests/test_stable_translog_dispatch.py::test_af_public_validation_accepts_name +(150 durations < 0.005s hidden. Use -vv to show these durations.) +======================= 61 passed, 32 warnings in 45.44s ======================= +EXIT: 0 diff --git a/docs/superpowers/specs/2026-10-16-stable-translog-native-closure.log b/docs/superpowers/specs/2026-10-16-stable-translog-native-closure.log new file mode 100644 index 00000000..2c651009 --- /dev/null +++ b/docs/superpowers/specs/2026-10-16-stable-translog-native-closure.log @@ -0,0 +1,15331 @@ +671f596b7d5c8209a5f3d196a370667b0be00c94 + + +3.14.6 | packaged by conda-forge | (main, Jun 12 2026, 08:51:42) [GCC 14.3.0] +jax 0.10.2 + + +{ + "stability": { + "bounded_input_inverse_gain": [ + { + "a": "1/4", + "true_amplitude": "4/3", + "claimed_inverse_gain": "4/5" + }, + { + "a": "1/2", + "true_amplitude": "2", + "claimed_inverse_gain": "2/3" + }, + { + "a": "3/4", + "true_amplitude": "4", + "claimed_inverse_gain": "4/7" + }, + { + "a": "7/8", + "true_amplitude": "8", + "claimed_inverse_gain": "8/15" + } + ], + "switched_schur_family": [ + { + "a": "1/2", + "b": "1", + "det(I-product)": "-7/16", + "max_state_after_100_steps": 180432454.50249478 + }, + { + "a": "3/4", + "b": "1/2", + "det(I-product)": "-15/256", + "max_state_after_100_steps": 60.412503242234514 + }, + { + "a": "1/4", + "b": "1", + "det(I-product)": "-31/256", + "max_state_after_100_steps": 362.06222879258274 + } + ], + "small_entry_matrix_eigenvalue": "121/100", + "control_function_effective_own_coefficient": "3/2" + }, + "default": { + "fidelity": { + "1": "0.006116265326381101961411298745651247347937558818628506228833279632098514306164230482138470", + "2": "0.086188451379742860868908219234447213038502818690877551077233084860536440686916415764548376", + "2.5": "0.178630034326704296043527605135337713232775970760887183217121879096360302372484244326914478" + }, + "fixed_point": "-0.0130631012785421030803298218687185739668959142815885590255053612584185462818827870535056462", + "fixed_point_count": 1, + "fixed_point_residual": "5.2068690545100333E-75", + "sup_0_through_200": "3", + "state_at_200": "-0.0130631012785421032952813016270078265778974032966326736009153592989722939066418613400183247", + "root_margin": "0.012504004613356814960139092109601646860985695254261522694202980480431832077604462497615125", + "global_lower_bound_fprime": "0.454606104455896037025510002576549806647982946411897128609273980487819416632059664997514841" + }, + "finite_overflow": { + "finite_float64_input": "1e80", + "params": [ + 0, + 1, + 0 + ], + "internal_fourth_power": "1.23456790123456790123456790123456790123456790123456790123456790123456790123456790123456790E+318", + "correct_transition": "9.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "proposed_JAX_outcome": "0 under ordinary IEEE overflow; static prediction, not executed", + "native_execution": "not_run" + }, + "integration": { + "illustrative_sigma_rule": "d=9, +/-sqrt(d)e_j, weights 1/(2d)", + "sigma_mean_translog_square": "1", + "sigma_mean_stable_square": "0.7071067811865475244008443622", + "default_scale_mutant_2.5_error_at_2": "0.1577285993384886395671347952", + "mutant_small_state_absolute_error": "0.0001188683378435450057538769918", + "bypass_loglike_ratio": "0 for any finite nonzero baseline loglike if stable dispatch aliases translog" + }, + "execution_scope": "independent standard-library math only; no JAX/skillmodels imports" +} + + +============================= test session starts ============================== +platform linux -- Python 3.14.6, pytest-9.1.1, pluggy-1.6.0 -- /home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/bin/python3.14 +rootdir: /home/hmg/econ/skillmodels-applications/skillmodels +configfile: pyproject.toml +plugins: cov-7.1.0, memray-1.8.0, anyio-4.14.0, xdist-3.8.0 +collecting ... collected 59 items + +tests/test_stable_translog.py::test_finite_tail_witness_and_limits PASSED [ 1%] +tests/test_stable_translog.py::test_shape_order_permutations_and_parameter_basis[1] PASSED [ 3%] +tests/test_stable_translog.py::test_shape_order_permutations_and_parameter_basis[2] PASSED [ 5%] +tests/test_stable_translog.py::test_shape_order_permutations_and_parameter_basis[3] PASSED [ 6%] +tests/test_stable_translog.py::test_shape_order_permutations_and_parameter_basis[4] PASSED [ 8%] +tests/test_stable_translog.py::test_default_profile_fidelity_for_squares_and_interactions[1.0-0.01] PASSED [ 10%] +tests/test_stable_translog.py::test_default_profile_fidelity_for_squares_and_interactions[2.0-0.1] PASSED [ 11%] +tests/test_stable_translog.py::test_all_200_iterates_and_fixed_point PASSED [ 13%] +tests/test_stable_translog.py::test_derivatives_at_zero_clip_knee_and_tails PASSED [ 15%] +tests/test_stable_translog.py::test_static_configuration_and_scaling[0.5-2] PASSED [ 16%] +tests/test_stable_translog.py::test_static_configuration_and_scaling[3.0-4] PASSED [ 18%] +tests/test_stable_translog.py::test_static_configuration_and_scaling[9.0-8] PASSED [ 20%] +tests/test_stable_translog.py::test_identity_and_name_companions PASSED [ 22%] +tests/test_stable_translog.py::test_invalid_scale_fails_loud[0.0] PASSED [ 23%] +tests/test_stable_translog.py::test_invalid_scale_fails_loud[-3.0] PASSED [ 25%] +tests/test_stable_translog.py::test_invalid_scale_fails_loud[inf] PASSED [ 27%] +tests/test_stable_translog.py::test_invalid_scale_fails_loud[nan] PASSED [ 28%] +tests/test_stable_translog.py::test_invalid_power_fails_loud[0] PASSED [ 30%] +tests/test_stable_translog.py::test_invalid_power_fails_loud[1] PASSED [ 32%] +tests/test_stable_translog.py::test_invalid_power_fails_loud[3] PASSED [ 33%] +tests/test_stable_translog.py::test_invalid_power_fails_loud[4.0] PASSED [ 35%] +tests/test_stable_translog.py::test_invalid_power_fails_loud[True] PASSED [ 37%] +tests/test_stable_translog.py::test_finite_power_overflow_neighborhood[0.5-4] PASSED [ 38%] +tests/test_stable_translog.py::test_finite_power_overflow_neighborhood[3.0-4] PASSED [ 40%] +tests/test_stable_translog.py::test_finite_power_overflow_neighborhood[9.0-8] PASSED [ 42%] +tests/test_stable_translog.py::test_observed_input_beyond_scale_is_clipped_in_interaction PASSED [ 44%] +tests/test_stable_translog_dispatch.py::test_public_model_uses_clipped_values PASSED [ 45%] +tests/test_stable_translog_dispatch.py::test_amn_resolver_returns_the_right_law PASSED [ 47%] +tests/test_stable_translog_dispatch.py::test_af_public_validation_accepts_name PASSED [ 49%] +tests/test_stable_translog_estimation.py::test_zero_nonlinear_params_reproduce_linear_filter PASSED [ 50%] +tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_inside_scale] PASSED [ 52%] +tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_beyond_scale] PASSED [ 54%] +tests/test_stable_translog_estimation.py::test_endogenous_carry_forward_substeps_accept_stable_translog PASSED [ 55%] +tests/test_transition_functions.py::test_linear PASSED [ 57%] +tests/test_transition_functions.py::test_translog PASSED [ 59%] +tests/test_transition_functions.py::test_translog_af_has_no_square_terms PASSED [ 61%] +tests/test_transition_functions.py::test_log_ces_af_matches_log_ces PASSED [ 62%] +tests/test_transition_functions.py::test_log_ces PASSED [ 64%] +tests/test_transition_functions.py::test_where_all_but_one_gammas_are_zero PASSED [ 66%] +tests/test_transition_functions.py::test_constant PASSED [ 67%] +tests/test_transition_functions.py::test_robust_translog PASSED [ 69%] +tests/test_transition_functions.py::test_log_ces_general PASSED [ 71%] +tests/test_transition_functions.py::test_log_ces_general_where_all_but_one_gammas_are_zero PASSED [ 72%] +tests/test_transition_functions.py::test_param_names_log_ces_general PASSED [ 74%] +tests/test_transition_functions.py::test_params_linear PASSED [ 76%] +tests/test_transition_functions.py::test_params_translog PASSED [ 77%] +tests/test_transition_functions.py::test_params_robust_translog PASSED [ 79%] +tests/test_transition_functions.py::test_params_linear_and_squares PASSED [ 81%] +tests/test_transition_functions.py::test_params_constant PASSED [ 83%] +tests/test_transition_functions.py::test_params_log_ces PASSED [ 84%] +tests/test_transition_functions.py::test_linear_and_squares PASSED [ 86%] +tests/test_transition_functions.py::test_identity_constraints_linear PASSED [ 88%] +tests/test_transition_functions.py::test_identity_constraints_translog PASSED [ 89%] +tests/test_transition_functions.py::test_identity_constraints_robust_translog PASSED [ 91%] +tests/test_transition_functions.py::test_identity_constraints_linear_and_squares PASSED [ 93%] +tests/test_transition_functions.py::test_identity_constraints_log_ces_is_noop PASSED [ 94%] +tests/test_transition_functions.py::test_identity_constraints_log_ces_general_is_noop PASSED [ 96%] +tests/test_transition_functions.py::test_constraints_log_ces PASSED [ 98%] +tests/test_transition_functions.py::test_stable_translog_is_registered_in_allow_lists PASSED [100%] + +=============================== warnings summary =============================== +.pixi/envs/tests-cpu/lib/python3.14/site-packages/estimagic/estimation_table.py:12 + /home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/estimagic/estimation_table.py:12: DeprecationWarning: NumPy warning suppression and assertion utilities are deprecated. Use warnings.catch_warnings, warnings.filterwarnings, pytest.warns, or pytest.filterwarnings instead. (Deprecated NumPy 2.4) + suppress_performance_warnings = np.testing.suppress_warnings() + +src/skillmodels/chs/process_debug_data.py:131 + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/process_debug_data.py:131: BeartypeClawDecorWarning: Function skillmodels.chs.process_debug_data._convert_state_array_to_df() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/process_debug_data.py" line 131 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + TypeError: Cannot interpret 'ScalarT' as a data type + + The above exception was the direct cause of the following exception: + + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + beartype.roar.BeartypeDecorHintNonpepNumpyException: Function skillmodels.chs.process_debug_data._convert_state_array_to_df() parameter "arr" NumPy data type ScalarT invalid (i.e., neither data type nor coercible into data type). + + def _convert_state_array_to_df( + +tests/test_stable_translog_estimation.py::test_zero_nonlinear_params_reproduce_linear_filter + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:187: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglikeobs() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 187 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + TypeError: Cannot interpret 'ScalarT' as a data type + + The above exception was the direct cause of the following exception: + + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + beartype.roar.BeartypeDecorHintNonpepNumpyException: Function skillmodels.chs.process_debug_data._convert_state_array_to_df() parameter "arr" NumPy data type ScalarT invalid (i.e., neither data type nor coercible into data type). + + def loglikeobs(params: pd.DataFrame) -> NDArray[np.floating]: + +tests/test_stable_translog_estimation.py::test_zero_nonlinear_params_reproduce_linear_filter + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:191: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglike_and_gradient() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 191 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + TypeError: Cannot interpret 'ScalarT' as a data type + + The above exception was the direct cause of the following exception: + + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + beartype.roar.BeartypeDecorHintNonpepNumpyException: Function skillmodels.chs.process_debug_data._convert_state_array_to_df() parameter "arr" NumPy data type ScalarT invalid (i.e., neither data type nor coercible into data type). + + def loglike_and_gradient( + +tests/test_stable_translog_estimation.py::test_zero_nonlinear_params_reproduce_linear_filter + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:187: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglikeobs() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 187 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + TypeError: Cannot interpret 'ScalarT' as a data type + + The above exception was the direct cause of the following exception: + + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + beartype.roar.BeartypeDecorHintNonpepNumpyException: Function skillmodels.chs.process_debug_data._convert_state_array_to_df() parameter "arr" NumPy data type ScalarT invalid (i.e., neither data type nor coercible into data type). + + def loglikeobs(params: pd.DataFrame) -> NDArray[np.floating]: + +tests/test_stable_translog_estimation.py::test_zero_nonlinear_params_reproduce_linear_filter + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:191: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglike_and_gradient() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 191 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + TypeError: Cannot interpret 'ScalarT' as a data type + + The above exception was the direct cause of the following exception: + + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + beartype.roar.BeartypeDecorHintNonpepNumpyException: Function skillmodels.chs.process_debug_data._convert_state_array_to_df() parameter "arr" NumPy data type ScalarT invalid (i.e., neither data type nor coercible into data type). + + def loglike_and_gradient( + +tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_inside_scale] + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:187: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglikeobs() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 187 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + TypeError: Cannot interpret 'ScalarT' as a data type + + The above exception was the direct cause of the following exception: + + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + beartype.roar.BeartypeDecorHintNonpepNumpyException: Function skillmodels.chs.process_debug_data._convert_state_array_to_df() parameter "arr" NumPy data type ScalarT invalid (i.e., neither data type nor coercible into data type). + + def loglikeobs(params: pd.DataFrame) -> NDArray[np.floating]: + +tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_inside_scale] + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:191: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglike_and_gradient() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 191 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + TypeError: Cannot interpret 'ScalarT' as a data type + + The above exception was the direct cause of the following exception: + + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + beartype.roar.BeartypeDecorHintNonpepNumpyException: Function skillmodels.chs.process_debug_data._convert_state_array_to_df() parameter "arr" NumPy data type ScalarT invalid (i.e., neither data type nor coercible into data type). + + def loglike_and_gradient( + +tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_inside_scale] + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:187: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglikeobs() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 187 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + TypeError: Cannot interpret 'ScalarT' as a data type + + The above exception was the direct cause of the following exception: + + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + beartype.roar.BeartypeDecorHintNonpepNumpyException: Function skillmodels.chs.process_debug_data._convert_state_array_to_df() parameter "arr" NumPy data type ScalarT invalid (i.e., neither data type nor coercible into data type). + + def loglikeobs(params: pd.DataFrame) -> NDArray[np.floating]: + +tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_inside_scale] + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:191: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglike_and_gradient() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 191 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + TypeError: Cannot interpret 'ScalarT' as a data type + + The above exception was the direct cause of the following exception: + + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + beartype.roar.BeartypeDecorHintNonpepNumpyException: Function skillmodels.chs.process_debug_data._convert_state_array_to_df() parameter "arr" NumPy data type ScalarT invalid (i.e., neither data type nor coercible into data type). + + def loglike_and_gradient( + +tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_inside_scale] + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:187: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglikeobs() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 187 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + TypeError: Cannot interpret 'ScalarT' as a data type + + The above exception was the direct cause of the following exception: + + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + beartype.roar.BeartypeDecorHintNonpepNumpyException: Function skillmodels.chs.process_debug_data._convert_state_array_to_df() parameter "arr" NumPy data type ScalarT invalid (i.e., neither data type nor coercible into data type). + + def loglikeobs(params: pd.DataFrame) -> NDArray[np.floating]: + +tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_inside_scale] + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:191: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglike_and_gradient() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 191 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + TypeError: Cannot interpret 'ScalarT' as a data type + + The above exception was the direct cause of the following exception: + + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + beartype.roar.BeartypeDecorHintNonpepNumpyException: Function skillmodels.chs.process_debug_data._convert_state_array_to_df() parameter "arr" NumPy data type ScalarT invalid (i.e., neither data type nor coercible into data type). + + def loglike_and_gradient( + +tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_beyond_scale] + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:187: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglikeobs() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 187 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + TypeError: Cannot interpret 'ScalarT' as a data type + + The above exception was the direct cause of the following exception: + + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + beartype.roar.BeartypeDecorHintNonpepNumpyException: Function skillmodels.chs.process_debug_data._convert_state_array_to_df() parameter "arr" NumPy data type ScalarT invalid (i.e., neither data type nor coercible into data type). + + def loglikeobs(params: pd.DataFrame) -> NDArray[np.floating]: + +tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_beyond_scale] + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:191: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglike_and_gradient() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 191 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + TypeError: Cannot interpret 'ScalarT' as a data type + + The above exception was the direct cause of the following exception: + + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + beartype.roar.BeartypeDecorHintNonpepNumpyException: Function skillmodels.chs.process_debug_data._convert_state_array_to_df() parameter "arr" NumPy data type ScalarT invalid (i.e., neither data type nor coercible into data type). + + def loglike_and_gradient( + +tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_beyond_scale] + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:187: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglikeobs() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 187 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + TypeError: Cannot interpret 'ScalarT' as a data type + + The above exception was the direct cause of the following exception: + + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + beartype.roar.BeartypeDecorHintNonpepNumpyException: Function skillmodels.chs.process_debug_data._convert_state_array_to_df() parameter "arr" NumPy data type ScalarT invalid (i.e., neither data type nor coercible into data type). + + def loglikeobs(params: pd.DataFrame) -> NDArray[np.floating]: + +tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_beyond_scale] + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:191: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglike_and_gradient() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 191 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + TypeError: Cannot interpret 'ScalarT' as a data type + + The above exception was the direct cause of the following exception: + + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + beartype.roar.BeartypeDecorHintNonpepNumpyException: Function skillmodels.chs.process_debug_data._convert_state_array_to_df() parameter "arr" NumPy data type ScalarT invalid (i.e., neither data type nor coercible into data type). + + def loglike_and_gradient( + +tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_beyond_scale] + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:187: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglikeobs() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 187 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + TypeError: Cannot interpret 'ScalarT' as a data type + + The above exception was the direct cause of the following exception: + + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + beartype.roar.BeartypeDecorHintNonpepNumpyException: Function skillmodels.chs.process_debug_data._convert_state_array_to_df() parameter "arr" NumPy data type ScalarT invalid (i.e., neither data type nor coercible into data type). + + def loglikeobs(params: pd.DataFrame) -> NDArray[np.floating]: + +tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_beyond_scale] + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:191: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglike_and_gradient() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 191 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + TypeError: Cannot interpret 'ScalarT' as a data type + + The above exception was the direct cause of the following exception: + + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + beartype.roar.BeartypeDecorHintNonpepNumpyException: Function skillmodels.chs.process_debug_data._convert_state_array_to_df() parameter "arr" NumPy data type ScalarT invalid (i.e., neither data type nor coercible into data type). + + def loglike_and_gradient( + +tests/test_stable_translog_estimation.py::test_endogenous_carry_forward_substeps_accept_stable_translog + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:187: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglikeobs() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 187 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + TypeError: Cannot interpret 'ScalarT' as a data type + + The above exception was the direct cause of the following exception: + + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + beartype.roar.BeartypeDecorHintNonpepNumpyException: Function skillmodels.chs.process_debug_data._convert_state_array_to_df() parameter "arr" NumPy data type ScalarT invalid (i.e., neither data type nor coercible into data type). + + def loglikeobs(params: pd.DataFrame) -> NDArray[np.floating]: + +tests/test_stable_translog_estimation.py::test_endogenous_carry_forward_substeps_accept_stable_translog + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:191: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglike_and_gradient() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 191 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + TypeError: Cannot interpret 'ScalarT' as a data type + + The above exception was the direct cause of the following exception: + + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + beartype.roar.BeartypeDecorHintNonpepNumpyException: Function skillmodels.chs.process_debug_data._convert_state_array_to_df() parameter "arr" NumPy data type ScalarT invalid (i.e., neither data type nor coercible into data type). + + def loglike_and_gradient( + +tests/test_stable_translog_estimation.py::test_endogenous_carry_forward_substeps_accept_stable_translog + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:187: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglikeobs() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 187 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + TypeError: Cannot interpret 'ScalarT' as a data type + + The above exception was the direct cause of the following exception: + + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + beartype.roar.BeartypeDecorHintNonpepNumpyException: Function skillmodels.chs.process_debug_data._convert_state_array_to_df() parameter "arr" NumPy data type ScalarT invalid (i.e., neither data type nor coercible into data type). + + def loglikeobs(params: pd.DataFrame) -> NDArray[np.floating]: + +tests/test_stable_translog_estimation.py::test_endogenous_carry_forward_substeps_accept_stable_translog + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:191: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglike_and_gradient() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 191 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + TypeError: Cannot interpret 'ScalarT' as a data type + + The above exception was the direct cause of the following exception: + + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + beartype.roar.BeartypeDecorHintNonpepNumpyException: Function skillmodels.chs.process_debug_data._convert_state_array_to_df() parameter "arr" NumPy data type ScalarT invalid (i.e., neither data type nor coercible into data type). + + def loglike_and_gradient( + +tests/test_stable_translog_estimation.py::test_endogenous_carry_forward_substeps_accept_stable_translog + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:187: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglikeobs() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 187 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + TypeError: Cannot interpret 'ScalarT' as a data type + + The above exception was the direct cause of the following exception: + + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + beartype.roar.BeartypeDecorHintNonpepNumpyException: Function skillmodels.chs.process_debug_data._convert_state_array_to_df() parameter "arr" NumPy data type ScalarT invalid (i.e., neither data type nor coercible into data type). + + def loglikeobs(params: pd.DataFrame) -> NDArray[np.floating]: + +tests/test_stable_translog_estimation.py::test_endogenous_carry_forward_substeps_accept_stable_translog + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:191: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglike_and_gradient() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 191 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + TypeError: Cannot interpret 'ScalarT' as a data type + + The above exception was the direct cause of the following exception: + + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + beartype.roar.BeartypeDecorHintNonpepNumpyException: Function skillmodels.chs.process_debug_data._convert_state_array_to_df() parameter "arr" NumPy data type ScalarT invalid (i.e., neither data type nor coercible into data type). + + def loglike_and_gradient( + +tests/test_stable_translog_estimation.py::test_endogenous_carry_forward_substeps_accept_stable_translog + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:187: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglikeobs() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 187 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + TypeError: Cannot interpret 'ScalarT' as a data type + + The above exception was the direct cause of the following exception: + + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + beartype.roar.BeartypeDecorHintNonpepNumpyException: Function skillmodels.chs.process_debug_data._convert_state_array_to_df() parameter "arr" NumPy data type ScalarT invalid (i.e., neither data type nor coercible into data type). + + def loglikeobs(params: pd.DataFrame) -> NDArray[np.floating]: + +tests/test_stable_translog_estimation.py::test_endogenous_carry_forward_substeps_accept_stable_translog + /home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py:191: BeartypeClawDecorWarning: Function skillmodels.chs.maximization_inputs.get_maximization_inputs.loglike_and_gradient() in file "/home/hmg/econ/skillmodels-applications/skillmodels/src/skillmodels/chs/maximization_inputs.py" line 191 not decoratable by @beartype, as: + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 253, in make_numpy_dtype + dtype = numpy_dtype(dtype) # type: ignore[call-overload] + TypeError: Cannot interpret 'ScalarT' as a data type + + The above exception was the direct cause of the following exception: + + Traceback (most recent call last): + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 194, in code_check_return + ) = make_code_raiser_func_pith_check( # type: ignore[assignment] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + hint_sane, + ^^^^^^^^^^ + ...<2 lines>... + False, # <-- True only for parameters + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/checkmake.py", line 434, in make_code_raiser_func_pith_check + ) = make_check_expr(hint_sane, conf, cls_stack) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/code/codemain.py", line 747, in make_check_expr + hint_child_sane = hints_meta.sanify_hint_child( + hint_child) # type: ignore[arg-type] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/metadata/hint/hintsmeta.py", line 703, in sanify_hint_child + hint_child_sane = sanify_hint_child( + hint=hint_child_insane, + ...<3 lines>... + exception_prefix=self.exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 422, in sanify_hint_child + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 126, in generate_code + code_check_return = _code_check_return(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 245, in code_check_return + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<3 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapreturn.py", line 129, in code_check_return + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<2 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 224, in _callable_cached + raise exception # pyright: ignore + ^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 211, in _beartype_object_nonfatal + return _beartype_object_fatal(obj, conf=conf, **kwargs) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/decorcore.py", line 133, in _beartype_object_fatal + beartype_nontype(obj, **kwargs) # type: ignore[return-value] + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 313, in beartype_nontype + return beartype_func(obj, **kwargs) # type: ignore[return-value] + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/decornontype.py", line 402, in beartype_func + func_wrapper_code = generate_code(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/wrapmain.py", line 121, in generate_code + code_check_params = _code_check_args(decor_meta) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 423, in code_check_args + reraise_exception_placeholder( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + exception=exception, + ^^^^^^^^^^^^^^^^^^^^ + ...<9 lines>... + ), + ^^ + ) + ^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/error/utilerrraise.py", line 138, in reraise_exception_placeholder + raise exception.with_traceback(exception.__traceback__) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_decor/_nontype/_wrap/_wrapargs.py", line 263, in code_check_args + hint_sane = sanify_hint_root_func( + decor_meta=decor_meta, + ...<3 lines>... + exception_prefix=EXCEPTION_PLACEHOLDER, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/convmain.py", line 204, in sanify_hint_root_func + hint_sane = reduce_hint( + hint=hint, + ...<5 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 267, in reduce_hint + hint_or_sane_curr = hint_reducer( + hint=hint_curr, + ...<8 lines>... + exception_prefix=exception_prefix, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/redmain.py", line 558, in _reduce_hint_cached + hint_or_sane = hint_reducer_cached(hint, exception_prefix) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 251, in _callable_cached + raise exception + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/cache/utilcachecall.py", line 243, in _callable_cached + return_value = args_flat_to_return_value[args_flat] = func( + ~~~~^ + *args) + ^^^^^^ + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_check/convert/_reduce/_nonpep/api/redapinumpy.py", line 224, in reduce_hint_numpy_ndarray + hint_dtype = make_numpy_dtype( + dtype=hint_dtype_like, + exception_prefix=exception_prefix, + exception_cls=BeartypeDecorHintNonpepNumpyException, + ) + File "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/lib/python3.14/site-packages/beartype/_util/api/external/utilnumpy.py", line 261, in make_numpy_dtype + raise exception_cls( + ...<2 lines>... + ) from exception + beartype.roar.BeartypeDecorHintNonpepNumpyException: Function skillmodels.chs.process_debug_data._convert_state_array_to_df() parameter "arr" NumPy data type ScalarT invalid (i.e., neither data type nor coercible into data type). + + def loglike_and_gradient( + +-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html +============================== slowest durations =============================== +7.98s call tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_inside_scale] +7.97s call tests/test_stable_translog_estimation.py::test_contributions_and_gradient_match_same_law_reference[inputs_beyond_scale] +2.35s call tests/test_stable_translog.py::test_finite_tail_witness_and_limits +2.24s call tests/test_stable_translog_estimation.py::test_endogenous_carry_forward_substeps_accept_stable_translog +2.02s call tests/test_stable_translog.py::test_shape_order_permutations_and_parameter_basis[4] +1.88s call tests/test_stable_translog.py::test_shape_order_permutations_and_parameter_basis[3] +1.42s call tests/test_stable_translog_estimation.py::test_zero_nonlinear_params_reproduce_linear_filter +1.32s call tests/test_stable_translog.py::test_shape_order_permutations_and_parameter_basis[2] +1.21s call tests/test_stable_translog.py::test_derivatives_at_zero_clip_knee_and_tails +0.97s call tests/test_stable_translog.py::test_shape_order_permutations_and_parameter_basis[1] +0.80s call tests/test_stable_translog_dispatch.py::test_public_model_uses_clipped_values +0.49s call tests/test_transition_functions.py::test_log_ces_general +0.45s call tests/test_stable_translog.py::test_finite_power_overflow_neighborhood[0.5-4] +0.35s call tests/test_stable_translog.py::test_all_200_iterates_and_fixed_point +0.34s call tests/test_transition_functions.py::test_log_ces_af_matches_log_ces +0.29s call tests/test_transition_functions.py::test_log_ces_general_where_all_but_one_gammas_are_zero +0.27s call tests/test_transition_functions.py::test_where_all_but_one_gammas_are_zero +0.26s call tests/test_stable_translog.py::test_finite_power_overflow_neighborhood[9.0-8] +0.25s call tests/test_stable_translog.py::test_finite_power_overflow_neighborhood[3.0-4] +0.11s call tests/test_transition_functions.py::test_translog +0.10s call tests/test_transition_functions.py::test_linear +0.10s call tests/test_stable_translog.py::test_identity_and_name_companions +0.09s call tests/test_stable_translog.py::test_static_configuration_and_scaling[0.5-2] +0.07s call tests/test_stable_translog.py::test_static_configuration_and_scaling[9.0-8] +0.06s call tests/test_transition_functions.py::test_robust_translog +0.04s call tests/test_stable_translog.py::test_static_configuration_and_scaling[3.0-4] +0.03s call tests/test_transition_functions.py::test_translog_af_has_no_square_terms +0.02s call tests/test_transition_functions.py::test_constant +0.01s setup tests/test_stable_translog_dispatch.py::test_amn_resolver_returns_the_right_law +0.01s call tests/test_stable_translog.py::test_default_profile_fidelity_for_squares_and_interactions[1.0-0.01] +0.01s setup tests/test_stable_translog_dispatch.py::test_public_model_uses_clipped_values +0.01s setup tests/test_stable_translog_dispatch.py::test_af_public_validation_accepts_name + +(145 durations < 0.005s hidden. Use -vv to show these durations.) +======================= 59 passed, 26 warnings in 33.65s ======================= diff --git a/docs/superpowers/specs/2026-10-16-stable-translog-native-loglike-timing.json b/docs/superpowers/specs/2026-10-16-stable-translog-native-loglike-timing.json new file mode 100644 index 00000000..8d9bce21 --- /dev/null +++ b/docs/superpowers/specs/2026-10-16-stable-translog-native-loglike-timing.json @@ -0,0 +1,12 @@ +{ + "purpose": "Workload-level warm timing of the CHS likelihood-and-gradient on the estimation fixture (tests/test_missing_observed_factors.py _model(2, law, MOMENTS), nonlinear=0.05), translog versus stable_translog, identical data and parameters. Supplements the reviewer's kernel microbenchmark (native-resource-comparison.json), whose per-call cost is dominated by dispatch at the 10 microsecond scale.", + "command": "for law in translog stable_translog translog stable_translog; do zsh -ic \"cap pixi run -e tests-cpu python /time_loglike.py $law 200\"; done (one fresh process per run; first call includes compilation; warm = mean of 200 subsequent synchronized calls)", + "environment": {"host": "hmg-office", "python": "3.14.6", "jax": "0.10.2", "backend": "cpu", "x64": true, "git_head": "c2db3e9 + uncommitted test extensions (transition_functions.py unchanged)"}, + "runs": [ + {"law": "translog", "first_call_s": 2.1767721839969454, "warm_s_per_call": 0.002746073609996529, "calls": 200, "loglike": -205.37241222797343, "peak_gib": 0.594879150390625}, + {"law": "stable_translog", "first_call_s": 2.4540460919997713, "warm_s_per_call": 0.0018515510199904384, "calls": 200, "loglike": -204.14533290953568, "peak_gib": 0.6018753051757812}, + {"law": "translog", "first_call_s": 2.2977069899970957, "warm_s_per_call": 0.0026277104099972346, "calls": 200, "loglike": -205.37241222797343, "peak_gib": 0.5915603637695312}, + {"law": "stable_translog", "first_call_s": 2.2939079190000484, "warm_s_per_call": 0.0025074287799907325, "calls": 200, "loglike": -204.14533290953568, "peak_gib": 0.5972061157226562} + ], + "assessment": "Warm likelihood-and-gradient time per call: translog 2.75 / 2.63 ms, stable_translog 1.85 / 2.51 ms; the run-to-run spread of the same law (0.1 to 0.9 ms) exceeds the difference between laws. Peak RSS differs by about 1 percent. No workload-level runtime or memory regression is detectable at the 10 percent trigger." +} diff --git a/docs/superpowers/specs/2026-10-16-stable-translog-native-resource-comparison.json b/docs/superpowers/specs/2026-10-16-stable-translog-native-resource-comparison.json new file mode 100644 index 00000000..135e5cb9 --- /dev/null +++ b/docs/superpowers/specs/2026-10-16-stable-translog-native-resource-comparison.json @@ -0,0 +1,361 @@ +{ + "audited_baseline_ref": "94aa213d64955044c4afd436dd27af5e0f8852b1", + "audited_head_ref": "27ca5b486f6cbebfe19019943944a4cf4a390161", + "comparison": "Unchanged baseline translog evaluated at the installed head versus stable_translog, identical inputs. Confirm git revision and source hashes against the audited bundle before acceptance.", + "scope": "Offline resource evidence only; no repository edit and no automatic profile certification.", + "rows": [ + { + "law": "translog", + "workload": "three_factor_toy", + "fixture": { + "states": [ + [ + 2, + 0, + 0 + ], + [ + 0, + 3, + 0 + ], + [ + 0, + 0, + 4 + ], + [ + 0, + 0, + 0 + ], + [ + 1, + 1, + 1 + ], + [ + 0, + -3, + 0 + ], + [ + -1, + -1, + -1 + ], + [ + 1.5, + -2, + 1.8 + ], + [ + 12, + -34, + 48 + ] + ], + "params": [ + 0.2, + 0.1, + 0.12, + 0.08, + 0.04, + 0.05, + 0.05, + 0.03, + 0.06, + 0.04 + ], + "source": "tests/test_transition_functions.py:48-85" + }, + "input_digest": "98fa72cf530179543e802e861828741a83602249a35a4715a9976e81cada6e85", + "law_source_sha256": "8e837d61be13b3aba6a7461faa35c4fbf73b3d31171553cfd1d59e73543a8720", + "git_head": "c2db3e9b9d7902e714a3e79a5411e50ac81bd1a2", + "python": "3.14.6", + "jax": "0.10.2", + "host": "hmg-home", + "platform": "Linux-7.0.0-38-generic-x86_64-with-glibc2.43", + "backend": "cpu", + "dtype": "float64", + "x64": true, + "transformation": "jit(vmap(law, in_axes=(0,None))); one fixed shape per fresh process", + "first_call_seconds_including_compile": 0.09875379699951736, + "compile_seconds": null, + "compile_note": "First call includes execution and compilation; it is not isolated compiler time. Contract compile budget is not_applicable.", + "warm_calls": 1000, + "warm_seconds_total": 0.006773041997803375, + "warm_seconds_per_call": 6.773041997803375e-06, + "peak_host_gib_before_first_call": 0.35082244873046875, + "peak_host_gib_after_first_call": 0.38550567626953125, + "peak_host_gib_after_repeated_shape": 0.38550567626953125, + "peak_device_gib": null, + "executable_cache_entries": null, + "cache_note": "Same compiled callable and shapes reused. RSS checkpoints are observed; no private cache-counter API or cache-growth certification is used.", + "outputs": [ + 0.76, + 0.7000000000000001, + 1.32, + 0.04, + 0.7700000000000002, + 0.09999999999999995, + -0.07000000000000006, + 0.5730000000000001, + 76.72 + ], + "measurement_deviation": "Supplemental microbenchmark: one compilation-bearing first call, then one batch of synchronized warm calls; not zero-warmup pytest session time.", + "worker_wall_seconds": 2.371631663001608, + "worker_log": "docs/superpowers/specs/2026-10-16-stable-translog-native-resource-comparison.three_factor_toy.translog.log", + "command": [ + "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/bin/python", + "/tmp/claude-1000/-home-hmg-Dropbox-health-cognition-draft/f368457b-f0d1-419e-80f9-d3c98cf19bb0/scratchpad/rt3/benchmark_stable_translog.py", + "--worker-law", + "translog", + "--workload", + "three_factor_toy", + "--calls", + "1000" + ] + }, + { + "law": "stable_translog", + "workload": "three_factor_toy", + "fixture": { + "states": [ + [ + 2, + 0, + 0 + ], + [ + 0, + 3, + 0 + ], + [ + 0, + 0, + 4 + ], + [ + 0, + 0, + 0 + ], + [ + 1, + 1, + 1 + ], + [ + 0, + -3, + 0 + ], + [ + -1, + -1, + -1 + ], + [ + 1.5, + -2, + 1.8 + ], + [ + 12, + -34, + 48 + ] + ], + "params": [ + 0.2, + 0.1, + 0.12, + 0.08, + 0.04, + 0.05, + 0.05, + 0.03, + 0.06, + 0.04 + ], + "source": "tests/test_transition_functions.py:48-85" + }, + "input_digest": "98fa72cf530179543e802e861828741a83602249a35a4715a9976e81cada6e85", + "law_source_sha256": "6d97425e25dbb3b53b073b7fea594927e9e8e0bf2abcc5877a096245bf138e82", + "git_head": "c2db3e9b9d7902e714a3e79a5411e50ac81bd1a2", + "python": "3.14.6", + "jax": "0.10.2", + "host": "hmg-home", + "platform": "Linux-7.0.0-38-generic-x86_64-with-glibc2.43", + "backend": "cpu", + "dtype": "float64", + "x64": true, + "transformation": "jit(vmap(law, in_axes=(0,None))); one fixed shape per fresh process", + "first_call_seconds_including_compile": 0.09894447899932857, + "compile_seconds": null, + "compile_note": "First call includes execution and compilation; it is not isolated compiler time. Contract compile budget is not_applicable.", + "warm_calls": 1000, + "warm_seconds_total": 0.01125535699975444, + "warm_seconds_per_call": 1.125535699975444e-05, + "peak_host_gib_before_first_call": 0.351104736328125, + "peak_host_gib_after_first_call": 0.394439697265625, + "peak_host_gib_after_repeated_shape": 0.394439697265625, + "peak_device_gib": null, + "executable_cache_entries": null, + "cache_note": "Same compiled callable and shapes reused. RSS checkpoints are observed; no private cache-counter API or cache-growth certification is used.", + "outputs": [ + 0.7324196955584823, + 0.5945584412271572, + 0.9122089917060472, + 0.04, + 0.768103957748822, + -0.0054415587728429485, + -0.0718960422511781, + 0.5651273806259308, + 5.608774892295967 + ], + "measurement_deviation": "Supplemental microbenchmark: one compilation-bearing first call, then one batch of synchronized warm calls; not zero-warmup pytest session time.", + "worker_wall_seconds": 2.3636887510001543, + "worker_log": "docs/superpowers/specs/2026-10-16-stable-translog-native-resource-comparison.three_factor_toy.stable_translog.log", + "command": [ + "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/bin/python", + "/tmp/claude-1000/-home-hmg-Dropbox-health-cognition-draft/f368457b-f0d1-419e-80f9-d3c98cf19bb0/scratchpad/rt3/benchmark_stable_translog.py", + "--worker-law", + "stable_translog", + "--workload", + "three_factor_toy", + "--calls", + "1000" + ] + }, + { + "law": "translog", + "workload": "run_e_one_factor", + "fixture": { + "states": [ + [ + -3.0 + ] + ], + "params": [ + 0.769, + -0.103, + -0.003 + ], + "source": "profile contract: one-factor run-E coefficients and starting state; pointwise evaluation, not a 200-step timing" + }, + "input_digest": "cf6ced577650c9b312d4df90a25ef46a8ff240734b07f1a7e228bfbca6920875", + "law_source_sha256": "8e837d61be13b3aba6a7461faa35c4fbf73b3d31171553cfd1d59e73543a8720", + "git_head": "c2db3e9b9d7902e714a3e79a5411e50ac81bd1a2", + "python": "3.14.6", + "jax": "0.10.2", + "host": "hmg-home", + "platform": "Linux-7.0.0-38-generic-x86_64-with-glibc2.43", + "backend": "cpu", + "dtype": "float64", + "x64": true, + "transformation": "jit(vmap(law, in_axes=(0,None))); one fixed shape per fresh process", + "first_call_seconds_including_compile": 0.026321515997551614, + "compile_seconds": null, + "compile_note": "First call includes execution and compilation; it is not isolated compiler time. Contract compile budget is not_applicable.", + "warm_calls": 1000, + "warm_seconds_total": 0.0065096619982796255, + "warm_seconds_per_call": 6.509661998279625e-06, + "peak_host_gib_before_first_call": 0.35112762451171875, + "peak_host_gib_after_first_call": 0.3673057556152344, + "peak_host_gib_after_repeated_shape": 0.3673057556152344, + "peak_device_gib": null, + "executable_cache_entries": null, + "cache_note": "Same compiled callable and shapes reused. RSS checkpoints are observed; no private cache-counter API or cache-growth certification is used.", + "outputs": [ + -3.237 + ], + "measurement_deviation": "Supplemental microbenchmark: one compilation-bearing first call, then one batch of synchronized warm calls; not zero-warmup pytest session time.", + "worker_wall_seconds": 2.3440196759984246, + "worker_log": "docs/superpowers/specs/2026-10-16-stable-translog-native-resource-comparison.run_e_one_factor.translog.log", + "command": [ + "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/bin/python", + "/tmp/claude-1000/-home-hmg-Dropbox-health-cognition-draft/f368457b-f0d1-419e-80f9-d3c98cf19bb0/scratchpad/rt3/benchmark_stable_translog.py", + "--worker-law", + "translog", + "--workload", + "run_e_one_factor", + "--calls", + "1000" + ] + }, + { + "law": "stable_translog", + "workload": "run_e_one_factor", + "fixture": { + "states": [ + [ + -3.0 + ] + ], + "params": [ + 0.769, + -0.103, + -0.003 + ], + "source": "profile contract: one-factor run-E coefficients and starting state; pointwise evaluation, not a 200-step timing" + }, + "input_digest": "cf6ced577650c9b312d4df90a25ef46a8ff240734b07f1a7e228bfbca6920875", + "law_source_sha256": "6d97425e25dbb3b53b073b7fea594927e9e8e0bf2abcc5877a096245bf138e82", + "git_head": "c2db3e9b9d7902e714a3e79a5411e50ac81bd1a2", + "python": "3.14.6", + "jax": "0.10.2", + "host": "hmg-home", + "platform": "Linux-7.0.0-38-generic-x86_64-with-glibc2.43", + "backend": "cpu", + "dtype": "float64", + "x64": true, + "transformation": "jit(vmap(law, in_axes=(0,None))); one fixed shape per fresh process", + "first_call_seconds_including_compile": 0.060867508000228554, + "compile_seconds": null, + "compile_note": "First call includes execution and compilation; it is not isolated compiler time. Contract compile budget is not_applicable.", + "warm_calls": 1000, + "warm_seconds_total": 0.006817727000452578, + "warm_seconds_per_call": 6.817727000452578e-06, + "peak_host_gib_before_first_call": 0.3510246276855469, + "peak_host_gib_after_first_call": 0.3809814453125, + "peak_host_gib_after_repeated_shape": 0.3809814453125, + "peak_device_gib": null, + "executable_cache_entries": null, + "cache_note": "Same compiled callable and shapes reused. RSS checkpoints are observed; no private cache-counter API or cache-growth certification is used.", + "outputs": [ + -2.9654879861599297 + ], + "measurement_deviation": "Supplemental microbenchmark: one compilation-bearing first call, then one batch of synchronized warm calls; not zero-warmup pytest session time.", + "worker_wall_seconds": 2.2712926040003367, + "worker_log": "docs/superpowers/specs/2026-10-16-stable-translog-native-resource-comparison.run_e_one_factor.stable_translog.log", + "command": [ + "/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/bin/python", + "/tmp/claude-1000/-home-hmg-Dropbox-health-cognition-draft/f368457b-f0d1-419e-80f9-d3c98cf19bb0/scratchpad/rt3/benchmark_stable_translog.py", + "--worker-law", + "stable_translog", + "--workload", + "run_e_one_factor", + "--calls", + "1000" + ] + } + ], + "comparisons": [ + { + "workload": "three_factor_toy", + "warm_runtime_ratio": 1.6617875695152582, + "peak_host_ratio": 1.0231748105048586, + "interpretation": "Review existing 10% repair triggers and 3% noise floor. One repetition is not a significance claim; do not invent a waiver." + }, + { + "workload": "run_e_one_factor", + "warm_runtime_ratio": 1.0473242700242145, + "peak_host_ratio": 1.0372324405163729, + "interpretation": "Review existing 10% repair triggers and 3% noise floor. One repetition is not a significance claim; do not invent a waiver." + } + ], + "remaining_contract_checks": "Retain the fresh-process unit-module and CI reports; preserve their explicit timing waivers. Align this supplemental warmed comparison with the declared measurement protocol before issuing resource acceptance." +} diff --git a/docs/superpowers/specs/2026-10-16-stable-translog-native-resource-comparison.run_e_one_factor.stable_translog.log b/docs/superpowers/specs/2026-10-16-stable-translog-native-resource-comparison.run_e_one_factor.stable_translog.log new file mode 100644 index 00000000..bc388884 --- /dev/null +++ b/docs/superpowers/specs/2026-10-16-stable-translog-native-resource-comparison.run_e_one_factor.stable_translog.log @@ -0,0 +1,4 @@ +COMMAND: ['/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/bin/python', '/tmp/claude-1000/-home-hmg-Dropbox-health-cognition-draft/f368457b-f0d1-419e-80f9-d3c98cf19bb0/scratchpad/rt3/benchmark_stable_translog.py', '--worker-law', 'stable_translog', '--workload', 'run_e_one_factor', '--calls', '1000'] +AUDIT_RESOURCE_JSON={"law": "stable_translog", "workload": "run_e_one_factor", "fixture": {"states": [[-3.0]], "params": [0.769, -0.103, -0.003], "source": "profile contract: one-factor run-E coefficients and starting state; pointwise evaluation, not a 200-step timing"}, "input_digest": "cf6ced577650c9b312d4df90a25ef46a8ff240734b07f1a7e228bfbca6920875", "law_source_sha256": "6d97425e25dbb3b53b073b7fea594927e9e8e0bf2abcc5877a096245bf138e82", "git_head": "c2db3e9b9d7902e714a3e79a5411e50ac81bd1a2", "python": "3.14.6", "jax": "0.10.2", "host": "hmg-home", "platform": "Linux-7.0.0-38-generic-x86_64-with-glibc2.43", "backend": "cpu", "dtype": "float64", "x64": true, "transformation": "jit(vmap(law, in_axes=(0,None))); one fixed shape per fresh process", "first_call_seconds_including_compile": 0.060867508000228554, "compile_seconds": null, "compile_note": "First call includes execution and compilation; it is not isolated compiler time. Contract compile budget is not_applicable.", "warm_calls": 1000, "warm_seconds_total": 0.006817727000452578, "warm_seconds_per_call": 6.817727000452578e-06, "peak_host_gib_before_first_call": 0.3510246276855469, "peak_host_gib_after_first_call": 0.3809814453125, "peak_host_gib_after_repeated_shape": 0.3809814453125, "peak_device_gib": null, "executable_cache_entries": null, "cache_note": "Same compiled callable and shapes reused. RSS checkpoints are observed; no private cache-counter API or cache-growth certification is used.", "outputs": [-2.9654879861599297], "measurement_deviation": "Supplemental microbenchmark: one compilation-bearing first call, then one batch of synchronized warm calls; not zero-warmup pytest session time."} + +STDERR: diff --git a/docs/superpowers/specs/2026-10-16-stable-translog-native-resource-comparison.run_e_one_factor.translog.log b/docs/superpowers/specs/2026-10-16-stable-translog-native-resource-comparison.run_e_one_factor.translog.log new file mode 100644 index 00000000..b55bd9d2 --- /dev/null +++ b/docs/superpowers/specs/2026-10-16-stable-translog-native-resource-comparison.run_e_one_factor.translog.log @@ -0,0 +1,4 @@ +COMMAND: ['/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/bin/python', '/tmp/claude-1000/-home-hmg-Dropbox-health-cognition-draft/f368457b-f0d1-419e-80f9-d3c98cf19bb0/scratchpad/rt3/benchmark_stable_translog.py', '--worker-law', 'translog', '--workload', 'run_e_one_factor', '--calls', '1000'] +AUDIT_RESOURCE_JSON={"law": "translog", "workload": "run_e_one_factor", "fixture": {"states": [[-3.0]], "params": [0.769, -0.103, -0.003], "source": "profile contract: one-factor run-E coefficients and starting state; pointwise evaluation, not a 200-step timing"}, "input_digest": "cf6ced577650c9b312d4df90a25ef46a8ff240734b07f1a7e228bfbca6920875", "law_source_sha256": "8e837d61be13b3aba6a7461faa35c4fbf73b3d31171553cfd1d59e73543a8720", "git_head": "c2db3e9b9d7902e714a3e79a5411e50ac81bd1a2", "python": "3.14.6", "jax": "0.10.2", "host": "hmg-home", "platform": "Linux-7.0.0-38-generic-x86_64-with-glibc2.43", "backend": "cpu", "dtype": "float64", "x64": true, "transformation": "jit(vmap(law, in_axes=(0,None))); one fixed shape per fresh process", "first_call_seconds_including_compile": 0.026321515997551614, "compile_seconds": null, "compile_note": "First call includes execution and compilation; it is not isolated compiler time. Contract compile budget is not_applicable.", "warm_calls": 1000, "warm_seconds_total": 0.0065096619982796255, "warm_seconds_per_call": 6.509661998279625e-06, "peak_host_gib_before_first_call": 0.35112762451171875, "peak_host_gib_after_first_call": 0.3673057556152344, "peak_host_gib_after_repeated_shape": 0.3673057556152344, "peak_device_gib": null, "executable_cache_entries": null, "cache_note": "Same compiled callable and shapes reused. RSS checkpoints are observed; no private cache-counter API or cache-growth certification is used.", "outputs": [-3.237], "measurement_deviation": "Supplemental microbenchmark: one compilation-bearing first call, then one batch of synchronized warm calls; not zero-warmup pytest session time."} + +STDERR: diff --git a/docs/superpowers/specs/2026-10-16-stable-translog-native-resource-comparison.three_factor_toy.stable_translog.log b/docs/superpowers/specs/2026-10-16-stable-translog-native-resource-comparison.three_factor_toy.stable_translog.log new file mode 100644 index 00000000..89cf37b9 --- /dev/null +++ b/docs/superpowers/specs/2026-10-16-stable-translog-native-resource-comparison.three_factor_toy.stable_translog.log @@ -0,0 +1,4 @@ +COMMAND: ['/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/bin/python', '/tmp/claude-1000/-home-hmg-Dropbox-health-cognition-draft/f368457b-f0d1-419e-80f9-d3c98cf19bb0/scratchpad/rt3/benchmark_stable_translog.py', '--worker-law', 'stable_translog', '--workload', 'three_factor_toy', '--calls', '1000'] +AUDIT_RESOURCE_JSON={"law": "stable_translog", "workload": "three_factor_toy", "fixture": {"states": [[2, 0, 0], [0, 3, 0], [0, 0, 4], [0, 0, 0], [1, 1, 1], [0, -3, 0], [-1, -1, -1], [1.5, -2, 1.8], [12, -34, 48]], "params": [0.2, 0.1, 0.12, 0.08, 0.04, 0.05, 0.05, 0.03, 0.06, 0.04], "source": "tests/test_transition_functions.py:48-85"}, "input_digest": "98fa72cf530179543e802e861828741a83602249a35a4715a9976e81cada6e85", "law_source_sha256": "6d97425e25dbb3b53b073b7fea594927e9e8e0bf2abcc5877a096245bf138e82", "git_head": "c2db3e9b9d7902e714a3e79a5411e50ac81bd1a2", "python": "3.14.6", "jax": "0.10.2", "host": "hmg-home", "platform": "Linux-7.0.0-38-generic-x86_64-with-glibc2.43", "backend": "cpu", "dtype": "float64", "x64": true, "transformation": "jit(vmap(law, in_axes=(0,None))); one fixed shape per fresh process", "first_call_seconds_including_compile": 0.09894447899932857, "compile_seconds": null, "compile_note": "First call includes execution and compilation; it is not isolated compiler time. Contract compile budget is not_applicable.", "warm_calls": 1000, "warm_seconds_total": 0.01125535699975444, "warm_seconds_per_call": 1.125535699975444e-05, "peak_host_gib_before_first_call": 0.351104736328125, "peak_host_gib_after_first_call": 0.394439697265625, "peak_host_gib_after_repeated_shape": 0.394439697265625, "peak_device_gib": null, "executable_cache_entries": null, "cache_note": "Same compiled callable and shapes reused. RSS checkpoints are observed; no private cache-counter API or cache-growth certification is used.", "outputs": [0.7324196955584823, 0.5945584412271572, 0.9122089917060472, 0.04, 0.768103957748822, -0.0054415587728429485, -0.0718960422511781, 0.5651273806259308, 5.608774892295967], "measurement_deviation": "Supplemental microbenchmark: one compilation-bearing first call, then one batch of synchronized warm calls; not zero-warmup pytest session time."} + +STDERR: diff --git a/docs/superpowers/specs/2026-10-16-stable-translog-native-resource-comparison.three_factor_toy.translog.log b/docs/superpowers/specs/2026-10-16-stable-translog-native-resource-comparison.three_factor_toy.translog.log new file mode 100644 index 00000000..3999afb4 --- /dev/null +++ b/docs/superpowers/specs/2026-10-16-stable-translog-native-resource-comparison.three_factor_toy.translog.log @@ -0,0 +1,4 @@ +COMMAND: ['/home/hmg/econ/skillmodels-applications/skillmodels/.pixi/envs/tests-cpu/bin/python', '/tmp/claude-1000/-home-hmg-Dropbox-health-cognition-draft/f368457b-f0d1-419e-80f9-d3c98cf19bb0/scratchpad/rt3/benchmark_stable_translog.py', '--worker-law', 'translog', '--workload', 'three_factor_toy', '--calls', '1000'] +AUDIT_RESOURCE_JSON={"law": "translog", "workload": "three_factor_toy", "fixture": {"states": [[2, 0, 0], [0, 3, 0], [0, 0, 4], [0, 0, 0], [1, 1, 1], [0, -3, 0], [-1, -1, -1], [1.5, -2, 1.8], [12, -34, 48]], "params": [0.2, 0.1, 0.12, 0.08, 0.04, 0.05, 0.05, 0.03, 0.06, 0.04], "source": "tests/test_transition_functions.py:48-85"}, "input_digest": "98fa72cf530179543e802e861828741a83602249a35a4715a9976e81cada6e85", "law_source_sha256": "8e837d61be13b3aba6a7461faa35c4fbf73b3d31171553cfd1d59e73543a8720", "git_head": "c2db3e9b9d7902e714a3e79a5411e50ac81bd1a2", "python": "3.14.6", "jax": "0.10.2", "host": "hmg-home", "platform": "Linux-7.0.0-38-generic-x86_64-with-glibc2.43", "backend": "cpu", "dtype": "float64", "x64": true, "transformation": "jit(vmap(law, in_axes=(0,None))); one fixed shape per fresh process", "first_call_seconds_including_compile": 0.09875379699951736, "compile_seconds": null, "compile_note": "First call includes execution and compilation; it is not isolated compiler time. Contract compile budget is not_applicable.", "warm_calls": 1000, "warm_seconds_total": 0.006773041997803375, "warm_seconds_per_call": 6.773041997803375e-06, "peak_host_gib_before_first_call": 0.35082244873046875, "peak_host_gib_after_first_call": 0.38550567626953125, "peak_host_gib_after_repeated_shape": 0.38550567626953125, "peak_device_gib": null, "executable_cache_entries": null, "cache_note": "Same compiled callable and shapes reused. RSS checkpoints are observed; no private cache-counter API or cache-growth certification is used.", "outputs": [0.76, 0.7000000000000001, 1.32, 0.04, 0.7700000000000002, 0.09999999999999995, -0.07000000000000006, 0.5730000000000001, 76.72], "measurement_deviation": "Supplemental microbenchmark: one compilation-bearing first call, then one batch of synchronized warm calls; not zero-warmup pytest session time."} + +STDERR: diff --git a/docs/superpowers/specs/2026-10-16-stable-translog-native-resource-report.json b/docs/superpowers/specs/2026-10-16-stable-translog-native-resource-report.json new file mode 100644 index 00000000..fdb54d21 --- /dev/null +++ b/docs/superpowers/specs/2026-10-16-stable-translog-native-resource-report.json @@ -0,0 +1,37 @@ +[ + { + "ref": "94aa213", + "target": "tests/test_transition_functions.py", + "wall_seconds": 5.27, + "ru_maxrss_children_gib": 0.497, + "returncode": 0, + "summary": "25 passed, 2 warnings in 2.23s", + "measurement": "fresh process, zero warmups, single repetition" + }, + { + "ref": "671f596", + "target": "tests/test_transition_functions.py", + "wall_seconds": 5.24, + "ru_maxrss_children_gib": 0.498, + "returncode": 0, + "summary": "26 passed, 2 warnings in 2.26s", + "measurement": "fresh process, zero warmups, single repetition" + }, + { + "ref": "671f596", + "target": "tests -m 'not long_running' -n 2 (full suite, Task 5)", + "command": "zsh -ic \"cap /usr/bin/time -v pixi run -e tests-cpu pytest tests -m 'not long_running' -v -p no:cacheprovider -n 2 --durations=20\"", + "wall_seconds": 1185.36, + "pytest_session_seconds": 1182.07, + "max_rss_gib": 6.237, + "max_rss_source": "/usr/bin/time -v, largest single process", + "returncode": 0, + "summary": "871 passed, 282 warnings in 1182.07s", + "measurement": "fresh process, zero warmups, single repetition", + "host": "hmg-home", + "python": "3.14.6", + "jax": "0.10.2", + "dtype": "float64 (enabled by skillmodels at import)", + "budget_note": "exceeds full-CI budget of 900 s; dominated by pre-existing tests/test_chs_estimate.py (250.8 s, 233.3 s, 233.0 s); no base full-suite run for comparison" + } +] diff --git a/docs/superpowers/specs/stable-translog-audit/reference.py b/docs/superpowers/specs/stable-translog-audit/reference.py new file mode 100644 index 00000000..8220ac38 --- /dev/null +++ b/docs/superpowers/specs/stable-translog-audit/reference.py @@ -0,0 +1,208 @@ +"""Independent scalar reference for the stable_translog design audit. + +No project imports and no emulation of JAX execution. Decimal evaluates the original +real equation, not the normalized expression proposed for production. Fractions give +exact counterexamples to dynamical claims. Running this file tests mathematical +claims only, never native skillmodels/XLA behavior. +""" +from __future__ import annotations + +import json +import math +import sys +from decimal import Decimal, localcontext +from fractions import Fraction as Q +from itertools import combinations +from typing import Sequence + + +def dec(x: object) -> Decimal: + return x if isinstance(x, Decimal) else Decimal(str(x)) + + +def clip(x: object, scale: object = 3, power: int = 4) -> Decimal: + """Original equation in 90-digit arithmetic; finite, positive scale, even p.""" + x, s = dec(x), dec(scale) + if not s.is_finite() or s <= 0 or type(power) is not int or power < 2 or power % 2: + raise ValueError('positive finite scale and even integer power >=2 required') + if x.is_nan(): + return x + if x.is_infinite(): + return s.copy_sign(x) + with localcontext() as ctx: + ctx.prec = 90 + ctx.Emax = 9999999 + ctx.Emin = -9999999 + return +(x / (1 + abs(x / s) ** power) ** (Decimal(1) / power)) + + +def transition(states: Sequence[object], params: Sequence[object], + scale: object = 3, power: int = 4) -> Decimal: + n = len(states) + if len(params) != 2 * n + n * (n - 1) // 2 + 1: + raise ValueError('parameter count does not match the translog layout') + with localcontext() as ctx: + ctx.prec = 90 + x, b = list(map(dec, states)), list(map(dec, params)) + g = [clip(v, scale, power) for v in x] + ans = b[-1] + sum((x[j] * b[j] for j in range(n)), Decimal(0)) + ans += sum((g[j] ** 2 * b[n+j] for j in range(n)), Decimal(0)) + for k, (a, z) in enumerate(combinations(range(n), 2)): + ans += b[2*n+k] * g[a] * g[z] + return +ans + + +def clip_derivative(x: object, scale: object = 3, power: int = 4) -> Decimal: + with localcontext() as ctx: + ctx.prec = 90 + q = abs(dec(x) / dec(scale)) ** power + return +(1 + q) ** (-Decimal(1) - Decimal(1) / power) + + +def matvec(a, x): + return tuple(sum((v * w for v, w in zip(row, x)), Q(0)) for row in a) + + +def matmul(a, b): + return tuple(tuple(sum((a[i][k]*b[k][j] for k in range(len(b))), Q(0)) + for j in range(len(b[0]))) for i in range(len(a))) + + +def stability_witnesses(): + # Bounded exogenous forcing: x[t+1] = -a*x[t] + z[t]. + inverse_gain = [] + for a in (Q(1, 4), Q(1, 2), Q(3, 4), Q(7, 8)): + x = -1 / (1-a) + amplitude = abs(x) + for t in range(12): + x = -a*x + (-1)**t + assert abs(x) == amplitude + assert amplitude > 1 / (1+a) + inverse_gain.append({'a': str(a), 'true_amplitude': str(amplitude), + 'claimed_inverse_gain': str(1/(1+a))}) + # Each matrix has eigenvalues a,a. Their product has an eigenvalue >1. + switching = [] + for a, b in ((Q(1, 2), Q(1)), (Q(3, 4), Q(1, 2)), (Q(1, 4), Q(1))): + aa = ((a,b),(Q(0),a)); ab = ((a,Q(0)),(b,a)) + product = matmul(ab, aa) + det_i_minus = (1-product[0][0])*(1-product[1][1])-product[0][1]*product[1][0] + assert det_i_minus == (1-a*a)**2-b*b < 0 + x = (Q(1),Q(1)) + for _ in range(50): + x = matvec(product,x) + assert max(x) > 1 + switching.append({'a': str(a),'b':str(b),'det(I-product)':str(det_i_minus), + 'max_state_after_100_steps':float(max(x))}) + # Reported entry bounds do not certify rho(A)<1. + a = tuple(tuple(Q(17,20) if i==j else Q(3,25) for j in range(4)) for i in range(4)) + assert matvec(a,(Q(1),)*4) == (Q(121,100),)*4 + # Default cf=i-prediction can already change the linear stability condition. + x, investment, first_stage, kappa = Q(2), Q(0), Q(1), Q(-1) + base = Q(1,2)*x + composed = base + kappa*(investment-first_stage*x) + assert composed == Q(3,2)*x + return {'bounded_input_inverse_gain':inverse_gain,'switched_schur_family':switching, + 'small_entry_matrix_eigenvalue':'121/100', + 'control_function_effective_own_coefficient':'3/2'} + + +def default_certificate(): + """Prove root uniqueness by a global inequality, not a sign-change grid. + + For z=-x>0, H(z)=f(-z)+z=-d+a*z-b*z^2/sqrt(1+(z/s)^4). + z/sqrt(1+(z/s)^4)<=s/sqrt(2). Thus H(z)>=m*z-d. + For z>=1/4 this is positive, while on [0,1/4], H'>=a-2*b/4>0. + Positive x cannot be fixed. A separate derivative bound proves f increasing, + hence monotone convergence to the unique fixed point from every finite start. + """ + with localcontext() as ctx: + ctx.prec = 90 + a,b,d,s = map(Decimal,('0.231','0.103','0.003','3')) + margin = a - b*s/Decimal(2).sqrt() + cut = Decimal('0.25') + assert margin*cut > d + assert a - 2*b*cut > 0 + zmax = s / Decimal(5) ** Decimal('0.25') + max_ggprime = zmax / (Decimal('1.2') ** Decimal('1.5')) + min_fprime = Decimal('0.769') - 2*b*max_ggprime + assert min_fprime > 0 + lo,hi = Decimal(0),cut + for _ in range(240): + z = (lo+hi)/2 + h = -d+a*z-b*clip(z)**2 + if h < 0: lo=z + else: hi=z + root = -(lo+hi)/2 + residual = transition([root],['0.769','-0.103','-0.003'])-root + assert abs(residual) < Decimal('1e-65') + x = Decimal(-3); maximum=abs(x) + for _ in range(200): + next_x=transition([x],['0.769','-0.103','-0.003']) + assert x <= next_x <= root + Decimal('1e-65') + x=next_x; maximum=max(maximum,abs(x)) + fidelity={str(v):str(1-(clip(v)/v)**2) for v in map(Decimal,('1','2','2.5'))} + assert Decimal(fidelity['1']) <= Decimal('.01') + assert Decimal(fidelity['2']) <= Decimal('.1') + # The same proof covers this deliberate neighborhood around the default. + for bs in ('0.1025','0.103','0.1035'): + bb=Decimal(bs) + assert (a-bb*s/Decimal(2).sqrt())*Decimal('0.5')>d + assert a-2*bb*Decimal('0.5')>0 + return {'fidelity':fidelity,'fixed_point':str(root),'fixed_point_count':1, + 'fixed_point_residual':str(residual),'sup_0_through_200':str(maximum), + 'state_at_200':str(x),'root_margin':str(margin), + 'global_lower_bound_fprime':str(min_fprime)} + + +def integration_diagnostics(): + # An explicitly illustrative 9-dimensional spherical-radial sigma rule: + # weights 1/(2d), nodes +/-sqrt(d)*e_j, mu=0, P=I. NOT a claim about CHS weights. + d=9 + nodes=[] + for j in range(d): + for sign in (-1,1): + x=[Decimal(0)]*d; x[j]=Decimal(sign)*Decimal(d).sqrt(); nodes.append(x) + mean_tl=sum((x[0]**2 for x in nodes),Decimal(0))/len(nodes) + mean_st=sum((clip(x[0])**2 for x in nodes),Decimal(0))/len(nodes) + assert mean_tl==1 + assert mean_st < Decimal('.71') + # Changing only the stable_translog default scale to 2.5 is not pinned by + # the planned small-state/full-output test; it does violate the contract at 2. + params=['.2','.1','.12','.08','.04','.05','.05','.03','.06','.04'] + state=['.3','-.5','.8'] + tl=transition(state,params,scale=Decimal('1e20')) + mutated=transition(state,params,scale='2.5') + assert abs(mutated-tl)Decimal('.1') + return {'illustrative_sigma_rule':'d=9, +/-sqrt(d)e_j, weights 1/(2d)', + 'sigma_mean_translog_square':str(mean_tl),'sigma_mean_stable_square':str(mean_st), + 'default_scale_mutant_2.5_error_at_2':str(bad_fidelity), + 'mutant_small_state_absolute_error':str(abs(mutated-tl)), + 'bypass_loglike_ratio':'0 for any finite nonzero baseline loglike if stable dispatch aliases translog'} + + +def overflow_witness(): + x=Decimal('1e80'); scale=Decimal(3) + with localcontext() as ctx: + ctx.prec=90 + internal=(x/scale)**4 + assert math.isfinite(float(x)) + assert internal>Decimal.from_float(sys.float_info.max) + expected=transition([x],[0,1,0]) + assert abs(expected-9)2.0 # An alias to translog must fail. + + +def test_af_public_validation_accepts_name(model_and_processed): + model,_=model_and_processed + validate_af_model(model) diff --git a/docs/superpowers/specs/stable-translog-audit/test_kernel.py b/docs/superpowers/specs/stable-translog-audit/test_kernel.py new file mode 100644 index 00000000..2ddc6a97 --- /dev/null +++ b/docs/superpowers/specs/stable-translog-audit/test_kernel.py @@ -0,0 +1,174 @@ +"""Native acceptance tests. Run in the project's Python 3.14 pixi environment. + +These are NOT executed by the reviewer. They import the real implementation; they +never substitute a shim. The only required numerical profile is CPU float64. +""" +from __future__ import annotations + +import math +import sys +from functools import partial +from itertools import combinations +from pathlib import Path + +import pytest + +if sys.version_info[:2] != (3, 14): + raise RuntimeError('Native audit tests require the declared Python 3.14 environment.') + +import jax +import jax.numpy as jnp +import numpy as np +from numpy.testing import assert_allclose, assert_array_equal +from skillmodels.common import transition_functions as tf + +sys.path.insert(0, str(Path(__file__).resolve().parents[1])) +from audit_oracles.reference import clip, clip_derivative, transition + +jax.config.update('jax_enable_x64', True) + + +@pytest.fixture(scope='module') +def api(): + # Absence is a failure, not a skip. This suite is for the implemented proposal. + assert callable(getattr(tf, 'stable_translog', None)) + assert callable(getattr(tf, '_soft_clip', None)) + f = tf.stable_translog + return f, jax.jit(f), jax.jit(jax.vmap(f, in_axes=(0, None))) + + +def test_finite_tail_witness_and_limits(api): + f, compiled, batch = api + x = jnp.array([[-1e80], [-1e76], [-50.0], [0.0], [50.0], [1e76], [1e80]]) + p = jnp.array([0.0, 1.0, 0.0]) + expected = np.array([float(transition(row, p)) for row in np.asarray(x)]) + assert_allclose(batch(x, p), expected, rtol=3e-14, atol=2e-14) + assert_allclose(compiled(jnp.array([1e80]), p), 9.0, rtol=3e-14) + assert_allclose(f(jnp.array([-1e80]), p), 9.0, rtol=3e-14) + q = tf._soft_clip(x[:, 0], 3.0, 4) + assert bool(jnp.all(jnp.isfinite(q))) + assert bool(jnp.all(jnp.diff(q) >= 0)) + assert bool(jnp.all(jnp.abs(q) <= 3.0 + 3e-14)) + assert_allclose(tf._soft_clip(jnp.array([jnp.inf, -jnp.inf]), 3.0, 4), [3.0, -3.0]) + assert bool(jnp.isnan(tf._soft_clip(jnp.array(jnp.nan), 3.0, 4))) + # Recovering a helper's limit does not promise to recover nonfinite linear input. + assert not bool(jnp.isfinite(f(jnp.array([jnp.inf]), jnp.array([1., 0., 0.])))) + + +@pytest.mark.parametrize('n', [1, 2, 3, 4]) +def test_shape_order_permutations_and_parameter_basis(api, n): + f, compiled, batch = api + rng = np.random.default_rng(0) + states = rng.uniform(-6, 6, size=(8, n)) + k = 2*n+n*(n-1)//2+1 + params = rng.normal(size=k) + expected = np.array([float(transition(row, params)) for row in states]) + assert_allclose(batch(jnp.asarray(states), jnp.asarray(params)), expected, + rtol=4e-13, atol=4e-13) + assert_allclose(compiled(jnp.asarray(states[0]), jnp.asarray(params)), expected[0], + rtol=4e-13, atol=4e-13) + # Isolate every coefficient at one asymmetric state. No large linear subtraction. + x = np.arange(1, n+1, dtype=float)*1.1 + basis_expected = np.array([float(transition(x, row)) for row in np.eye(k)]) + values = jax.vmap(f, in_axes=(None, 0))(jnp.asarray(x), jnp.eye(k)) + assert_allclose(values, basis_expected, rtol=4e-13, atol=4e-13) + # Simultaneously relabel states and coefficients: numerical output is invariant. + pairs = list(combinations(range(n), 2)) + permutation = list(reversed(range(n))) + perm_params = np.zeros(k) + for new, old in enumerate(permutation): + perm_params[new] = params[old] + perm_params[n+new] = params[n+old] + for j, (a,b) in enumerate(pairs): + old_pair = tuple(sorted((permutation[a], permutation[b]))) + perm_params[2*n+j] = params[2*n+pairs.index(old_pair)] + perm_params[-1] = params[-1] + assert_allclose(f(jnp.asarray(states[0, permutation]), jnp.asarray(perm_params)), + expected[0], rtol=4e-13, atol=4e-13) + + +@pytest.mark.parametrize('x,budget', [(1.0, .01), (2.0, .10)]) +def test_default_profile_fidelity_for_squares_and_interactions(api, x, budget): + f = api[0] + square = float(f(jnp.array([x]), jnp.array([0., 1., 0.]))) + cross = float(f(jnp.array([x, -x]), jnp.array([0., 0., 0., 0., 1., 0.]))) + assert abs(square-x*x)/(x*x) <= budget + assert abs(cross+x*x)/(x*x) <= budget + # Checks the actual default equation, not just a loose upper bound. + assert_allclose(square, float(clip(x)**2), rtol=3e-14, atol=2e-14) + + +def test_all_200_iterates_and_fixed_point(api): + f = api[0] + p = jnp.array([.769, -.103, -.003]) + def step(x, _): + y = f(jnp.array([x]), p) + return y, y + final, trace = jax.jit(lambda: jax.lax.scan(step, jnp.array(-3.), None, length=200))() + all_states = jnp.concatenate((jnp.array([-3.]), trace)) + assert bool(jnp.all(jnp.isfinite(all_states))) + assert float(jnp.max(jnp.abs(all_states))) <= 5.0 + assert bool(jnp.all(jnp.diff(all_states) >= -1e-13)) + assert_allclose(final, -.013063101278542104, rtol=0, atol=2e-13) + # Root count is additionally established by reference.default_certificate(), + # not inferred from this one initial condition or a sign-change grid. + + +def test_derivatives_at_zero_clip_knee_and_tails(api): + f=api[0] + knee = 3. + x = np.array([-50., -knee, -2., -1., -0., 0., 1., 2., + np.nextafter(knee, -np.inf), knee, + np.nextafter(knee, np.inf), 50.]) + params = jnp.array([.4, .2, .1]) + def objective(z): + return f(jnp.array([z]), params) + result = jax.jit(jax.vmap(jax.grad(objective)))(jnp.asarray(x)) + expected = np.array([.4+.4*float(clip(v)*clip_derivative(v)) for v in x]) + assert bool(jnp.all(jnp.isfinite(result))) + assert_allclose(result, expected, rtol=2e-12, atol=2e-13) + gradient_params = jax.grad(f, argnums=1)(jnp.array([2.]), params) + assert_allclose(gradient_params, [2., float(clip(2)**2), 1.], rtol=3e-14) + # Gradient correctness is separate from zero nonlinear coefficients. + identity_grad = jax.grad(f)(jnp.array([1e80]), jnp.array([1., 0., 0.])) + assert_allclose(identity_grad, [1.], rtol=0, atol=2e-14) + + +@pytest.mark.parametrize('scale,power', [(.5,2), (3.,4), (9.,8)]) +def test_static_configuration_and_scaling(api, scale, power): + f = api[0] + compiled = jax.jit(f, static_argnames=('scale','power')) + params=jnp.array([0., 1., 0.]) + for x in (-2*scale, 0., .5*scale, 2*scale): + value=compiled(jnp.array([x]), params, scale=scale, power=power) + assert_allclose(value, float(clip(x, scale, power)**2), rtol=5e-14, atol=5e-14) + # Algebraic covariance requires transforming the clip scale with the units. + g1=tf._soft_clip(jnp.array(2.), 3., power) + g2=tf._soft_clip(jnp.array(10.), 15., power) + assert_allclose(g2, 5*g1, rtol=4e-14) + + +def test_identity_and_name_companions(api): + f=api[0] + factors=('a','b','c') + names=tf.params_translog(factors) + assert tf.params_stable_translog(factors)==names + for own in range(3): + p=jnp.zeros(len(names)).at[own].set(1.) + x=jnp.array([1e80, -25., 7.]) + assert_array_equal(f(x,p),x[own]) + got=tf.identity_constraints_stable_translog(factors[own],0,factors) + want=tf.identity_constraints_translog(factors[own],0,factors) + assert [(v.loc,v.value) for v in got]==[(v.loc,v.value) for v in want] + + +@pytest.mark.parametrize('scale', [0., -3., math.inf, math.nan]) +def test_invalid_scale_fails_loud(api, scale): + with pytest.raises(ValueError, match='scale'): + api[0](jnp.array([0.]), jnp.array([1.,0.,0.]), scale=scale) + + +@pytest.mark.parametrize('power', [0, 1, 3, 4.0, True]) +def test_invalid_power_fails_loud(api, power): + with pytest.raises((ValueError, TypeError), match='power'): + api[0](jnp.array([0.]), jnp.array([1.,0.,0.]), power=power) diff --git a/docs/superpowers/specs/stable-translog-audit/test_tail_mutations.py b/docs/superpowers/specs/stable-translog-audit/test_tail_mutations.py new file mode 100644 index 00000000..b6188531 --- /dev/null +++ b/docs/superpowers/specs/stable-translog-audit/test_tail_mutations.py @@ -0,0 +1,42 @@ +"""Native tail/adjacent-float generators for F2. Not run by this reviewer.""" +from __future__ import annotations +import math +import sys +from pathlib import Path +import pytest +if sys.version_info[:2]!=(3,14): + raise RuntimeError('Native tests require the declared Python 3.14 environment.') +import jax +import jax.numpy as jnp +import numpy as np +from numpy.testing import assert_allclose +from skillmodels.common import transition_functions as tf +sys.path.insert(0,str(Path(__file__).resolve().parents[1])) +from audit_oracles.reference import clip +jax.config.update('jax_enable_x64',True) + + +@pytest.mark.parametrize('scale,power',[(.5,4),(3.,4),(9.,8)]) +def test_finite_power_overflow_neighborhood(scale,power): + limit=np.finfo(np.float64).max + threshold=scale*math.exp(math.log(limit)/power) + samples=[0.,scale,np.nextafter(scale,0.),np.nextafter(scale,np.inf),50., + threshold/2,np.nextafter(threshold,0.),threshold, + np.nextafter(threshold,np.inf),threshold*2,1e80,1e150,1e300] + samples=sorted(set(v for x in samples for v in (x,-x) if np.isfinite(v))) + x=jnp.array(samples) + helper=jax.jit(lambda z:tf._soft_clip(z,scale,power)) + got=helper(x) + expected=np.array([float(clip(v,scale,power)) for v in samples]) + assert bool(jnp.all(jnp.isfinite(got))) + assert bool(jnp.all(jnp.diff(got)>=-2e-13*scale)) + assert_allclose(got,expected,rtol=8e-14,atol=8e-14*scale) + f=jax.jit(tf.stable_translog,static_argnames=('scale','power')) + p=jnp.array([0.,1.,0.]) + vals=jax.vmap(lambda z:f(jnp.array([z]),p,scale=scale,power=power))(x) + assert_allclose(vals,expected**2,rtol=2e-13,atol=2e-13*scale**2) + # Losing the nonlinear term must not be hidden by an enormous linear part. + slopes=jax.vmap(jax.grad(lambda z:f(jnp.array([z]),jnp.array([1.,0.,0.]), + scale=scale,power=power)))(x) + assert bool(jnp.all(jnp.isfinite(slopes))) + assert_allclose(slopes,1.,rtol=0,atol=2e-13) diff --git a/docs/superpowers/specs/stable-translog-audit/time_loglike.py b/docs/superpowers/specs/stable-translog-audit/time_loglike.py new file mode 100644 index 00000000..e401d849 --- /dev/null +++ b/docs/superpowers/specs/stable-translog-audit/time_loglike.py @@ -0,0 +1,17 @@ +"""Warm likelihood-evaluation time, translog vs stable_translog, estimation fixture.""" +import sys, time, json, resource, platform; sys.path.insert(0, "tests") +import jax, numpy as np +from test_missing_observed_factors import MOMENTS, OPTIONS, _data, _model, _params +from skillmodels.chs.maximization_inputs import get_maximization_inputs +law, calls = sys.argv[1], int(sys.argv[2]) +inputs = get_maximization_inputs(_model(2, law, MOMENTS), _data(), chs_options=OPTIONS) +params = _params(inputs["params_template"], nonlinear=0.05) +f = inputs["loglike_and_gradient"] +t0 = time.perf_counter(); ll, g = f(params); float(ll); first = time.perf_counter() - t0 +t0 = time.perf_counter() +for _ in range(calls): + ll, g = f(params); float(ll) +warm = (time.perf_counter() - t0) / calls +print("RESULT=" + json.dumps({"law": law, "first_call_s": first, "warm_s_per_call": warm, "calls": calls, + "loglike": float(ll), "peak_gib": resource.getrusage(resource.RUSAGE_SELF).ru_maxrss / 1024**2, + "python": platform.python_version(), "jax": jax.__version__})) diff --git a/environment-cuda.yml b/environment-cuda.yml new file mode 100644 index 00000000..9be30e14 --- /dev/null +++ b/environment-cuda.yml @@ -0,0 +1,67 @@ +--- +# Conda/mamba environment for the skillmodels `af-estimator` branch +# **with CUDA 12 GPU support**. +# +# Same package set as `environment.yml`, except JAX is pulled in via the +# `jax[cuda12]` PyPI extra and `cuda-nvcc` is added on the conda side. +# Requires the host system to provide a CUDA 12 toolkit; see +# https://jax.readthedocs.io/en/latest/installation.html for details. +# +# Usage: +# mamba env create -f environment-cuda.yml +# mamba activate skillmodels-af-cuda +name: skillmodels-af-cuda +channels: + - conda-forge + - nodefaults +dependencies: + # CUDA toolchain (required for the cuda12 JAX wheel below) + - cuda-nvcc >=12 + # Python + core scientific stack + - python ~=3.14.0 + - scipy >=1.16.0 + - h5py >=3.16.0,<4 + # Skillmodels conda deps + - filterpy * + - ipykernel >=6.29.5 + - jupyterlab * + - nbformat >=5.10.4 + - networkx * + - pybaum >=0.1.3 + - scikit-learn >=1.5 # AMN Stage 1 (mixture EM) + # Test / profiling tooling + - pytest >=8.4.1 + - pytest-cov >=6.2.1 + - pytest-xdist >=3.8.0 + - pytest-memray * + - snakeviz * + - xlrd >=2 + - prek * + # Downstream-only conda deps (skane-struct-bw / health-cognition): + - deepdiff >=8.5.0 + - memray >=1.17.2 + - statsmodels >=0.14.5 + - tabulate >=0.9.0 + - seaborn * + - pip + - pip: + # Skillmodels project deps (PyPI), with CUDA-12 JAX wheel + - dags>=0.5.1 + - jax[cuda12]>=0.9 + - jupyter-book>=2 + - kaleido>=1.2 + - numpy>=2.4 + - pandas>=3 + - plotly>=6.6 + - pytask>=0.5.8 + - pytask-parallel>=0.5.2 + - pdbp + # Pinned to the optimagic branch the AF estimator relies on. + # yamllint disable-line rule:line-length + - optimagic @ git+https://github.com/optimagic-dev/optimagic.git@probability-allow-fixed-entries + # Downstream-only PyPI deps: + - fides>=0.7.8 + - statadict>=1.1.0 + # Skillmodels itself, from the af-estimator branch. + # yamllint disable-line rule:line-length + - skillmodels @ git+https://github.com/OpenSourceEconomics/skillmodels.git@af-estimator diff --git a/environment.yml b/environment.yml new file mode 100644 index 00000000..684f5b34 --- /dev/null +++ b/environment.yml @@ -0,0 +1,70 @@ +--- +# Conda/mamba environment for the skillmodels `af-estimator` branch. +# +# Installs every package needed to run the skillmodels test suite **and** +# the two downstream research applications (`skane-struct-bw`, +# `health-cognition`) -- minus the two applications themselves, which +# are supplied separately by their respective project teams. +# +# CPU-only JAX. For an environment with CUDA-12 support use +# `environment-cuda.yml` instead. +# +# Usage: +# mamba env create -f environment.yml +# mamba activate skillmodels-af +name: skillmodels-af +channels: + - conda-forge + - nodefaults +dependencies: + # Python + core scientific stack + - python ~=3.14.0 + - scipy >=1.16.0 + - h5py >=3.16.0,<4 + # Skillmodels conda deps + - filterpy * + - ipykernel >=6.29.5 + - jupyterlab * + - nbformat >=5.10.4 + - networkx * + - pybaum >=0.1.3 + - scikit-learn >=1.5 # AMN Stage 1 (mixture EM) + # Test / profiling tooling (skillmodels' tests-cpu feature) + - pytest >=8.4.1 + - pytest-cov >=6.2.1 + - pytest-xdist >=3.8.0 + - pytest-memray * + - snakeviz * + - xlrd >=2 + - prek * + # Downstream-only conda deps (not used by skillmodels itself; required + # to run skane-struct-bw / health-cognition pipelines): + - deepdiff >=8.5.0 # health-cognition + skane: snapshot / diff utilities + - memray >=1.17.2 # health-cognition + skane: memory profiling + - statsmodels >=0.14.5 # health-cognition + skane: regression diagnostics + - tabulate >=0.9.0 # health-cognition + skane: table formatting in reports + - seaborn * # health-cognition: figure styling + - pip + - pip: + # Skillmodels project deps (PyPI) + - dags>=0.5.1 + - jax>=0.9 + - jupyter-book>=2 + - kaleido>=1.2 + - numpy>=2.4 + - pandas>=3 + - plotly>=6.6 + - pytask>=0.5.8 + - pytask-parallel>=0.5.2 + - pdbp + # Pinned to the optimagic branch the AF estimator relies on + # (`probability-allow-fixed-entries`). The PyPI release does not + # yet carry the required `FixedConstraintWithValue` semantics. + # yamllint disable-line rule:line-length + - optimagic @ git+https://github.com/optimagic-dev/optimagic.git@probability-allow-fixed-entries + # Downstream-only PyPI deps (not used by skillmodels itself): + - fides>=0.7.8 # health-cognition + skane: optimagic algorithm + - statadict>=1.1.0 # health-cognition + skane: Stata variable labels + # The library itself, from the af-estimator branch. + # yamllint disable-line rule:line-length + - skillmodels @ git+https://github.com/OpenSourceEconomics/skillmodels.git@af-estimator diff --git a/pixi.lock b/pixi.lock index 60360ab9..362eeaa3 100644 --- a/pixi.lock +++ b/pixi.lock @@ -1,3856 +1,4768 @@ -version: 6 +version: 7 +platforms: +- name: linux-64 +- name: osx-arm64 +- name: win-64 environments: cuda: channels: - url: https://conda.anaconda.org/conda-forge/ indexes: - https://pypi.org/simple - options: - pypi-prerelease-mode: if-necessary-or-explicit packages: linux-64: - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.12.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/argon2-cffi-bindings-25.1.0-py314h5bd0f2a_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.2.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.3.0-py314h680f03e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.14.3-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45.1-default_hfdba357_101.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_linux-64-2.45.1-default_h4852527_101.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.3.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.3.0-hbca2aae_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.10.3-hd2277e8_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.14-h78948cc_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.14.0-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.2-haa0cbde_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.11.0-h6488f85_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.26.3-h3bf836e_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.12.6-hb916526_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.5-haa0cbde_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.10-haa0cbde_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45.1-default_hfdba357_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_linux-64-2.45.1-default_h4852527_102.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.2.0-hed03a55_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.2.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py314h3de4e8d_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-he90730b_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py314h4a8dc5f_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.6-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py314h97ea11e_4.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.3-py314hd8ed1ab_101.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-64-12.9.27-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-crt-dev_linux-64-12.9.86-ha770c72_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-crt-tools-12.9.86-ha770c72_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-12.9.79-h5888daf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-dev-12.9.79-h5888daf_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-dev_linux-64-12.9.79-h3f2d84a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-static-12.9.79-h5888daf_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-static_linux-64-12.9.79-h3f2d84a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart_linux-64-12.9.79-h3f2d84a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-driver-dev_linux-64-12.9.79-h3f2d84a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc-12.9.86-hcdd1206_6.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvcc-dev_linux-64-12.9.86-he91c749_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc-impl-12.9.86-h85509e4_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc-tools-12.9.86-he02047a_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc_linux-64-12.9.86-he0b4e1d_6.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-64-12.9.86-ha770c72_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-impl-12.9.86-h4bc722e_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-tools-12.9.86-h4bc722e_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.21-py314h42812f9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.18.1-h27c8c51_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.3-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.16-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-14.3.0-h235f0fe_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-14.3.0-h50e9bb6_27.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.15-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-14.3.0-h2185e75_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-14.3.0-hd240bd5_27.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.16.0-nompi_py314hddf7a69_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-14.2.1-h6083320_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-2.1.0-nompi_h7d5651c_108.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.5.0-py314h97ea11e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-hbde042b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.19.1-h0c24ade_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.5-h088129d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-8_h4a7cf45_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-8_h0358290_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.20.0-hcf29cc6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.3-h73754d4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.88.1-h0d30a3d_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.4.1-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-8_h47877c9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h877daf1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnvptxcompiler-dev-12.9.86-ha770c72_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.33-pthreads_h94d23a6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.58-h421ea60_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libraqm-0.10.5-h75b3fb1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-14.3.0-h8f1669f_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.22-h280c20c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.2-h0c1763c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.2-h5347b49_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py314h67df5f8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.11.0-py314h261f116_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.5.0-py314h2b28147_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.3-h35e630c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.2.0-py314h8ec4b1a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/prek-0.4.5-hb17b654_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.2-py314h0f05182_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.6-habeac84_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py314h67df5f8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-2026.5.1-py314h1bee95f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.7.4-h92489ea_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.9.0-np2py314hf09ca88_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.18.0-py314hf07bd8e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.7-py314h5bd0f2a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-17.0.1-py314h5bd0f2a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-he73a12e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.13-he1eb515_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.7-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h09e67af_11.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.14.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.6.0-py314h680f03e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.15.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.4.0-hac0b51c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.6.17-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.6-py314hd8ed1ab_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-64-12.9.27-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-crt-dev_linux-64-12.9.86-ha770c72_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-dev_linux-64-12.9.79-h3f2d84a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-static_linux-64-12.9.79-h3f2d84a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart_linux-64-12.9.79-h3f2d84a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-driver-dev_linux-64-12.9.79-h3f2d84a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvcc-dev_linux-64-12.9.86-he91c749_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-64-12.9.86-ha770c72_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-12.9-h4f385c5_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.20-py314h42812f9_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/filterpy-1.4.5-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.62.0-pyh7db6752_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.63.0-pyh7db6752_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.2-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-14.3.0-hbdf3cc3_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-14.3.0-h298d278_21.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-14.3.0-h2185e75_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-14.3.0-he467f4b_21.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.2.0-pyha191276_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.11.0-pyhecfbec7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.18-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.3.0-pyha191276_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.14.1-pyh53cf698_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.13.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.0.0-pyhcf101f3_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.15.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.1.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.26.0-hcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.3.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-builder-1.0.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.3.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.9.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.0-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.17.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.20.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.5.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.6.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.28.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-4.18.0-he073ed8_9.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.5.0-py314h97ea11e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.18-h0c24ade_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-5_h4a7cf45_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-5_h0358290_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.2-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.2-h73754d4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-14.3.0-hf649bbc_118.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.2-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-5_h47877c9_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libnvptxcompiler-dev-12.9.86-ha770c72_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-14.3.0-hf649bbc_119.conda - conda: https://conda.anaconda.org/conda-forge/noarch/libnvptxcompiler-dev_linux-64-12.9.86-ha770c72_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.55-h421ea60_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-14.3.0-h8f1669f_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.21-h280c20c_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-14.3.0-h9f08a49_118.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py314h67df5f8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.10.8-py314h1194b4b_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-14.3.0-h9f08a49_119.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.2.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.2.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.3.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.17.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.22.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.11.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.17.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio2-1.7.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.2-py314h2b28147_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.7-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.1.1-py314h8ec4b1a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.10.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/prek-0.3.6-hb17b654_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.25.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.2-py314h0f05182_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pybaum-0.1.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.2-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.3-h32b2ec7_101_cp314.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.3-h4df99d1_101.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.6-h4df99d1_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2026.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py314h67df5f8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.3-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.30.0-py314h2e6c369_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.17.1-py314hf07bd8e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-15.0.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-2.1.0-pyha191276_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.28-h4ee821c_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyhc90fa1f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.3-py314h5bd0f2a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.15.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-17.0.1-py314h5bd0f2a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.8.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/webcolors-25.10.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h41580af_10.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/9f/d73dfb85d7a5b1a56a99adc50f2074029468168c970ff5daeade4ad819e4/choreographer-1.2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/1a/aff8bb287a4b1400f69e09a53bd65de96aa5cee5691925b38731c67fc695/click_default_group-1.2.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/c1/a662f0a8f6e024fca239d493f278d9adf5de1c8408af46a53a76beb13534/dags-0.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/43/f5/ee39c6e92acc742c052f137b47c210cd0a1b72dcd3f98495528bb4d27761/flatten_dict-0.4.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e6/ab/fb21f4c939bb440104cc2b396d3be1d9b7a9fd3c6c2a53d98c45b3d7c954/fsspec-2026.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d2/d8/09bfa816572a4d83bccd6750df1926f79158b1c36c5f73786e26dbe4ee38/greenlet-3.3.2-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/80/e4/88778c6a23b65224e5088e68fd0924e5bde2196a26e76edb3ea3543fed6a/jax-0.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a7/2c/8ddb471091b46de99bba7eaa7f4e3983f9c8e74e310e585ff08915ce8b7a/jax_cuda12_pjrt-0.9.1-py3-none-manylinux_2_27_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/17/e9/3632d7eddb8f282b50bf7c095bba9de91aae0de9baea56d1699d982fe5f8/jax_cuda12_plugin-0.9.1-cp314-cp314-manylinux_2_27_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/76/fe/67d2c414b0860d42f4a20b1fadbe7aeffb1b3d885efebd7aedf22a4bc2a2/jaxlib-0.9.1-cp314-cp314-manylinux_2_27_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/7b/91/984aca2ec129e2757d1e4e3c81c3fcda9d0f85b74670a094cc443d9ee949/joblib-1.5.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7c/25/6fe2dfc3d830ec614c5f83f88fc7472c4ed892b7f7f496367d31de4110c4/jupyter_book-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4b/97/f6de8d4af54d6401d6581a686cce3e3e2371a79ba459a449104e026c08bc/kaleido-1.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/54/20/6aa79ba3570bddd1bf7e951c6123f806751e58e8cce736bad77b2cf348d7/logistro-2.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ce/80/7f1f1bf8c2d5dfd8e9c0e1191aa355ff8b80b5619f84d6dcc2703fa7fd5a/loky-3.5.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c6/bb/82c7dcf38070b46172a517e2334e665c5bf374a262f99a283ea454bece7c/ml_dtypes-0.5.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/fe/75/0b4a10da17a44cf13567d08a9c7632a285297e46253263f1ae119129d10a/narwhals-2.18.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/77/3c/aa88abe01f3be3d1f8f787d1d33dc83e76fec05945f9a28fbb41cfb99cd5/nvidia_cublas_cu12-12.9.1.4-py3-none-manylinux_2_27_x86_64.whl + - conda: https://conda.anaconda.org/conda-forge/noarch/xlrd-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda + - pypi: . + - pypi: git+https://github.com/optimagic-dev/optimagic.git?branch=probability-allow-fixed-entries#ecd9ebe0dfb3abc09ab015d78774a30794d779d0 + - pypi: https://files.pythonhosted.org/packages/02/ac/85bc07d7a0766c7999f9bdfcf7f7cb2487fd0eb5d6bbe2bd41a3a54cd379/jax_cuda12_plugin-0.10.2-cp314-cp314-manylinux_2_27_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/12/46/b0fd4b04f86577921feb97d8e2cf028afe04f614d17fb5013de9282c9216/nvidia_cusparse_cu12-12.5.10.65-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/18/2a/d4cd8506d2044e082f8cd921be57392e6a9b5ccd3ffdf050362430a3d5d5/nvidia_cuda_cccl_cu12-12.9.27-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/c1/2e/b84e32197e33f39907b455b83395a017e697c07a449a2b15fd07fc1c9981/nvidia_cuda_cupti_cu12-12.9.79-py3-none-manylinux_2_25_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/1f/cca084ca2572810fff12ea9dbdcbe39eac048f40daf4a9077b49fcbe8cee/msgspec-0.21.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/25/48/b54a06168a2190572a312bfe4ce443687773eb61367ced31e064953dd2f7/nvidia_cuda_nvcc_cu12-12.9.86-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b8/85/e4af82cc9202023862090bfca4ea827d533329e925c758f0cde964cb54b7/nvidia_cuda_nvrtc_cu12-12.9.86-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/bc/46/a92db19b8309581092a3add7e6fceb4c301a3fd233969856a8cbf042cd3c/nvidia_cuda_runtime_cu12-12.9.79-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/3b/52/94aecda69df65ba1079a8b7dbe84632af5614dc0ed2c733185f6431874e3/nvidia_cudnn_cu12-9.20.0.48-py3-none-manylinux_2_27_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/95/f4/61e6996dd20481ee834f57a8e9dca28b1869366a135e0d42e2aa8493bdd4/nvidia_cufft_cu12-11.4.1.4-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/2c/1a/aff8bb287a4b1400f69e09a53bd65de96aa5cee5691925b38731c67fc695/click_default_group-1.2.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/40/79b0c64d44d6c166c0964ec1d803d067f4a145cca23e23925fd351d0e642/nvidia_cusolver_cu12-11.7.5.82-py3-none-manylinux_2_27_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/12/46/b0fd4b04f86577921feb97d8e2cf028afe04f614d17fb5013de9282c9216/nvidia_cusparse_cu12-12.5.10.65-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/31/1e/9e366f36efc550f07d6737f199e3f6bffafdf28795d007f10a77dd274f5c/nvidia_nccl_cu12-2.29.7-py3-none-manylinux_2_18_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/3e/85/1c12e849e4d50624e75496378a3fb168389f768d3ec7cb694fba873ff9a8/nvidia_nvshmem_cu12-3.7.0-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/45/d8/55e0901103c93d57bab3b932294c216f0cbd49054187ce29f8f13808d530/jaxopt-0.8.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/46/0c/c75bbfb967457a0b7670b8ad267bfc4fffdf341c074e0a80db06c24ccfd4/nvidia_nvjitlink_cu12-12.9.86-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/44/6a/cf1265d48719852f5144055ff611d9e71678a9b29afb7ace72bf248a0cd8/nvidia_nvshmem_cu12-3.5.21-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/91/85/08c4e13a90a13c509d1fe09596dd8198338b6cfff9ee280f01ae7694889e/optimagic-0.5.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fe/16/00261f20f467b9e8950a76ec1749f01359bf47f2fc3dac5e206de99835c0/optree-0.19.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/c2/8b/ecdad52d0b38d4b8f514be603e69ccd5eacf4e7241f972e37e79792212ec/orjson-3.11.7-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/55/77/6ea82043db22cb0f2bbfe7198da3544000ddaadb12d26be36e19b03a2dc5/pandas-3.0.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b1/29/c028a0731e202035f0e2e0bfbf1a3e46ad6c628cbb17f6f1cc9eea5d9ff1/pathlib_abc-0.5.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/50/32/e7ffa9c324ae260e5dbb4af2cd557bf7a8d155c8ac7b79a785fe1796fb92/nvidia_nccl_cu12-2.30.7-py3-none-manylinux_2_18_x86_64.whl - pypi: https://files.pythonhosted.org/packages/51/fe/53ac0cd932db5dcaf55961bc7cb7afdca8d80d8cc7406ed661f0c7dc111a/pdbp-1.8.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/80/b2/bba963dfce0fcbc5020a4f8b4361e132390c4bd78b46cfc7ae355e678b96/pytask-0.5.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/b9/19ecce5c57114b703b97378ded69ffde1f9f9d471d4db361bbfa6105861e/pytask_parallel-0.5.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fa/b6/3127540ecdf1464a00e5a01ee60a1b09175f6913f0644ac748494d9c4b21/pytest_timeout-2.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/05/5b/83e1ff87eb60ca706972f7e02e15c0b33396e7bdbd080069a5d1b53cf0d8/simplejson-3.20.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f2/5e/327428a034407651a048f5e624361adf3f9fbac9d0fa98e981e9c6ff2f5e/sqlalchemy-2.0.48-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/65/44/bb509c3d2c0b5a87e7a5af1d5917a402a32ff026f777a6d7cb6990746cbb/tabcompleter-1.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/54/20/6aa79ba3570bddd1bf7e951c6123f806751e58e8cce736bad77b2cf348d7/logistro-2.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/58/3b/1cdec6772bdbaf7b25dab360c59f03cadf05492dd724c6540af905389b07/pandas-3.0.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/5b/f2/44a7dd795a52d34d033b1cb1a6b1162eada650079e557e236fb6b88943be/pytask_parallel-0.5.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/69/77/ac054882c220872512df28d16aeb648fe0e651efbb5be4fd7c4817fd88b0/jaxlib-0.10.2-cp314-cp314-manylinux_2_27_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/71/cc/18245721fa7747065ab478316c7fea7c74777d07f37ae60db2e84f8172e8/beartype-0.22.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/72/9f/485516087cd8c44183aaf9ab850247a28e2e4a42a4d62eab77c21f673450/flatten_dict-0.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/76/3e/c0b690253f0b82d86e99949af13533363acfb5432ecb5d53dd5b3bce9c34/orjson-3.11.9-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/77/00/326facd192b7dc0731e43b30f5ada5ef235e2a3325a151d94ed3db041536/jax_cuda12_pjrt-0.10.2-py3-none-manylinux_2_27_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/78/91/3635cdb13318cb0a328abaa69e2b91251caad39d6779aa308098f341f6cb/simplejson-4.1.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/82/5ab5211079a151b6f661529369c0c8e98ec64cabf5c0cf22a0a05af124d8/jax-0.10.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/95/f4/61e6996dd20481ee834f57a8e9dca28b1869366a135e0d42e2aa8493bdd4/nvidia_cufft_cu12-11.4.1.4-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/99/69/d6c99db15dc0b5e892ac3cc7b942c8b21f4a9cc3bd9ea0bc3b0f339ffbd4/greenlet-3.5.2-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/9c/1a/4834b1f2fb1847412353d7342eb7a1d001a4f3bd9d24155e057135a4aa44/optree-0.19.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/9e/b9/a6d8bb7d228940f01885bd9f327ab7f9d366a9be775c4bf366bf9d9477ae/kaleido-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/dd/b04e4a733637d370831e328a356254cfc9c875195269b234cc8ca31ff674/dags-0.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b1/29/c028a0731e202035f0e2e0bfbf1a3e46ad6c628cbb17f6f1cc9eea5d9ff1/pathlib_abc-0.5.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b5/83/205e7af4153d9690c3cb94fa9cea670c0d26ce7f022aaa589a9e136f1491/jupyter_book-2.1.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b8/85/e4af82cc9202023862090bfca4ea827d533329e925c758f0cde964cb54b7/nvidia_cuda_nvrtc_cu12-12.9.86-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/ba/6c/ff8bf52315064dbeb55cb5067e191120a5b2e58bb648d0d34cf7969dc2c2/choreographer-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bc/46/a92db19b8309581092a3add7e6fceb4c301a3fd233969856a8cbf042cd3c/nvidia_cuda_runtime_cu12-12.9.79-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c1/2e/b84e32197e33f39907b455b83395a017e697c07a449a2b15fd07fc1c9981/nvidia_cuda_cupti_cu12-12.9.79-py3-none-manylinux_2_25_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c6/bb/82c7dcf38070b46172a517e2334e665c5bf374a262f99a283ea454bece7c/ml_dtypes-0.5.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c7/18/c86eb8e0202e32dd3df50d43d7ff9854f8e0603945ff398974c1d91ac1ef/tomli_w-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/c0/0a517bfe63ccd3b92eb254d264e28fca3c7cab75d07daea315250fb1bf73/nvidia_cublas_cu12-12.9.2.10-py3-none-manylinux_2_27_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/cb/fc/8c82be70b8f96d09943360f34cfb2ecdd3035294c51bce4131eeabe56645/tabcompleter-1.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/80/7f1f1bf8c2d5dfd8e9c0e1191aa355ff8b80b5619f84d6dcc2703fa7fd5a/loky-3.5.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d7/54/c30cb1d08258612ece1dfa72c6918998bebecb916c54fca6d806bc780f2b/pytask-0.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dd/1a/5d9a402b39ec892d856bbdd9db502ff73ce28cdf4aff72eb1ce1d6843506/universal_pathlib-0.3.10-py3-none-any.whl - - pypi: ./ + - pypi: https://files.pythonhosted.org/packages/dd/a1/e77854cb5336fd37dc3c6ae3b71de242c98caac5725120be0b526b31cbd0/sqlalchemy-2.0.51-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e1/ef/276c358c6ab44efbe68e69977657cb80927e7ab6d45968d042e1083f45e5/nvidia_cudnn_cu12-9.23.2.1-py3-none-manylinux_2_27_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e5/22/4222d7ddf3da30f363edaa98e329c2bce6c65497c9cb2810931c8b2c0fbc/fsspec-2026.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f9/14/abe5ce876ab5b66ee3c691bf537fcd43d037aea55d447aacf74630a8f31e/plotly-6.8.0-py3-none-any.whl default: channels: - url: https://conda.anaconda.org/conda-forge/ indexes: - https://pypi.org/simple - options: - pypi-prerelease-mode: if-necessary-or-explicit packages: linux-64: - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.12.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/argon2-cffi-bindings-25.1.0-py314h5bd0f2a_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.2.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.3.0-py314h680f03e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.14.3-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.3.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.3.0-hbca2aae_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.10.3-hd2277e8_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.14-h78948cc_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.14.0-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.2-haa0cbde_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.11.0-h6488f85_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.26.3-h3bf836e_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.12.6-hb916526_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.5-haa0cbde_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.10-haa0cbde_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.2.0-hed03a55_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.2.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py314h3de4e8d_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-he90730b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py314h4a8dc5f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py314h97ea11e_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.21-py314h42812f9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.18.1-h27c8c51_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.3-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.16-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.15-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.16.0-nompi_py314hddf7a69_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-14.2.1-h6083320_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-2.1.0-nompi_h7d5651c_108.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.5.0-py314h97ea11e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-hbde042b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.19.1-h0c24ade_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.5-h088129d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-8_h4a7cf45_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-8_h0358290_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.20.0-hcf29cc6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.3-h73754d4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.88.1-h0d30a3d_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.4.1-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-8_h47877c9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h877daf1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.33-pthreads_h94d23a6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.58-h421ea60_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libraqm-0.10.5-h75b3fb1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.22-h280c20c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.2-h0c1763c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.2-h5347b49_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py314h67df5f8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.11.0-py314h261f116_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.5.0-py314h2b28147_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.3-h35e630c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.2.0-py314h8ec4b1a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/prek-0.4.5-hb17b654_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.2-py314h0f05182_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.6-habeac84_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py314h67df5f8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-2026.5.1-py314h1bee95f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.7.4-h92489ea_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.9.0-np2py314hf09ca88_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.18.0-py314hf07bd8e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.7-py314h5bd0f2a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-17.0.1-py314h5bd0f2a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-he73a12e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.13-he1eb515_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.7-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h09e67af_11.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.14.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.6.0-py314h680f03e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.15.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.4.0-hac0b51c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py314h4a8dc5f_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.6.17-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py314h97ea11e_4.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.3-py314hd8ed1ab_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.6-py314hd8ed1ab_100.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.20-py314h42812f9_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/filterpy-1.4.5-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.62.0-pyh7db6752_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.63.0-pyh7db6752_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.2-ha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.2.0-pyha191276_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.11.0-pyhecfbec7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.18-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.3.0-pyha191276_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.14.1-pyh53cf698_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.13.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.0.0-pyhcf101f3_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.15.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.1.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.26.0-hcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.3.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-builder-1.0.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.3.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.9.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.0-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.17.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.20.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.5.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.6.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.28.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.5.0-py314h97ea11e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.18-h0c24ade_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-5_h4a7cf45_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-5_h0358290_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.2-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.2-h73754d4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.2-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-5_h47877c9_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.55-h421ea60_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.21-h280c20c_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py314h67df5f8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.10.8-py314h1194b4b_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.2.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.3.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.17.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.22.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.11.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.17.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio2-1.7.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.2-py314h2b28147_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.7-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.1.1-py314h8ec4b1a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/prek-0.3.6-hb17b654_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.10.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.25.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.2-py314h0f05182_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pybaum-0.1.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.3-h32b2ec7_101_cp314.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.3-h4df99d1_101.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.6-h4df99d1_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2026.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py314h67df5f8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.30.0-py314h2e6c369_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.17.1-py314hf07bd8e_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-2.1.0-pyha191276_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyhc90fa1f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.3-py314h5bd0f2a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.15.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-17.0.1-py314h5bd0f2a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.8.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/webcolors-25.10.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h41580af_10.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/9f/d73dfb85d7a5b1a56a99adc50f2074029468168c970ff5daeade4ad819e4/choreographer-1.2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl + - conda: https://conda.anaconda.org/conda-forge/noarch/xlrd-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda + - pypi: . + - pypi: git+https://github.com/optimagic-dev/optimagic.git?branch=probability-allow-fixed-entries#ecd9ebe0dfb3abc09ab015d78774a30794d779d0 + - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/1f/cca084ca2572810fff12ea9dbdcbe39eac048f40daf4a9077b49fcbe8cee/msgspec-0.21.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/2c/1a/aff8bb287a4b1400f69e09a53bd65de96aa5cee5691925b38731c67fc695/click_default_group-1.2.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/c1/a662f0a8f6e024fca239d493f278d9adf5de1c8408af46a53a76beb13534/dags-0.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/43/f5/ee39c6e92acc742c052f137b47c210cd0a1b72dcd3f98495528bb4d27761/flatten_dict-0.4.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e6/ab/fb21f4c939bb440104cc2b396d3be1d9b7a9fd3c6c2a53d98c45b3d7c954/fsspec-2026.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d2/d8/09bfa816572a4d83bccd6750df1926f79158b1c36c5f73786e26dbe4ee38/greenlet-3.3.2-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/80/e4/88778c6a23b65224e5088e68fd0924e5bde2196a26e76edb3ea3543fed6a/jax-0.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/76/fe/67d2c414b0860d42f4a20b1fadbe7aeffb1b3d885efebd7aedf22a4bc2a2/jaxlib-0.9.1-cp314-cp314-manylinux_2_27_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/7b/91/984aca2ec129e2757d1e4e3c81c3fcda9d0f85b74670a094cc443d9ee949/joblib-1.5.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7c/25/6fe2dfc3d830ec614c5f83f88fc7472c4ed892b7f7f496367d31de4110c4/jupyter_book-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4b/97/f6de8d4af54d6401d6581a686cce3e3e2371a79ba459a449104e026c08bc/kaleido-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/45/d8/55e0901103c93d57bab3b932294c216f0cbd49054187ce29f8f13808d530/jaxopt-0.8.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/51/fe/53ac0cd932db5dcaf55961bc7cb7afdca8d80d8cc7406ed661f0c7dc111a/pdbp-1.8.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/6aa79ba3570bddd1bf7e951c6123f806751e58e8cce736bad77b2cf348d7/logistro-2.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ce/80/7f1f1bf8c2d5dfd8e9c0e1191aa355ff8b80b5619f84d6dcc2703fa7fd5a/loky-3.5.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c6/bb/82c7dcf38070b46172a517e2334e665c5bf374a262f99a283ea454bece7c/ml_dtypes-0.5.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/fe/75/0b4a10da17a44cf13567d08a9c7632a285297e46253263f1ae119129d10a/narwhals-2.18.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/58/3b/1cdec6772bdbaf7b25dab360c59f03cadf05492dd724c6540af905389b07/pandas-3.0.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/5b/f2/44a7dd795a52d34d033b1cb1a6b1162eada650079e557e236fb6b88943be/pytask_parallel-0.5.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/69/77/ac054882c220872512df28d16aeb648fe0e651efbb5be4fd7c4817fd88b0/jaxlib-0.10.2-cp314-cp314-manylinux_2_27_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/71/cc/18245721fa7747065ab478316c7fea7c74777d07f37ae60db2e84f8172e8/beartype-0.22.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/72/9f/485516087cd8c44183aaf9ab850247a28e2e4a42a4d62eab77c21f673450/flatten_dict-0.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/76/3e/c0b690253f0b82d86e99949af13533363acfb5432ecb5d53dd5b3bce9c34/orjson-3.11.9-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/78/91/3635cdb13318cb0a328abaa69e2b91251caad39d6779aa308098f341f6cb/simplejson-4.1.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/91/85/08c4e13a90a13c509d1fe09596dd8198338b6cfff9ee280f01ae7694889e/optimagic-0.5.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fe/16/00261f20f467b9e8950a76ec1749f01359bf47f2fc3dac5e206de99835c0/optree-0.19.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/c2/8b/ecdad52d0b38d4b8f514be603e69ccd5eacf4e7241f972e37e79792212ec/orjson-3.11.7-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/55/77/6ea82043db22cb0f2bbfe7198da3544000ddaadb12d26be36e19b03a2dc5/pandas-3.0.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/89/82/5ab5211079a151b6f661529369c0c8e98ec64cabf5c0cf22a0a05af124d8/jax-0.10.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/99/69/d6c99db15dc0b5e892ac3cc7b942c8b21f4a9cc3bd9ea0bc3b0f339ffbd4/greenlet-3.5.2-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/9c/1a/4834b1f2fb1847412353d7342eb7a1d001a4f3bd9d24155e057135a4aa44/optree-0.19.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/9e/b9/a6d8bb7d228940f01885bd9f327ab7f9d366a9be775c4bf366bf9d9477ae/kaleido-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/dd/b04e4a733637d370831e328a356254cfc9c875195269b234cc8ca31ff674/dags-0.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b1/29/c028a0731e202035f0e2e0bfbf1a3e46ad6c628cbb17f6f1cc9eea5d9ff1/pathlib_abc-0.5.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/51/fe/53ac0cd932db5dcaf55961bc7cb7afdca8d80d8cc7406ed661f0c7dc111a/pdbp-1.8.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/80/b2/bba963dfce0fcbc5020a4f8b4361e132390c4bd78b46cfc7ae355e678b96/pytask-0.5.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/b9/19ecce5c57114b703b97378ded69ffde1f9f9d471d4db361bbfa6105861e/pytask_parallel-0.5.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fa/b6/3127540ecdf1464a00e5a01ee60a1b09175f6913f0644ac748494d9c4b21/pytest_timeout-2.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/14/25/b208c5683343959b670dc001595f2f3737e051da617f66c31f7c4fa93abc/rich-14.3.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/05/5b/83e1ff87eb60ca706972f7e02e15c0b33396e7bdbd080069a5d1b53cf0d8/simplejson-3.20.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f2/5e/327428a034407651a048f5e624361adf3f9fbac9d0fa98e981e9c6ff2f5e/sqlalchemy-2.0.48-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/65/44/bb509c3d2c0b5a87e7a5af1d5917a402a32ff026f777a6d7cb6990746cbb/tabcompleter-1.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b5/83/205e7af4153d9690c3cb94fa9cea670c0d26ce7f022aaa589a9e136f1491/jupyter_book-2.1.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ba/6c/ff8bf52315064dbeb55cb5067e191120a5b2e58bb648d0d34cf7969dc2c2/choreographer-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/bb/82c7dcf38070b46172a517e2334e665c5bf374a262f99a283ea454bece7c/ml_dtypes-0.5.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c7/18/c86eb8e0202e32dd3df50d43d7ff9854f8e0603945ff398974c1d91ac1ef/tomli_w-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/fc/8c82be70b8f96d09943360f34cfb2ecdd3035294c51bce4131eeabe56645/tabcompleter-1.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/80/7f1f1bf8c2d5dfd8e9c0e1191aa355ff8b80b5619f84d6dcc2703fa7fd5a/loky-3.5.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d7/54/c30cb1d08258612ece1dfa72c6918998bebecb916c54fca6d806bc780f2b/pytask-0.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dd/1a/5d9a402b39ec892d856bbdd9db502ff73ce28cdf4aff72eb1ce1d6843506/universal_pathlib-0.3.10-py3-none-any.whl - - pypi: ./ + - pypi: https://files.pythonhosted.org/packages/dd/a1/e77854cb5336fd37dc3c6ae3b71de242c98caac5725120be0b526b31cbd0/sqlalchemy-2.0.51-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e5/22/4222d7ddf3da30f363edaa98e329c2bce6c65497c9cb2810931c8b2c0fbc/fsspec-2026.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f9/14/abe5ce876ab5b66ee3c691bf537fcd43d037aea55d447aacf74630a8f31e/plotly-6.8.0-py3-none-any.whl osx-arm64: - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.conda - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.12.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.14.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/appnope-0.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/argon2-cffi-bindings-25.1.0-py314h0612a62_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.2.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.3.0-py314h680f03e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.14.3-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.3.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.3.0-hbca2aae_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-1.2.0-h7d5ae5b_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-bin-1.2.0-hc919400_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.2.0-py314h3daef5d_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.6.0-py314h680f03e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.15.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.4.0-hac0b51c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-2.0.0-py314h44086f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.6.17-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/contourpy-1.3.3-py314hf8a3a22_4.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.3-py314hd8ed1ab_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.6-py314hd8ed1ab_100.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/debugpy-1.8.20-py314he609de1_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/filterpy-1.4.5-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.62.0-pyh7db6752_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.63.0-pyh7db6752_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.14.2-hce30654_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.2.0-pyh5552912_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.11.0-pyhecfbec7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.18-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.3.0-pyh01cf8df_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.14.1-pyh53cf698_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.13.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.0.0-pyhcf101f3_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.15.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.1.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.26.0-hcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.3.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-builder-1.0.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.3.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.9.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.0-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.17.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.20.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.5.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.6.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.28.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/kiwisolver-1.5.0-py314hf8a3a22_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-h385eeb1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.18-hdfa7624_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.1.0-h1eee2c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.11.0-5_h51639a9_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.2.0-hc919400_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.2.0-hc919400_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.2.0-hc919400_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.11.0-5_hb0561ab_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.1-h55c6f16_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.25-hc11a715_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype-2.14.2-hce30654_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype6-2.14.2-hdfa99f5_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgcc-15.2.0-hcbb3090_18.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-h07b0088_18.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-hdae7583_18.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.1.2-hc919400_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.11.0-5_hd9741b5_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.30-openmp_ha158390_4.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.55-h132b30e_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.21-h1a92334_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.52.0-h1ae2325_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.1-h4030677_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.6.0-h07db88b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-22.1.0-hc7d1edf_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.3-py314h6e9b3f0_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/matplotlib-base-3.10.8-py314hd63e3f0_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.2.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.3.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.17.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.22.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.11.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.17.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio2-1.7.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.4.2-py314hae46ccb_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.4-hd9e9057_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.7-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-12.1.1-py314hab283cf_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/prek-0.3.6-h6fdd925_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.10.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.25.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-7.2.2-py314ha14b1ff_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-hd74edd7_1002.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pybaum-0.1.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-core-12.1-py314h3a4d195_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-framework-cocoa-12.1-py314h36abed7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.14.3-h4c637c5_101_cp314.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.3-h4df99d1_101.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.6-h4df99d1_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2026.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.3-py314h6e9b3f0_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312h022ad19_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/qhull-2020.2-h420ef59_5.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rpds-py-0.30.0-py314haad56a0_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scipy-1.17.1-py314hfc1f868_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-2.1.0-pyh5552912_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyhc90fa1f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.4-py314h0612a62_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.15.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/unicodedata2-17.0.1-py314h6c2aa35_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.8.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/webcolors-25.10.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.12-hc919400_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hc919400_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h4818236_10.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-ng-2.3.3-hed4e4f5_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/9f/d73dfb85d7a5b1a56a99adc50f2074029468168c970ff5daeade4ad819e4/choreographer-1.2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/1a/aff8bb287a4b1400f69e09a53bd65de96aa5cee5691925b38731c67fc695/click_default_group-1.2.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/c1/a662f0a8f6e024fca239d493f278d9adf5de1c8408af46a53a76beb13534/dags-0.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/43/f5/ee39c6e92acc742c052f137b47c210cd0a1b72dcd3f98495528bb4d27761/flatten_dict-0.4.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e6/ab/fb21f4c939bb440104cc2b396d3be1d9b7a9fd3c6c2a53d98c45b3d7c954/fsspec-2026.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/80/e4/88778c6a23b65224e5088e68fd0924e5bde2196a26e76edb3ea3543fed6a/jax-0.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a4/b0/f2c9caa6f545d4ecc1eab528c68c9191e40087f1bc79a6da2e29c6416510/jaxlib-0.9.1-cp314-cp314-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/7b/91/984aca2ec129e2757d1e4e3c81c3fcda9d0f85b74670a094cc443d9ee949/joblib-1.5.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7c/25/6fe2dfc3d830ec614c5f83f88fc7472c4ed892b7f7f496367d31de4110c4/jupyter_book-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4b/97/f6de8d4af54d6401d6581a686cce3e3e2371a79ba459a449104e026c08bc/kaleido-1.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/54/20/6aa79ba3570bddd1bf7e951c6123f806751e58e8cce736bad77b2cf348d7/logistro-2.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ce/80/7f1f1bf8c2d5dfd8e9c0e1191aa355ff8b80b5619f84d6dcc2703fa7fd5a/loky-3.5.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/72/4e/1339dc6e2557a344f5ba5590872e80346f76f6cb2ac3dd16e4666e88818c/ml_dtypes-0.5.4-cp314-cp314-macosx_10_13_universal2.whl - - pypi: https://files.pythonhosted.org/packages/fe/75/0b4a10da17a44cf13567d08a9c7632a285297e46253263f1ae119129d10a/narwhals-2.18.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl + - conda: https://conda.anaconda.org/conda-forge/noarch/xlrd-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/argon2-cffi-bindings-25.1.0-py314h0612a62_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.10.3-hc11c9a1_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-cal-0.9.14-h81c6212_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-common-0.14.0-h84a0fba_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-compression-0.3.2-h61d3404_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-http-0.11.0-h0a63974_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-io-0.26.3-h58c0f83_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-s3-0.12.6-h43def2a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.2.5-h61d3404_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-checksums-0.2.10-h61d3404_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-1.2.0-h7d5ae5b_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-bin-1.2.0-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.2.0-py314h3daef5d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.6-hc919400_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cairo-1.18.4-he0f2337_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-2.0.0-py314h44086f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/contourpy-1.3.3-py314hf8a3a22_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/debugpy-1.8.21-py314he609de1_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fontconfig-2.18.1-h2b252f5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.14.3-hce30654_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fribidi-1.0.16-hc919400_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/graphite2-1.3.15-hf6b4638_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/h5py-3.16.0-nompi_py314h658a3ac_102.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/harfbuzz-14.2.1-h3103d1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/hdf5-2.1.0-nompi_hb7e0c14_108.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/kiwisolver-1.5.0-py314hf8a3a22_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-hfd3d5f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.19.1-hdfa7624_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.1.0-h1eee2c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libaec-1.1.5-h8664d51_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.11.0-8_h51639a9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.2.0-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.2.0-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.2.0-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.11.0-8_hb0561ab_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.20.0-hd5a2499_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.8-h55c6f16_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.25-hc11a715_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.8.1-hf6b4638_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype-2.14.3-hce30654_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype6-2.14.3-hdfa99f5_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgcc-15.2.0-hcbb3090_19.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-h07b0088_19.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-hdae7583_19.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libglib-2.88.1-ha08bb59_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.18-h23cfdf5_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libintl-0.25.1-h493aca8_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.1.4.1-h84a0fba_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.11.0-8_hd9741b5_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.3-h8088a28_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.68.1-h8f3e76b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.33-openmp_he657e61_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.58-h132b30e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libraqm-0.10.5-h29bd36a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.22-h1a92334_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.2-h1ae2325_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h1590b86_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.1-h4030677_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.6.0-h07db88b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-22.1.8-hc7d1edf_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.3-py314h6e9b3f0_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/matplotlib-base-3.11.0-py314ha5eae4c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.6-h1d4f5a5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.5.0-py314hb79c6fa_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.4-hd9e9057_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.3-hd24854e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.47-h30297fc_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-12.2.0-py314hab283cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pixman-0.46.4-h81086ad_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/prek-0.4.5-h6fdd925_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-7.2.2-py314ha14b1ff_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-hd74edd7_1002.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-core-12.1-py314h3a4d195_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-framework-cocoa-12.1-py314h36abed7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.14.6-h156bc91_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.3-py314h6e9b3f0_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312h022ad19_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/qhull-2020.2-h420ef59_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rpds-py-2026.5.1-py314he1d1ac0_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-learn-1.9.0-np2py314h15f0f0f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scipy-1.18.0-py314h18e1515_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.7-py314h6c2aa35_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/unicodedata2-17.0.1-py314h6c2aa35_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.12-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h10816f8_11.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-ng-2.3.3-hed4e4f5_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda + - pypi: . + - pypi: git+https://github.com/optimagic-dev/optimagic.git?branch=probability-allow-fixed-entries#ecd9ebe0dfb3abc09ab015d78774a30794d779d0 - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/91/85/08c4e13a90a13c509d1fe09596dd8198338b6cfff9ee280f01ae7694889e/optimagic-0.5.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/08/67/2e19866a03a6e75eb62194a5b55e1e3154ca1517478c300232b0229f8c2a/optree-0.19.0-cp314-cp314-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/e9/1e/745565dca749813db9a093c5ebc4bac1a9475c64d54b95654336ac3ed961/orjson-3.11.7-cp314-cp314-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl - - pypi: https://files.pythonhosted.org/packages/72/3a/5b39b51c64159f470f1ca3b1c2a87da290657ca022f7cd11442606f607d1/pandas-3.0.1-cp314-cp314-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/b1/29/c028a0731e202035f0e2e0bfbf1a3e46ad6c628cbb17f6f1cc9eea5d9ff1/pathlib_abc-0.5.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2c/1a/aff8bb287a4b1400f69e09a53bd65de96aa5cee5691925b38731c67fc695/click_default_group-1.2.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/45/d8/55e0901103c93d57bab3b932294c216f0cbd49054187ce29f8f13808d530/jaxopt-0.8.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/49/cc/14dd93887295859457e507fc46a847b68ae8f20c42b2fde4d8a749c94bbc/optree-0.19.1-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/51/fe/53ac0cd932db5dcaf55961bc7cb7afdca8d80d8cc7406ed661f0c7dc111a/pdbp-1.8.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/80/b2/bba963dfce0fcbc5020a4f8b4361e132390c4bd78b46cfc7ae355e678b96/pytask-0.5.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/b9/19ecce5c57114b703b97378ded69ffde1f9f9d471d4db361bbfa6105861e/pytask_parallel-0.5.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fa/b6/3127540ecdf1464a00e5a01ee60a1b09175f6913f0644ac748494d9c4b21/pytest_timeout-2.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/14/25/b208c5683343959b670dc001595f2f3737e051da617f66c31f7c4fa93abc/rich-14.3.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/05/5b/83e1ff87eb60ca706972f7e02e15c0b33396e7bdbd080069a5d1b53cf0d8/simplejson-3.20.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f7/b3/f437eaa1cf028bb3c927172c7272366393e73ccd104dcf5b6963f4ab5318/sqlalchemy-2.0.48-cp314-cp314-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/65/44/bb509c3d2c0b5a87e7a5af1d5917a402a32ff026f777a6d7cb6990746cbb/tabcompleter-1.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/54/20/6aa79ba3570bddd1bf7e951c6123f806751e58e8cce736bad77b2cf348d7/logistro-2.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5b/f2/44a7dd795a52d34d033b1cb1a6b1162eada650079e557e236fb6b88943be/pytask_parallel-0.5.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/68/10/bf2d6738d72748b961a3751ab89522d58c54efc36a8e1a12161216cd45cf/pandas-3.0.3-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/68/31/9a5432c433a7671107182cdc9a20ea78a70f99c4e5334aa54b6d4d0d79ed/simplejson-4.1.1-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/71/cc/18245721fa7747065ab478316c7fea7c74777d07f37ae60db2e84f8172e8/beartype-0.22.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/72/4e/1339dc6e2557a344f5ba5590872e80346f76f6cb2ac3dd16e4666e88818c/ml_dtypes-0.5.4-cp314-cp314-macosx_10_13_universal2.whl + - pypi: https://files.pythonhosted.org/packages/72/9f/485516087cd8c44183aaf9ab850247a28e2e4a42a4d62eab77c21f673450/flatten_dict-0.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/82/5ab5211079a151b6f661529369c0c8e98ec64cabf5c0cf22a0a05af124d8/jax-0.10.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8e/eb/5da01e356015aee6ecfa1187ced87aef51364e306f5e695dd52719bf0e78/orjson-3.11.9-cp314-cp314-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl + - pypi: https://files.pythonhosted.org/packages/9e/b9/a6d8bb7d228940f01885bd9f327ab7f9d366a9be775c4bf366bf9d9477ae/kaleido-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/dd/b04e4a733637d370831e328a356254cfc9c875195269b234cc8ca31ff674/dags-0.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b1/29/c028a0731e202035f0e2e0bfbf1a3e46ad6c628cbb17f6f1cc9eea5d9ff1/pathlib_abc-0.5.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b1/49/a739be2e1d02a96a658eb71ab45d921c874249252358ad24a5bffdd02525/sqlalchemy-2.0.51-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b5/83/205e7af4153d9690c3cb94fa9cea670c0d26ce7f022aaa589a9e136f1491/jupyter_book-2.1.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ba/6c/ff8bf52315064dbeb55cb5067e191120a5b2e58bb648d0d34cf7969dc2c2/choreographer-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c7/18/c86eb8e0202e32dd3df50d43d7ff9854f8e0603945ff398974c1d91ac1ef/tomli_w-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/fc/8c82be70b8f96d09943360f34cfb2ecdd3035294c51bce4131eeabe56645/tabcompleter-1.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/80/7f1f1bf8c2d5dfd8e9c0e1191aa355ff8b80b5619f84d6dcc2703fa7fd5a/loky-3.5.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d1/a1/c5e46c3e42b866199365e35d11dddfd1fbd8bba4fdb3c52f965b1607ce94/msgspec-0.21.1-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/d7/54/c30cb1d08258612ece1dfa72c6918998bebecb916c54fca6d806bc780f2b/pytask-0.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dd/1a/5d9a402b39ec892d856bbdd9db502ff73ce28cdf4aff72eb1ce1d6843506/universal_pathlib-0.3.10-py3-none-any.whl - - pypi: ./ + - pypi: https://files.pythonhosted.org/packages/e5/22/4222d7ddf3da30f363edaa98e329c2bce6c65497c9cb2810931c8b2c0fbc/fsspec-2026.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f2/0d/27471ec9f1d04674f6e62de809412371e097aed3eca7d9483e677c54c214/jaxlib-0.10.2-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/f9/14/abe5ce876ab5b66ee3c691bf537fcd43d037aea55d447aacf74630a8f31e/plotly-6.8.0-py3-none-any.whl win-64: - - conda: https://conda.anaconda.org/conda-forge/win-64/_openmp_mutex-4.5-20_gnu.conda - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.12.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.14.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/argon2-cffi-bindings-25.1.0-py314h5a2d7ad_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.2.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.3.0-py314h680f03e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.14.3-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.3.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.3.0-hbca2aae_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-1.2.0-h2d644bc_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-bin-1.2.0-hfd05255_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-python-1.2.0-py314he701e3d_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-h4c7d964_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.6.0-py314h680f03e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.15.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.4.0-hac0b51c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-h4c7d964_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/cffi-2.0.0-py314h5a2d7ad_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.6.17-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/contourpy-1.3.3-py314hf309875_4.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.3-py314hd8ed1ab_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.6-py314hd8ed1ab_100.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/debugpy-1.8.20-py314hb98de8c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/filterpy-1.4.5-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.62.0-pyh7db6752_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.63.0-pyh7db6752_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/freetype-2.14.2-h57928b3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.2.0-pyh6dadd2b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.11.0-pyhccfa634_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.18-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.3.0-pyh6dadd2b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.14.1-pyhe2676ad_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.13.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.0.0-pyhcf101f3_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.15.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.1.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.26.0-hcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.3.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-builder-1.0.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.3.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.9.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyh6dadd2b_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.0-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.17.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.20.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.5.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.6.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.28.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/kiwisolver-1.5.0-py314hf309875_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.22.2-h0ea6238_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/lcms2-2.18-hf2c6c5f_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/lerc-4.1.0-hd936e49_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.11.0-5_hf2e6a31_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlicommon-1.2.0-hfd05255_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlidec-1.2.0-hfd05255_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlienc-1.2.0-hfd05255_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.11.0-5_h2a3cdd5_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.25-h51727cc_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.7.4-hac47afa_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h3d046cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype-2.14.2-h57928b3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype6-2.14.2-hdbac1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libgcc-15.2.0-h8ee18e1_18.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libgomp-15.2.0-h8ee18e1_18.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.12.2-default_h4379cf1_1000.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.18-hc1393d2_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.1.2-hfd05255_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.11.0-5_hf9ab0e9_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.2-hfd05255_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libmpdec-4.0.0-hfd05255_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.55-h7351971_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libsodium-1.0.21-h6a83c73_3.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.52.0-hf5d6505_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.1-h8f73337_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libwebp-base-1.6.0-h4d5522a_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_10.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.17.0-h0e4246c_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.2-h692994f_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.2-h5d26750_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/llvm-openmp-22.1.0-h4fa8253_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/markupsafe-3.0.3-py314h2359020_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/matplotlib-base-3.10.8-py314hfa45d96_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.2.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2025.3.0-hac47afa_455.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.3.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.17.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.22.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.11.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.17.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio2-1.7.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.4.2-py314h06c3c77_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/openjpeg-2.5.4-h0e57b4f_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.1-hf411b9b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pillow-12.1.1-py314h61b30b5_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/prek-0.3.6-h18a1a76_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.7-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.10.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.25.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/psutil-7.2.2-py314hc5dbbe4_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pthread-stubs-0.4-h0e40799_1002.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pybaum-0.1.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.14.3-h4b44e0e_101_cp314.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.3-h4df99d1_101.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.6-h4df99d1_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2026.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-311-py314h8f8f202_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pywinpty-2.0.15-py314h51f0985_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.3-py314h2359020_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pyzmq-27.1.0-py312h343a6d4_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/qhull-2020.2-hc790b64_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/rpds-py-0.30.0-py314h9f07db2_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/scipy-1.17.1-py314h221f224_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-2.1.0-pyh6dadd2b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2022.3.0-h3155e25_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyh6dadd2b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h6ed50ae_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/tornado-6.5.4-py314h5a2d7ad_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.15.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/unicodedata2-17.0.1-py314h5a2d7ad_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h41ae7f8_34.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_34.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.44.35208-h818238b_34.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.8.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/webcolors-25.10.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/win_inet_pton-1.1.0-pyh7428d3b_8.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xlrd-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/argon2-cffi-bindings-25.1.0-py314h5a2d7ad_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-auth-0.10.3-h4ad2c79_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-cal-0.9.14-h270aff2_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-common-0.14.0-hfd05255_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-compression-0.3.2-h1f21522_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-http-0.11.0-h4721ae0_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-io-0.26.3-h1a62f66_5.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-s3-0.12.6-h425879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-sdkutils-0.2.5-h1f21522_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-checksums-0.2.10-h1f21522_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-1.2.0-h2d644bc_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-bin-1.2.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-python-1.2.0-py314he701e3d_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cairo-1.18.4-h477c42c_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cffi-2.0.0-py314h5a2d7ad_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/contourpy-1.3.3-py314hf309875_4.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/debugpy-1.8.21-py314hb98de8c_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/fontconfig-2.18.1-hd47e2ca_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/freetype-2.14.3-h57928b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/fribidi-1.0.16-hfd05255_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/graphite2-1.3.15-hac47afa_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/h5py-3.16.0-nompi_py314h02517ec_102.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/harfbuzz-14.2.1-h5a1b470_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/hdf5-2.1.0-nompi_ha9ae7cf_108.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/icu-78.3-h637d24d_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/kiwisolver-1.5.0-py314hf309875_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.22.2-h719d79b_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/lcms2-2.19.1-hf2c6c5f_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/lerc-4.1.0-hd936e49_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libaec-1.1.5-haf901d7_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.11.0-8_h8455456_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlicommon-1.2.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlidec-1.2.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlienc-1.2.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.11.0-8_h2a3cdd5_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libcurl-8.20.0-h8206538_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.25-h51727cc_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.8.1-hac47afa_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h3d046cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype-2.14.3-h57928b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype6-2.14.3-hdbac1cb_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libgcc-15.2.0-h8ee18e1_19.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.88.1-h7ce1215_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libgomp-15.2.0-h8ee18e1_19.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.13.0-default_h049141e_1000.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.18-hc1393d2_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libintl-0.22.5-h5728263_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.1.4.1-hfd05255_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.11.0-8_hf9ab0e9_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.3-hfd05255_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libmpdec-4.0.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.58-h7351971_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libraqm-0.10.5-h781ae3c_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsodium-1.0.22-h6a83c73_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.2-hf5d6505_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libssh2-1.11.1-h9aa295b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.1-h8f73337_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libwebp-base-1.6.0-h4d5522a_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_10.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.17.0-h0e4246c_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.3-h3cfd58e_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.3-h8ef44ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.2-hfd05255_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/llvm-openmp-22.1.8-h4fa8253_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/markupsafe-3.0.3-py314h2359020_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/matplotlib-base-3.11.0-py314h6cfc8ec_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2026.0.0-hac47afa_908.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.5.0-py314h02f10f6_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/onemkl-license-2026.0.0-h57928b3_908.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openjpeg-2.5.4-h0e57b4f_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.3-hf411b9b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pcre2-10.47-hd2b5f0e_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pillow-12.2.0-py314h61b30b5_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pixman-0.46.4-h5112557_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/prek-0.4.5-h18a1a76_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/psutil-7.2.2-py314hc5dbbe4_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pthread-stubs-0.4-h0e40799_1002.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.14.6-h4b44e0e_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-312-py314hcaaf0b2_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pywinpty-2.0.15-py314h51f0985_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.3-py314h2359020_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pyzmq-27.1.0-py312h343a6d4_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/qhull-2020.2-hc790b64_5.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/rpds-py-2026.5.1-py314hc980628_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/scikit-learn-1.9.0-np2py314h1b5b07a_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/scipy-1.18.0-py314h221f224_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2023.0.0-hd3d4ead_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h6ed50ae_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tornado-6.5.7-py314h5a2d7ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/unicodedata2-17.0.1-py314h5a2d7ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.5-h1b7c187_39.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.51.36231-h1b9f54f_39.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.51.36231-h1b9f54f_39.conda - conda: https://conda.anaconda.org/conda-forge/win-64/winpty-0.4.3-4.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxau-1.0.12-hba3369d_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxdmcp-1.1.5-hba3369d_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/zeromq-4.3.5-h507cc87_10.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zeromq-4.3.5-h3a581c9_11.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zlib-1.3.2-hfd05255_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zlib-ng-2.3.3-h0261ad2_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/9f/d73dfb85d7a5b1a56a99adc50f2074029468168c970ff5daeade4ad819e4/choreographer-1.2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl + - pypi: . + - pypi: git+https://github.com/optimagic-dev/optimagic.git?branch=probability-allow-fixed-entries#ecd9ebe0dfb3abc09ab015d78774a30794d779d0 + - pypi: https://files.pythonhosted.org/packages/0d/7d/c592d1fa69c210be0d2743fffc598dfc2f54efa9671c5f6f5d1e151c6f4a/jaxlib-0.10.2-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/18/72/ec1b5cbdcb140c132e6c7bdf99bd73e4f675439e77126c88f472fcffa09c/simplejson-4.1.1-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/1a/aff8bb287a4b1400f69e09a53bd65de96aa5cee5691925b38731c67fc695/click_default_group-1.2.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/c1/a662f0a8f6e024fca239d493f278d9adf5de1c8408af46a53a76beb13534/dags-0.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/43/f5/ee39c6e92acc742c052f137b47c210cd0a1b72dcd3f98495528bb4d27761/flatten_dict-0.4.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e6/ab/fb21f4c939bb440104cc2b396d3be1d9b7a9fd3c6c2a53d98c45b3d7c954/fsspec-2026.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f3/ca/2101ca3d9223a1dc125140dbc063644dca76df6ff356531eb27bc267b446/greenlet-3.3.2-cp314-cp314-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/80/e4/88778c6a23b65224e5088e68fd0924e5bde2196a26e76edb3ea3543fed6a/jax-0.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/54/0d/a8e27c1c434e489883c1182bd52de27775b8a78013de62e6eabf80991df5/jaxlib-0.9.1-cp314-cp314-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/7b/91/984aca2ec129e2757d1e4e3c81c3fcda9d0f85b74670a094cc443d9ee949/joblib-1.5.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7c/25/6fe2dfc3d830ec614c5f83f88fc7472c4ed892b7f7f496367d31de4110c4/jupyter_book-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4b/97/f6de8d4af54d6401d6581a686cce3e3e2371a79ba459a449104e026c08bc/kaleido-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2d/44/b3a11f7aa34cb38f1b7f3df8bcd9fcd09bac9d342c2a2c9b8686c804bcd2/greenlet-3.5.2-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/38/55/792619469bab9882d8bbd5865d45a72f6478762d04a9af4bf0d08c503e95/pandas-3.0.3-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/45/d8/55e0901103c93d57bab3b932294c216f0cbd49054187ce29f8f13808d530/jaxopt-0.8.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/51/fe/53ac0cd932db5dcaf55961bc7cb7afdca8d80d8cc7406ed661f0c7dc111a/pdbp-1.8.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/6aa79ba3570bddd1bf7e951c6123f806751e58e8cce736bad77b2cf348d7/logistro-2.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ce/80/7f1f1bf8c2d5dfd8e9c0e1191aa355ff8b80b5619f84d6dcc2703fa7fd5a/loky-3.5.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e9/93/2bfed22d2498c468f6bcd0d9f56b033eaa19f33320389314c19ef6766413/ml_dtypes-0.5.4-cp314-cp314-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/fe/75/0b4a10da17a44cf13567d08a9c7632a285297e46253263f1ae119129d10a/narwhals-2.18.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5b/f2/44a7dd795a52d34d033b1cb1a6b1162eada650079e557e236fb6b88943be/pytask_parallel-0.5.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/cc/18245721fa7747065ab478316c7fea7c74777d07f37ae60db2e84f8172e8/beartype-0.22.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/72/9f/485516087cd8c44183aaf9ab850247a28e2e4a42a4d62eab77c21f673450/flatten_dict-0.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/78/55b12e70f45bccc40d9e483925c065027b3b98ea4cbbdf6f8c2546feaf6c/sqlalchemy-2.0.51-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/91/85/08c4e13a90a13c509d1fe09596dd8198338b6cfff9ee280f01ae7694889e/optimagic-0.5.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7e/c3/587cc9aa8d4742cd690da79460081e7d834499e07e8b2bd2ccc4c66928df/optree-0.19.0-cp314-cp314-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/12/df/172771902943af54bf661a8d102bdf2e7f932127968080632bda6054b62c/orjson-3.11.7-cp314-cp314-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/09/f8/8ce132104074f977f907442790eaae24e27bce3b3b454e82faa3237ff098/pandas-3.0.1-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/89/82/5ab5211079a151b6f661529369c0c8e98ec64cabf5c0cf22a0a05af124d8/jax-0.10.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/c3/4f2f318b98465376bbb7a06a33da553c688b3ed39dafbb8307f824eef74a/optree-0.19.1-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/9e/b9/a6d8bb7d228940f01885bd9f327ab7f9d366a9be775c4bf366bf9d9477ae/kaleido-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/dd/b04e4a733637d370831e328a356254cfc9c875195269b234cc8ca31ff674/dags-0.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b1/29/c028a0731e202035f0e2e0bfbf1a3e46ad6c628cbb17f6f1cc9eea5d9ff1/pathlib_abc-0.5.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/51/fe/53ac0cd932db5dcaf55961bc7cb7afdca8d80d8cc7406ed661f0c7dc111a/pdbp-1.8.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5a/dc/491b7661614ab97483abf2056be1deee4dc2490ecbf7bff9ab5cdbac86e1/pyreadline3-3.5.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/80/b2/bba963dfce0fcbc5020a4f8b4361e132390c4bd78b46cfc7ae355e678b96/pytask-0.5.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/b9/19ecce5c57114b703b97378ded69ffde1f9f9d471d4db361bbfa6105861e/pytask_parallel-0.5.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fa/b6/3127540ecdf1464a00e5a01ee60a1b09175f6913f0644ac748494d9c4b21/pytest_timeout-2.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/14/25/b208c5683343959b670dc001595f2f3737e051da617f66c31f7c4fa93abc/rich-14.3.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/05/5b/83e1ff87eb60ca706972f7e02e15c0b33396e7bdbd080069a5d1b53cf0d8/simplejson-3.20.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/95/7e/e83615cb63f80047f18e61e31e8e32257d39458426c23006deeaf48f463b/sqlalchemy-2.0.48-cp314-cp314-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/65/44/bb509c3d2c0b5a87e7a5af1d5917a402a32ff026f777a6d7cb6990746cbb/tabcompleter-1.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b5/83/205e7af4153d9690c3cb94fa9cea670c0d26ce7f022aaa589a9e136f1491/jupyter_book-2.1.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ba/6c/ff8bf52315064dbeb55cb5067e191120a5b2e58bb648d0d34cf7969dc2c2/choreographer-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c4/33/265c894268cca88ff67b144ca2b4c522fc8b9a6f1966a3640c70516e78e1/msgspec-0.21.1-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c7/18/c86eb8e0202e32dd3df50d43d7ff9854f8e0603945ff398974c1d91ac1ef/tomli_w-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/fc/8c82be70b8f96d09943360f34cfb2ecdd3035294c51bce4131eeabe56645/tabcompleter-1.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/80/7f1f1bf8c2d5dfd8e9c0e1191aa355ff8b80b5619f84d6dcc2703fa7fd5a/loky-3.5.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d7/54/c30cb1d08258612ece1dfa72c6918998bebecb916c54fca6d806bc780f2b/pytask-0.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dd/1a/5d9a402b39ec892d856bbdd9db502ff73ce28cdf4aff72eb1ce1d6843506/universal_pathlib-0.3.10-py3-none-any.whl - - pypi: ./ + - pypi: https://files.pythonhosted.org/packages/e5/22/4222d7ddf3da30f363edaa98e329c2bce6c65497c9cb2810931c8b2c0fbc/fsspec-2026.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e9/93/2bfed22d2498c468f6bcd0d9f56b033eaa19f33320389314c19ef6766413/ml_dtypes-0.5.4-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/f3/c3/0c6798456bade745c75c452342dabacce5798196483e77e643be1f53877d/orjson-3.11.9-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/f7/5e/35c856e186b74678c24927847ad9895a51f1bc02a0c6126477a6c6040064/pyreadline3-3.5.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f9/14/abe5ce876ab5b66ee3c691bf537fcd43d037aea55d447aacf74630a8f31e/plotly-6.8.0-py3-none-any.whl docs: channels: - url: https://conda.anaconda.org/conda-forge/ indexes: - https://pypi.org/simple - options: - pypi-prerelease-mode: if-necessary-or-explicit packages: linux-64: - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.12.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/argon2-cffi-bindings-25.1.0-py314h5bd0f2a_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.2.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.3.0-py314h680f03e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.14.3-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.3.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.3.0-hbca2aae_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.10.3-hd2277e8_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.14-h78948cc_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.14.0-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.2-haa0cbde_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.11.0-h6488f85_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.26.3-h3bf836e_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.12.6-hb916526_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.5-haa0cbde_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.10-haa0cbde_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.2.0-hed03a55_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.2.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py314h3de4e8d_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-he90730b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py314h4a8dc5f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py314h97ea11e_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.21-py314h42812f9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.18.1-h27c8c51_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.3-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.16-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.15-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.16.0-nompi_py314hddf7a69_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-14.2.1-h6083320_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-2.1.0-nompi_h7d5651c_108.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.5.0-py314h97ea11e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-hbde042b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.19.1-h0c24ade_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.5-h088129d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-8_h4a7cf45_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-8_h0358290_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.20.0-hcf29cc6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.3-h73754d4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.88.1-h0d30a3d_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.4.1-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-8_h47877c9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h877daf1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.33-pthreads_h94d23a6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.58-h421ea60_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libraqm-0.10.5-h75b3fb1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.22-h280c20c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.2-h0c1763c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.2-h5347b49_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py314h67df5f8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.11.0-py314h261f116_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.5.0-py314h2b28147_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.3-h35e630c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.2.0-py314h8ec4b1a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/prek-0.4.5-hb17b654_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.2-py314h0f05182_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.6-habeac84_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py314h67df5f8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-2026.5.1-py314h1bee95f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.7.4-h92489ea_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.9.0-np2py314hf09ca88_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.18.0-py314hf07bd8e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.7-py314h5bd0f2a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-17.0.1-py314h5bd0f2a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-he73a12e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.13-he1eb515_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.7-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h09e67af_11.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.14.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.6.0-py314h680f03e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.15.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.4.0-hac0b51c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py314h4a8dc5f_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.6-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.6.17-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py314h97ea11e_4.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.3-py314hd8ed1ab_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.6-py314hd8ed1ab_100.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.20-py314h42812f9_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/filterpy-1.4.5-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.62.0-pyh7db6752_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.63.0-pyh7db6752_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.2-ha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.2.0-pyha191276_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.11.0-pyhecfbec7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.18-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.3.0-pyha191276_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.14.1-pyh53cf698_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.13.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.0.0-pyhcf101f3_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.15.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.1.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.26.0-hcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.3.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-builder-1.0.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.3.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.9.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.0-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.17.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.20.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.5.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.6.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.28.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.5.0-py314h97ea11e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.18-h0c24ade_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-5_h4a7cf45_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-5_h0358290_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.2-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.2-h73754d4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.2-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-5_h47877c9_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.55-h421ea60_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.21-h280c20c_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py314h67df5f8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.10.8-py314h1194b4b_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.2.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.2.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.3.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.17.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.22.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.11.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.17.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio2-1.7.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.2-py314h2b28147_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.7-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.1.1-py314h8ec4b1a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.10.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/prek-0.3.6-hb17b654_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.25.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.2-py314h0f05182_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pybaum-0.1.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.2-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.3-h32b2ec7_101_cp314.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.3-h4df99d1_101.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.6-h4df99d1_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2026.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py314h67df5f8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.3-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.30.0-py314h2e6c369_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.17.1-py314hf07bd8e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-15.0.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-2.1.0-pyha191276_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyhc90fa1f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.3-py314h5bd0f2a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.15.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-17.0.1-py314h5bd0f2a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.8.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/webcolors-25.10.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h41580af_10.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/9f/d73dfb85d7a5b1a56a99adc50f2074029468168c970ff5daeade4ad819e4/choreographer-1.2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl + - conda: https://conda.anaconda.org/conda-forge/noarch/xlrd-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda + - pypi: . + - pypi: git+https://github.com/optimagic-dev/optimagic.git?branch=probability-allow-fixed-entries#ecd9ebe0dfb3abc09ab015d78774a30794d779d0 + - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/1f/cca084ca2572810fff12ea9dbdcbe39eac048f40daf4a9077b49fcbe8cee/msgspec-0.21.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/2c/1a/aff8bb287a4b1400f69e09a53bd65de96aa5cee5691925b38731c67fc695/click_default_group-1.2.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/c1/a662f0a8f6e024fca239d493f278d9adf5de1c8408af46a53a76beb13534/dags-0.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/43/f5/ee39c6e92acc742c052f137b47c210cd0a1b72dcd3f98495528bb4d27761/flatten_dict-0.4.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e6/ab/fb21f4c939bb440104cc2b396d3be1d9b7a9fd3c6c2a53d98c45b3d7c954/fsspec-2026.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d2/d8/09bfa816572a4d83bccd6750df1926f79158b1c36c5f73786e26dbe4ee38/greenlet-3.3.2-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/80/e4/88778c6a23b65224e5088e68fd0924e5bde2196a26e76edb3ea3543fed6a/jax-0.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/76/fe/67d2c414b0860d42f4a20b1fadbe7aeffb1b3d885efebd7aedf22a4bc2a2/jaxlib-0.9.1-cp314-cp314-manylinux_2_27_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/7b/91/984aca2ec129e2757d1e4e3c81c3fcda9d0f85b74670a094cc443d9ee949/joblib-1.5.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7c/25/6fe2dfc3d830ec614c5f83f88fc7472c4ed892b7f7f496367d31de4110c4/jupyter_book-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4b/97/f6de8d4af54d6401d6581a686cce3e3e2371a79ba459a449104e026c08bc/kaleido-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/45/d8/55e0901103c93d57bab3b932294c216f0cbd49054187ce29f8f13808d530/jaxopt-0.8.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/51/fe/53ac0cd932db5dcaf55961bc7cb7afdca8d80d8cc7406ed661f0c7dc111a/pdbp-1.8.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/6aa79ba3570bddd1bf7e951c6123f806751e58e8cce736bad77b2cf348d7/logistro-2.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ce/80/7f1f1bf8c2d5dfd8e9c0e1191aa355ff8b80b5619f84d6dcc2703fa7fd5a/loky-3.5.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c6/bb/82c7dcf38070b46172a517e2334e665c5bf374a262f99a283ea454bece7c/ml_dtypes-0.5.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/fe/75/0b4a10da17a44cf13567d08a9c7632a285297e46253263f1ae119129d10a/narwhals-2.18.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/58/3b/1cdec6772bdbaf7b25dab360c59f03cadf05492dd724c6540af905389b07/pandas-3.0.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/5b/f2/44a7dd795a52d34d033b1cb1a6b1162eada650079e557e236fb6b88943be/pytask_parallel-0.5.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/69/77/ac054882c220872512df28d16aeb648fe0e651efbb5be4fd7c4817fd88b0/jaxlib-0.10.2-cp314-cp314-manylinux_2_27_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/71/cc/18245721fa7747065ab478316c7fea7c74777d07f37ae60db2e84f8172e8/beartype-0.22.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/72/9f/485516087cd8c44183aaf9ab850247a28e2e4a42a4d62eab77c21f673450/flatten_dict-0.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/76/3e/c0b690253f0b82d86e99949af13533363acfb5432ecb5d53dd5b3bce9c34/orjson-3.11.9-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/78/91/3635cdb13318cb0a328abaa69e2b91251caad39d6779aa308098f341f6cb/simplejson-4.1.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/91/85/08c4e13a90a13c509d1fe09596dd8198338b6cfff9ee280f01ae7694889e/optimagic-0.5.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fe/16/00261f20f467b9e8950a76ec1749f01359bf47f2fc3dac5e206de99835c0/optree-0.19.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/c2/8b/ecdad52d0b38d4b8f514be603e69ccd5eacf4e7241f972e37e79792212ec/orjson-3.11.7-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/55/77/6ea82043db22cb0f2bbfe7198da3544000ddaadb12d26be36e19b03a2dc5/pandas-3.0.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/89/82/5ab5211079a151b6f661529369c0c8e98ec64cabf5c0cf22a0a05af124d8/jax-0.10.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/99/69/d6c99db15dc0b5e892ac3cc7b942c8b21f4a9cc3bd9ea0bc3b0f339ffbd4/greenlet-3.5.2-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/9c/1a/4834b1f2fb1847412353d7342eb7a1d001a4f3bd9d24155e057135a4aa44/optree-0.19.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/9e/b9/a6d8bb7d228940f01885bd9f327ab7f9d366a9be775c4bf366bf9d9477ae/kaleido-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/dd/b04e4a733637d370831e328a356254cfc9c875195269b234cc8ca31ff674/dags-0.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b1/29/c028a0731e202035f0e2e0bfbf1a3e46ad6c628cbb17f6f1cc9eea5d9ff1/pathlib_abc-0.5.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/51/fe/53ac0cd932db5dcaf55961bc7cb7afdca8d80d8cc7406ed661f0c7dc111a/pdbp-1.8.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/80/b2/bba963dfce0fcbc5020a4f8b4361e132390c4bd78b46cfc7ae355e678b96/pytask-0.5.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/b9/19ecce5c57114b703b97378ded69ffde1f9f9d471d4db361bbfa6105861e/pytask_parallel-0.5.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fa/b6/3127540ecdf1464a00e5a01ee60a1b09175f6913f0644ac748494d9c4b21/pytest_timeout-2.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/05/5b/83e1ff87eb60ca706972f7e02e15c0b33396e7bdbd080069a5d1b53cf0d8/simplejson-3.20.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f2/5e/327428a034407651a048f5e624361adf3f9fbac9d0fa98e981e9c6ff2f5e/sqlalchemy-2.0.48-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/65/44/bb509c3d2c0b5a87e7a5af1d5917a402a32ff026f777a6d7cb6990746cbb/tabcompleter-1.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b5/83/205e7af4153d9690c3cb94fa9cea670c0d26ce7f022aaa589a9e136f1491/jupyter_book-2.1.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ba/6c/ff8bf52315064dbeb55cb5067e191120a5b2e58bb648d0d34cf7969dc2c2/choreographer-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/bb/82c7dcf38070b46172a517e2334e665c5bf374a262f99a283ea454bece7c/ml_dtypes-0.5.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c7/18/c86eb8e0202e32dd3df50d43d7ff9854f8e0603945ff398974c1d91ac1ef/tomli_w-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/fc/8c82be70b8f96d09943360f34cfb2ecdd3035294c51bce4131eeabe56645/tabcompleter-1.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/80/7f1f1bf8c2d5dfd8e9c0e1191aa355ff8b80b5619f84d6dcc2703fa7fd5a/loky-3.5.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d7/54/c30cb1d08258612ece1dfa72c6918998bebecb916c54fca6d806bc780f2b/pytask-0.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dd/1a/5d9a402b39ec892d856bbdd9db502ff73ce28cdf4aff72eb1ce1d6843506/universal_pathlib-0.3.10-py3-none-any.whl - - pypi: ./ + - pypi: https://files.pythonhosted.org/packages/dd/a1/e77854cb5336fd37dc3c6ae3b71de242c98caac5725120be0b526b31cbd0/sqlalchemy-2.0.51-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e5/22/4222d7ddf3da30f363edaa98e329c2bce6c65497c9cb2810931c8b2c0fbc/fsspec-2026.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f9/14/abe5ce876ab5b66ee3c691bf537fcd43d037aea55d447aacf74630a8f31e/plotly-6.8.0-py3-none-any.whl osx-arm64: - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.conda - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.12.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.14.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/appnope-0.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/argon2-cffi-bindings-25.1.0-py314h0612a62_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.2.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.3.0-py314h680f03e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.14.3-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.3.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.3.0-hbca2aae_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-1.2.0-h7d5ae5b_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-bin-1.2.0-hc919400_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.2.0-py314h3daef5d_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.6.0-py314h680f03e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.15.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.4.0-hac0b51c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-2.0.0-py314h44086f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.6-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.6.17-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/contourpy-1.3.3-py314hf8a3a22_4.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.3-py314hd8ed1ab_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.6-py314hd8ed1ab_100.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/debugpy-1.8.20-py314he609de1_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/filterpy-1.4.5-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.62.0-pyh7db6752_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.63.0-pyh7db6752_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.14.2-hce30654_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.2.0-pyh5552912_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.11.0-pyhecfbec7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.18-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.3.0-pyh01cf8df_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.14.1-pyh53cf698_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.13.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.0.0-pyhcf101f3_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.15.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.1.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.26.0-hcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.3.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-builder-1.0.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.3.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.9.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.0-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.17.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.20.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.5.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.6.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.28.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/kiwisolver-1.5.0-py314hf8a3a22_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-h385eeb1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.18-hdfa7624_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.1.0-h1eee2c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.11.0-5_h51639a9_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.2.0-hc919400_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.2.0-hc919400_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.2.0-hc919400_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.11.0-5_hb0561ab_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.1-h55c6f16_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.25-hc11a715_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype-2.14.2-hce30654_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype6-2.14.2-hdfa99f5_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgcc-15.2.0-hcbb3090_18.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-h07b0088_18.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-hdae7583_18.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.1.2-hc919400_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.11.0-5_hd9741b5_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.30-openmp_ha158390_4.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.55-h132b30e_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.21-h1a92334_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.52.0-h1ae2325_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.1-h4030677_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.6.0-h07db88b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-22.1.0-hc7d1edf_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.3-py314h6e9b3f0_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/matplotlib-base-3.10.8-py314hd63e3f0_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.2.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.2.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.3.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.17.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.22.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.11.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.17.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio2-1.7.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.4.2-py314hae46ccb_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.4-hd9e9057_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.7-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-12.1.1-py314hab283cf_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.10.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/prek-0.3.6-h6fdd925_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.25.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-7.2.2-py314ha14b1ff_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-hd74edd7_1002.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pybaum-0.1.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-core-12.1-py314h3a4d195_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-framework-cocoa-12.1-py314h36abed7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.2-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.14.3-h4c637c5_101_cp314.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.3-h4df99d1_101.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.6-h4df99d1_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2026.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.3-py314h6e9b3f0_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312h022ad19_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/qhull-2020.2-h420ef59_5.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.3-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rpds-py-0.30.0-py314haad56a0_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scipy-1.17.1-py314hfc1f868_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-15.0.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-2.1.0-pyh5552912_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyhc90fa1f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.4-py314h0612a62_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.15.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/unicodedata2-17.0.1-py314h6c2aa35_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.8.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/webcolors-25.10.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.12-hc919400_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hc919400_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h4818236_10.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-ng-2.3.3-hed4e4f5_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/9f/d73dfb85d7a5b1a56a99adc50f2074029468168c970ff5daeade4ad819e4/choreographer-1.2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl + - conda: https://conda.anaconda.org/conda-forge/noarch/xlrd-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/argon2-cffi-bindings-25.1.0-py314h0612a62_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.10.3-hc11c9a1_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-cal-0.9.14-h81c6212_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-common-0.14.0-h84a0fba_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-compression-0.3.2-h61d3404_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-http-0.11.0-h0a63974_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-io-0.26.3-h58c0f83_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-s3-0.12.6-h43def2a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.2.5-h61d3404_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-checksums-0.2.10-h61d3404_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-1.2.0-h7d5ae5b_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-bin-1.2.0-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.2.0-py314h3daef5d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.6-hc919400_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cairo-1.18.4-he0f2337_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-2.0.0-py314h44086f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/contourpy-1.3.3-py314hf8a3a22_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/debugpy-1.8.21-py314he609de1_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fontconfig-2.18.1-h2b252f5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.14.3-hce30654_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fribidi-1.0.16-hc919400_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/graphite2-1.3.15-hf6b4638_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/h5py-3.16.0-nompi_py314h658a3ac_102.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/harfbuzz-14.2.1-h3103d1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/hdf5-2.1.0-nompi_hb7e0c14_108.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/kiwisolver-1.5.0-py314hf8a3a22_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-hfd3d5f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.19.1-hdfa7624_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.1.0-h1eee2c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libaec-1.1.5-h8664d51_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.11.0-8_h51639a9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.2.0-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.2.0-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.2.0-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.11.0-8_hb0561ab_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.20.0-hd5a2499_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.8-h55c6f16_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.25-hc11a715_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.8.1-hf6b4638_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype-2.14.3-hce30654_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype6-2.14.3-hdfa99f5_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgcc-15.2.0-hcbb3090_19.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-h07b0088_19.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-hdae7583_19.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libglib-2.88.1-ha08bb59_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.18-h23cfdf5_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libintl-0.25.1-h493aca8_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.1.4.1-h84a0fba_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.11.0-8_hd9741b5_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.3-h8088a28_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.68.1-h8f3e76b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.33-openmp_he657e61_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.58-h132b30e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libraqm-0.10.5-h29bd36a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.22-h1a92334_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.2-h1ae2325_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h1590b86_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.1-h4030677_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.6.0-h07db88b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-22.1.8-hc7d1edf_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.3-py314h6e9b3f0_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/matplotlib-base-3.11.0-py314ha5eae4c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.6-h1d4f5a5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.5.0-py314hb79c6fa_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.4-hd9e9057_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.3-hd24854e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.47-h30297fc_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-12.2.0-py314hab283cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pixman-0.46.4-h81086ad_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/prek-0.4.5-h6fdd925_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-7.2.2-py314ha14b1ff_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-hd74edd7_1002.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-core-12.1-py314h3a4d195_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-framework-cocoa-12.1-py314h36abed7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.14.6-h156bc91_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.3-py314h6e9b3f0_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312h022ad19_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/qhull-2020.2-h420ef59_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rpds-py-2026.5.1-py314he1d1ac0_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-learn-1.9.0-np2py314h15f0f0f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scipy-1.18.0-py314h18e1515_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.7-py314h6c2aa35_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/unicodedata2-17.0.1-py314h6c2aa35_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.12-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h10816f8_11.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-ng-2.3.3-hed4e4f5_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda + - pypi: . + - pypi: git+https://github.com/optimagic-dev/optimagic.git?branch=probability-allow-fixed-entries#ecd9ebe0dfb3abc09ab015d78774a30794d779d0 + - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/1a/aff8bb287a4b1400f69e09a53bd65de96aa5cee5691925b38731c67fc695/click_default_group-1.2.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/c1/a662f0a8f6e024fca239d493f278d9adf5de1c8408af46a53a76beb13534/dags-0.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/43/f5/ee39c6e92acc742c052f137b47c210cd0a1b72dcd3f98495528bb4d27761/flatten_dict-0.4.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e6/ab/fb21f4c939bb440104cc2b396d3be1d9b7a9fd3c6c2a53d98c45b3d7c954/fsspec-2026.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/80/e4/88778c6a23b65224e5088e68fd0924e5bde2196a26e76edb3ea3543fed6a/jax-0.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a4/b0/f2c9caa6f545d4ecc1eab528c68c9191e40087f1bc79a6da2e29c6416510/jaxlib-0.9.1-cp314-cp314-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/7b/91/984aca2ec129e2757d1e4e3c81c3fcda9d0f85b74670a094cc443d9ee949/joblib-1.5.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7c/25/6fe2dfc3d830ec614c5f83f88fc7472c4ed892b7f7f496367d31de4110c4/jupyter_book-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4b/97/f6de8d4af54d6401d6581a686cce3e3e2371a79ba459a449104e026c08bc/kaleido-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/45/d8/55e0901103c93d57bab3b932294c216f0cbd49054187ce29f8f13808d530/jaxopt-0.8.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/49/cc/14dd93887295859457e507fc46a847b68ae8f20c42b2fde4d8a749c94bbc/optree-0.19.1-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/51/fe/53ac0cd932db5dcaf55961bc7cb7afdca8d80d8cc7406ed661f0c7dc111a/pdbp-1.8.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/6aa79ba3570bddd1bf7e951c6123f806751e58e8cce736bad77b2cf348d7/logistro-2.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ce/80/7f1f1bf8c2d5dfd8e9c0e1191aa355ff8b80b5619f84d6dcc2703fa7fd5a/loky-3.5.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5b/f2/44a7dd795a52d34d033b1cb1a6b1162eada650079e557e236fb6b88943be/pytask_parallel-0.5.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/68/10/bf2d6738d72748b961a3751ab89522d58c54efc36a8e1a12161216cd45cf/pandas-3.0.3-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/68/31/9a5432c433a7671107182cdc9a20ea78a70f99c4e5334aa54b6d4d0d79ed/simplejson-4.1.1-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/71/cc/18245721fa7747065ab478316c7fea7c74777d07f37ae60db2e84f8172e8/beartype-0.22.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/72/4e/1339dc6e2557a344f5ba5590872e80346f76f6cb2ac3dd16e4666e88818c/ml_dtypes-0.5.4-cp314-cp314-macosx_10_13_universal2.whl - - pypi: https://files.pythonhosted.org/packages/fe/75/0b4a10da17a44cf13567d08a9c7632a285297e46253263f1ae119129d10a/narwhals-2.18.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/72/9f/485516087cd8c44183aaf9ab850247a28e2e4a42a4d62eab77c21f673450/flatten_dict-0.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/91/85/08c4e13a90a13c509d1fe09596dd8198338b6cfff9ee280f01ae7694889e/optimagic-0.5.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/08/67/2e19866a03a6e75eb62194a5b55e1e3154ca1517478c300232b0229f8c2a/optree-0.19.0-cp314-cp314-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/e9/1e/745565dca749813db9a093c5ebc4bac1a9475c64d54b95654336ac3ed961/orjson-3.11.7-cp314-cp314-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl - - pypi: https://files.pythonhosted.org/packages/72/3a/5b39b51c64159f470f1ca3b1c2a87da290657ca022f7cd11442606f607d1/pandas-3.0.1-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/89/82/5ab5211079a151b6f661529369c0c8e98ec64cabf5c0cf22a0a05af124d8/jax-0.10.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8e/eb/5da01e356015aee6ecfa1187ced87aef51364e306f5e695dd52719bf0e78/orjson-3.11.9-cp314-cp314-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl + - pypi: https://files.pythonhosted.org/packages/9e/b9/a6d8bb7d228940f01885bd9f327ab7f9d366a9be775c4bf366bf9d9477ae/kaleido-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/dd/b04e4a733637d370831e328a356254cfc9c875195269b234cc8ca31ff674/dags-0.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b1/29/c028a0731e202035f0e2e0bfbf1a3e46ad6c628cbb17f6f1cc9eea5d9ff1/pathlib_abc-0.5.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/51/fe/53ac0cd932db5dcaf55961bc7cb7afdca8d80d8cc7406ed661f0c7dc111a/pdbp-1.8.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/80/b2/bba963dfce0fcbc5020a4f8b4361e132390c4bd78b46cfc7ae355e678b96/pytask-0.5.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/b9/19ecce5c57114b703b97378ded69ffde1f9f9d471d4db361bbfa6105861e/pytask_parallel-0.5.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fa/b6/3127540ecdf1464a00e5a01ee60a1b09175f6913f0644ac748494d9c4b21/pytest_timeout-2.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/05/5b/83e1ff87eb60ca706972f7e02e15c0b33396e7bdbd080069a5d1b53cf0d8/simplejson-3.20.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f7/b3/f437eaa1cf028bb3c927172c7272366393e73ccd104dcf5b6963f4ab5318/sqlalchemy-2.0.48-cp314-cp314-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/65/44/bb509c3d2c0b5a87e7a5af1d5917a402a32ff026f777a6d7cb6990746cbb/tabcompleter-1.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b1/49/a739be2e1d02a96a658eb71ab45d921c874249252358ad24a5bffdd02525/sqlalchemy-2.0.51-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/b5/83/205e7af4153d9690c3cb94fa9cea670c0d26ce7f022aaa589a9e136f1491/jupyter_book-2.1.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ba/6c/ff8bf52315064dbeb55cb5067e191120a5b2e58bb648d0d34cf7969dc2c2/choreographer-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c7/18/c86eb8e0202e32dd3df50d43d7ff9854f8e0603945ff398974c1d91ac1ef/tomli_w-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/fc/8c82be70b8f96d09943360f34cfb2ecdd3035294c51bce4131eeabe56645/tabcompleter-1.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/80/7f1f1bf8c2d5dfd8e9c0e1191aa355ff8b80b5619f84d6dcc2703fa7fd5a/loky-3.5.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d1/a1/c5e46c3e42b866199365e35d11dddfd1fbd8bba4fdb3c52f965b1607ce94/msgspec-0.21.1-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/d7/54/c30cb1d08258612ece1dfa72c6918998bebecb916c54fca6d806bc780f2b/pytask-0.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dd/1a/5d9a402b39ec892d856bbdd9db502ff73ce28cdf4aff72eb1ce1d6843506/universal_pathlib-0.3.10-py3-none-any.whl - - pypi: ./ + - pypi: https://files.pythonhosted.org/packages/e5/22/4222d7ddf3da30f363edaa98e329c2bce6c65497c9cb2810931c8b2c0fbc/fsspec-2026.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f2/0d/27471ec9f1d04674f6e62de809412371e097aed3eca7d9483e677c54c214/jaxlib-0.10.2-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/f9/14/abe5ce876ab5b66ee3c691bf537fcd43d037aea55d447aacf74630a8f31e/plotly-6.8.0-py3-none-any.whl win-64: - - conda: https://conda.anaconda.org/conda-forge/win-64/_openmp_mutex-4.5-20_gnu.conda - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.12.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.14.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/argon2-cffi-bindings-25.1.0-py314h5a2d7ad_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.2.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.3.0-py314h680f03e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.14.3-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.3.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.3.0-hbca2aae_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-1.2.0-h2d644bc_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-bin-1.2.0-hfd05255_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-python-1.2.0-py314he701e3d_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-h4c7d964_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.6.0-py314h680f03e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.15.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.4.0-hac0b51c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-h4c7d964_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/cffi-2.0.0-py314h5a2d7ad_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.6.17-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/contourpy-1.3.3-py314hf309875_4.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.3-py314hd8ed1ab_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.6-py314hd8ed1ab_100.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/debugpy-1.8.20-py314hb98de8c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/filterpy-1.4.5-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.62.0-pyh7db6752_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.63.0-pyh7db6752_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/freetype-2.14.2-h57928b3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.2.0-pyh6dadd2b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.11.0-pyhccfa634_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.18-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.3.0-pyh6dadd2b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.14.1-pyhe2676ad_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.13.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.0.0-pyhcf101f3_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.15.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.1.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.26.0-hcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.3.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-builder-1.0.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.3.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.9.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyh6dadd2b_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.0-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.17.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.20.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.5.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.6.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.28.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/kiwisolver-1.5.0-py314hf309875_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.22.2-h0ea6238_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/lcms2-2.18-hf2c6c5f_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/lerc-4.1.0-hd936e49_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.11.0-5_hf2e6a31_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlicommon-1.2.0-hfd05255_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlidec-1.2.0-hfd05255_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlienc-1.2.0-hfd05255_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.11.0-5_h2a3cdd5_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.25-h51727cc_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.7.4-hac47afa_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h3d046cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype-2.14.2-h57928b3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype6-2.14.2-hdbac1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libgcc-15.2.0-h8ee18e1_18.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libgomp-15.2.0-h8ee18e1_18.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.12.2-default_h4379cf1_1000.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.18-hc1393d2_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.1.2-hfd05255_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.11.0-5_hf9ab0e9_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.2-hfd05255_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libmpdec-4.0.0-hfd05255_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.55-h7351971_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libsodium-1.0.21-h6a83c73_3.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.52.0-hf5d6505_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.1-h8f73337_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libwebp-base-1.6.0-h4d5522a_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_10.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.17.0-h0e4246c_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.2-h692994f_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.2-h5d26750_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/llvm-openmp-22.1.0-h4fa8253_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/markupsafe-3.0.3-py314h2359020_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/matplotlib-base-3.10.8-py314hfa45d96_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.2.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2025.3.0-hac47afa_455.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.3.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.17.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.22.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.11.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.17.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio2-1.7.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.4.2-py314h06c3c77_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/openjpeg-2.5.4-h0e57b4f_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.1-hf411b9b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pillow-12.1.1-py314h61b30b5_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.7-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.10.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/prek-0.3.6-h18a1a76_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.25.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/psutil-7.2.2-py314hc5dbbe4_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pthread-stubs-0.4-h0e40799_1002.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pybaum-0.1.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.2-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.14.3-h4b44e0e_101_cp314.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.3-h4df99d1_101.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.6-h4df99d1_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2026.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-311-py314h8f8f202_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pywinpty-2.0.15-py314h51f0985_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.3-py314h2359020_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pyzmq-27.1.0-py312h343a6d4_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/qhull-2020.2-hc790b64_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/rpds-py-0.30.0-py314h9f07db2_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/scipy-1.17.1-py314h221f224_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-2.1.0-pyh6dadd2b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2022.3.0-h3155e25_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyh6dadd2b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h6ed50ae_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/tornado-6.5.4-py314h5a2d7ad_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.15.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/unicodedata2-17.0.1-py314h5a2d7ad_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h41ae7f8_34.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_34.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.44.35208-h818238b_34.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.8.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/webcolors-25.10.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/win_inet_pton-1.1.0-pyh7428d3b_8.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xlrd-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/argon2-cffi-bindings-25.1.0-py314h5a2d7ad_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-auth-0.10.3-h4ad2c79_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-cal-0.9.14-h270aff2_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-common-0.14.0-hfd05255_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-compression-0.3.2-h1f21522_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-http-0.11.0-h4721ae0_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-io-0.26.3-h1a62f66_5.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-s3-0.12.6-h425879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-sdkutils-0.2.5-h1f21522_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-checksums-0.2.10-h1f21522_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-1.2.0-h2d644bc_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-bin-1.2.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-python-1.2.0-py314he701e3d_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cairo-1.18.4-h477c42c_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cffi-2.0.0-py314h5a2d7ad_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/contourpy-1.3.3-py314hf309875_4.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/debugpy-1.8.21-py314hb98de8c_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/fontconfig-2.18.1-hd47e2ca_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/freetype-2.14.3-h57928b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/fribidi-1.0.16-hfd05255_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/graphite2-1.3.15-hac47afa_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/h5py-3.16.0-nompi_py314h02517ec_102.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/harfbuzz-14.2.1-h5a1b470_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/hdf5-2.1.0-nompi_ha9ae7cf_108.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/icu-78.3-h637d24d_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/kiwisolver-1.5.0-py314hf309875_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.22.2-h719d79b_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/lcms2-2.19.1-hf2c6c5f_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/lerc-4.1.0-hd936e49_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libaec-1.1.5-haf901d7_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.11.0-8_h8455456_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlicommon-1.2.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlidec-1.2.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlienc-1.2.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.11.0-8_h2a3cdd5_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libcurl-8.20.0-h8206538_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.25-h51727cc_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.8.1-hac47afa_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h3d046cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype-2.14.3-h57928b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype6-2.14.3-hdbac1cb_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libgcc-15.2.0-h8ee18e1_19.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.88.1-h7ce1215_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libgomp-15.2.0-h8ee18e1_19.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.13.0-default_h049141e_1000.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.18-hc1393d2_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libintl-0.22.5-h5728263_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.1.4.1-hfd05255_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.11.0-8_hf9ab0e9_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.3-hfd05255_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libmpdec-4.0.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.58-h7351971_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libraqm-0.10.5-h781ae3c_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsodium-1.0.22-h6a83c73_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.2-hf5d6505_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libssh2-1.11.1-h9aa295b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.1-h8f73337_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libwebp-base-1.6.0-h4d5522a_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_10.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.17.0-h0e4246c_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.3-h3cfd58e_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.3-h8ef44ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.2-hfd05255_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/llvm-openmp-22.1.8-h4fa8253_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/markupsafe-3.0.3-py314h2359020_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/matplotlib-base-3.11.0-py314h6cfc8ec_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2026.0.0-hac47afa_908.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.5.0-py314h02f10f6_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/onemkl-license-2026.0.0-h57928b3_908.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openjpeg-2.5.4-h0e57b4f_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.3-hf411b9b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pcre2-10.47-hd2b5f0e_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pillow-12.2.0-py314h61b30b5_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pixman-0.46.4-h5112557_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/prek-0.4.5-h18a1a76_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/psutil-7.2.2-py314hc5dbbe4_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pthread-stubs-0.4-h0e40799_1002.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.14.6-h4b44e0e_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-312-py314hcaaf0b2_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pywinpty-2.0.15-py314h51f0985_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.3-py314h2359020_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pyzmq-27.1.0-py312h343a6d4_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/qhull-2020.2-hc790b64_5.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/rpds-py-2026.5.1-py314hc980628_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/scikit-learn-1.9.0-np2py314h1b5b07a_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/scipy-1.18.0-py314h221f224_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2023.0.0-hd3d4ead_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h6ed50ae_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tornado-6.5.7-py314h5a2d7ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/unicodedata2-17.0.1-py314h5a2d7ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.5-h1b7c187_39.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.51.36231-h1b9f54f_39.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.51.36231-h1b9f54f_39.conda - conda: https://conda.anaconda.org/conda-forge/win-64/winpty-0.4.3-4.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxau-1.0.12-hba3369d_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxdmcp-1.1.5-hba3369d_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/zeromq-4.3.5-h507cc87_10.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zeromq-4.3.5-h3a581c9_11.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zlib-1.3.2-hfd05255_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zlib-ng-2.3.3-h0261ad2_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/9f/d73dfb85d7a5b1a56a99adc50f2074029468168c970ff5daeade4ad819e4/choreographer-1.2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl + - pypi: . + - pypi: git+https://github.com/optimagic-dev/optimagic.git?branch=probability-allow-fixed-entries#ecd9ebe0dfb3abc09ab015d78774a30794d779d0 + - pypi: https://files.pythonhosted.org/packages/0d/7d/c592d1fa69c210be0d2743fffc598dfc2f54efa9671c5f6f5d1e151c6f4a/jaxlib-0.10.2-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/18/72/ec1b5cbdcb140c132e6c7bdf99bd73e4f675439e77126c88f472fcffa09c/simplejson-4.1.1-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/1a/aff8bb287a4b1400f69e09a53bd65de96aa5cee5691925b38731c67fc695/click_default_group-1.2.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/c1/a662f0a8f6e024fca239d493f278d9adf5de1c8408af46a53a76beb13534/dags-0.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/43/f5/ee39c6e92acc742c052f137b47c210cd0a1b72dcd3f98495528bb4d27761/flatten_dict-0.4.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e6/ab/fb21f4c939bb440104cc2b396d3be1d9b7a9fd3c6c2a53d98c45b3d7c954/fsspec-2026.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f3/ca/2101ca3d9223a1dc125140dbc063644dca76df6ff356531eb27bc267b446/greenlet-3.3.2-cp314-cp314-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/80/e4/88778c6a23b65224e5088e68fd0924e5bde2196a26e76edb3ea3543fed6a/jax-0.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/54/0d/a8e27c1c434e489883c1182bd52de27775b8a78013de62e6eabf80991df5/jaxlib-0.9.1-cp314-cp314-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/7b/91/984aca2ec129e2757d1e4e3c81c3fcda9d0f85b74670a094cc443d9ee949/joblib-1.5.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7c/25/6fe2dfc3d830ec614c5f83f88fc7472c4ed892b7f7f496367d31de4110c4/jupyter_book-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4b/97/f6de8d4af54d6401d6581a686cce3e3e2371a79ba459a449104e026c08bc/kaleido-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2d/44/b3a11f7aa34cb38f1b7f3df8bcd9fcd09bac9d342c2a2c9b8686c804bcd2/greenlet-3.5.2-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/38/55/792619469bab9882d8bbd5865d45a72f6478762d04a9af4bf0d08c503e95/pandas-3.0.3-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/45/d8/55e0901103c93d57bab3b932294c216f0cbd49054187ce29f8f13808d530/jaxopt-0.8.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/51/fe/53ac0cd932db5dcaf55961bc7cb7afdca8d80d8cc7406ed661f0c7dc111a/pdbp-1.8.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/6aa79ba3570bddd1bf7e951c6123f806751e58e8cce736bad77b2cf348d7/logistro-2.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ce/80/7f1f1bf8c2d5dfd8e9c0e1191aa355ff8b80b5619f84d6dcc2703fa7fd5a/loky-3.5.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e9/93/2bfed22d2498c468f6bcd0d9f56b033eaa19f33320389314c19ef6766413/ml_dtypes-0.5.4-cp314-cp314-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/fe/75/0b4a10da17a44cf13567d08a9c7632a285297e46253263f1ae119129d10a/narwhals-2.18.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5b/f2/44a7dd795a52d34d033b1cb1a6b1162eada650079e557e236fb6b88943be/pytask_parallel-0.5.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/cc/18245721fa7747065ab478316c7fea7c74777d07f37ae60db2e84f8172e8/beartype-0.22.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/72/9f/485516087cd8c44183aaf9ab850247a28e2e4a42a4d62eab77c21f673450/flatten_dict-0.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/78/55b12e70f45bccc40d9e483925c065027b3b98ea4cbbdf6f8c2546feaf6c/sqlalchemy-2.0.51-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/91/85/08c4e13a90a13c509d1fe09596dd8198338b6cfff9ee280f01ae7694889e/optimagic-0.5.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7e/c3/587cc9aa8d4742cd690da79460081e7d834499e07e8b2bd2ccc4c66928df/optree-0.19.0-cp314-cp314-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/12/df/172771902943af54bf661a8d102bdf2e7f932127968080632bda6054b62c/orjson-3.11.7-cp314-cp314-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/09/f8/8ce132104074f977f907442790eaae24e27bce3b3b454e82faa3237ff098/pandas-3.0.1-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/89/82/5ab5211079a151b6f661529369c0c8e98ec64cabf5c0cf22a0a05af124d8/jax-0.10.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/c3/4f2f318b98465376bbb7a06a33da553c688b3ed39dafbb8307f824eef74a/optree-0.19.1-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/9e/b9/a6d8bb7d228940f01885bd9f327ab7f9d366a9be775c4bf366bf9d9477ae/kaleido-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/dd/b04e4a733637d370831e328a356254cfc9c875195269b234cc8ca31ff674/dags-0.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b1/29/c028a0731e202035f0e2e0bfbf1a3e46ad6c628cbb17f6f1cc9eea5d9ff1/pathlib_abc-0.5.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/51/fe/53ac0cd932db5dcaf55961bc7cb7afdca8d80d8cc7406ed661f0c7dc111a/pdbp-1.8.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5a/dc/491b7661614ab97483abf2056be1deee4dc2490ecbf7bff9ab5cdbac86e1/pyreadline3-3.5.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/80/b2/bba963dfce0fcbc5020a4f8b4361e132390c4bd78b46cfc7ae355e678b96/pytask-0.5.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/b9/19ecce5c57114b703b97378ded69ffde1f9f9d471d4db361bbfa6105861e/pytask_parallel-0.5.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fa/b6/3127540ecdf1464a00e5a01ee60a1b09175f6913f0644ac748494d9c4b21/pytest_timeout-2.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/14/25/b208c5683343959b670dc001595f2f3737e051da617f66c31f7c4fa93abc/rich-14.3.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/05/5b/83e1ff87eb60ca706972f7e02e15c0b33396e7bdbd080069a5d1b53cf0d8/simplejson-3.20.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/95/7e/e83615cb63f80047f18e61e31e8e32257d39458426c23006deeaf48f463b/sqlalchemy-2.0.48-cp314-cp314-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/65/44/bb509c3d2c0b5a87e7a5af1d5917a402a32ff026f777a6d7cb6990746cbb/tabcompleter-1.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b5/83/205e7af4153d9690c3cb94fa9cea670c0d26ce7f022aaa589a9e136f1491/jupyter_book-2.1.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ba/6c/ff8bf52315064dbeb55cb5067e191120a5b2e58bb648d0d34cf7969dc2c2/choreographer-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c4/33/265c894268cca88ff67b144ca2b4c522fc8b9a6f1966a3640c70516e78e1/msgspec-0.21.1-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c7/18/c86eb8e0202e32dd3df50d43d7ff9854f8e0603945ff398974c1d91ac1ef/tomli_w-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/fc/8c82be70b8f96d09943360f34cfb2ecdd3035294c51bce4131eeabe56645/tabcompleter-1.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/80/7f1f1bf8c2d5dfd8e9c0e1191aa355ff8b80b5619f84d6dcc2703fa7fd5a/loky-3.5.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d7/54/c30cb1d08258612ece1dfa72c6918998bebecb916c54fca6d806bc780f2b/pytask-0.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dd/1a/5d9a402b39ec892d856bbdd9db502ff73ce28cdf4aff72eb1ce1d6843506/universal_pathlib-0.3.10-py3-none-any.whl - - pypi: ./ + - pypi: https://files.pythonhosted.org/packages/e5/22/4222d7ddf3da30f363edaa98e329c2bce6c65497c9cb2810931c8b2c0fbc/fsspec-2026.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e9/93/2bfed22d2498c468f6bcd0d9f56b033eaa19f33320389314c19ef6766413/ml_dtypes-0.5.4-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/f3/c3/0c6798456bade745c75c452342dabacce5798196483e77e643be1f53877d/orjson-3.11.9-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/f7/5e/35c856e186b74678c24927847ad9895a51f1bc02a0c6126477a6c6040064/pyreadline3-3.5.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f9/14/abe5ce876ab5b66ee3c691bf537fcd43d037aea55d447aacf74630a8f31e/plotly-6.8.0-py3-none-any.whl tests-cpu: channels: - url: https://conda.anaconda.org/conda-forge/ indexes: - https://pypi.org/simple - options: - pypi-prerelease-mode: if-necessary-or-explicit packages: linux-64: - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.12.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/argon2-cffi-bindings-25.1.0-py314h5bd0f2a_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.2.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.3.0-py314h680f03e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.14.3-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.3.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.3.0-hbca2aae_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.10.3-hd2277e8_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.14-h78948cc_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.14.0-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.2-haa0cbde_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.11.0-h6488f85_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.26.3-h3bf836e_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.12.6-hb916526_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.5-haa0cbde_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.10-haa0cbde_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.2.0-hed03a55_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.2.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py314h3de4e8d_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-he90730b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py314h4a8dc5f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py314h97ea11e_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.14.3-py314h67df5f8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.21-py314h42812f9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/elfutils-0.194-h849f50c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.18.1-h27c8c51_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.3-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.16-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gnutls-3.8.13-h18acefa_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.15-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.16.0-nompi_py314hddf7a69_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-14.2.1-h6083320_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-2.1.0-nompi_h7d5651c_108.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.5.0-py314h97ea11e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-hbde042b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.19.1-h0c24ade_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.5-h088129d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.8.7-gpl_hc2c16d8_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-8_h4a7cf45_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-8_h0358290_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.20.0-hcf29cc6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.3-h73754d4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.88.1-h0d30a3d_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libidn2-2.3.8-hfac485b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.4.1-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-8_h47877c9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmicrohttpd-1.0.5-hc2fc477_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h877daf1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.33-pthreads_h94d23a6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.58-h421ea60_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libraqm-0.10.5-h75b3fb1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.22-h280c20c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.2-h0c1763c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtasn1-4.21.0-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libunistring-0.9.10-h7f98852_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libunwind-1.8.3-h65a8314_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.2-h5347b49_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.3-hca6bf5a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.3-h49c6c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-h280c20c_1002.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py314h67df5f8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.11.0-py314h261f116_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.19.3-py314hef15ded_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/nettle-3.10.1-h4a9d5aa_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.5.0-py314h2b28147_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.3-h35e630c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/p11-kit-0.26.2-h3435931_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.2.0-py314h8ec4b1a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/prek-0.4.5-hb17b654_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.2-py314h0f05182_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.6-habeac84_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py314h67df5f8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-2026.5.1-py314h1bee95f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.7.4-h92489ea_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.9.0-np2py314hf09ca88_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.18.0-py314hf07bd8e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.7-py314h5bd0f2a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-17.0.1-py314h5bd0f2a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-he73a12e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.13-he1eb515_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.7-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h09e67af_11.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.14.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.6.0-py314h680f03e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.15.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.4.0-hac0b51c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py314h4a8dc5f_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.6.17-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py314h97ea11e_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.13.5-py314h67df5f8_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.3-py314hd8ed1ab_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.6-py314hd8ed1ab_100.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.20-py314h42812f9_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/elfutils-0.194-h849f50c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/execnet-2.1.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/filterpy-1.4.5-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.62.0-pyh7db6752_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.63.0-pyh7db6752_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.2-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gnutls-3.8.11-h18acefa_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.18-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.2.0-pyha191276_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.11.0-pyhecfbec7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.3.0-pyha191276_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.14.1-pyh53cf698_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.13.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.0.0-pyhcf101f3_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.15.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.1.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.26.0-hcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.3.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-builder-1.0.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.3.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.9.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.0-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.17.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.20.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.5.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.6.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.28.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.5.0-py314h97ea11e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.18-h0c24ade_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.8.6-gpl_hc2c16d8_100.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-5_h4a7cf45_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-5_h0358290_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.19.0-hcf29cc6_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.2-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.2-h73754d4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libidn2-2.3.8-hfac485b_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.2-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-5_h47877c9_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libmicrohttpd-1.0.2-hc2fc477_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.67.0-had1ee68_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.55-h421ea60_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.21-h280c20c_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libtasn1-4.21.0-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libunistring-0.9.10-h7f98852_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/libunwind-1.8.3-h65a8314_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.2-hca6bf5a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.2-he237659_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/linkify-it-py-2.1.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-h280c20c_1002.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py314h67df5f8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.10.8-py314h1194b4b_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.2.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.6.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.19.2-py314hef15ded_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.2.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.3.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.17.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.22.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.11.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.17.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/nettle-3.10.1-h4a9d5aa_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio2-1.7.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.2-py314h2b28147_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/p11-kit-0.26.2-h3435931_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.7-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.1.1-py314h8ec4b1a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.10.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/prek-0.3.6-hb17b654_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.25.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.2-py314h0f05182_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pybaum-0.1.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.2-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-7.0.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-7.1.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-memray-1.8.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.8.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.3-h32b2ec7_101_cp314.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.3-h4df99d1_101.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.6-h4df99d1_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2026.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py314h67df5f8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.3-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.30.0-py314h2e6c369_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.17.1-py314hf07bd8e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-15.0.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-2.1.0-pyha191276_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/snakeviz-2.2.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyhc90fa1f_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/textual-8.1.1-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/textual-8.2.7-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.3-py314h5bd0f2a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.15.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-2.0.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-17.0.1-py314h5bd0f2a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.8.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/webcolors-25.10.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h41580af_10.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/9f/d73dfb85d7a5b1a56a99adc50f2074029468168c970ff5daeade4ad819e4/choreographer-1.2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl + - conda: https://conda.anaconda.org/conda-forge/noarch/xlrd-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda + - pypi: . + - pypi: git+https://github.com/optimagic-dev/optimagic.git?branch=probability-allow-fixed-entries#ecd9ebe0dfb3abc09ab015d78774a30794d779d0 + - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/1f/cca084ca2572810fff12ea9dbdcbe39eac048f40daf4a9077b49fcbe8cee/msgspec-0.21.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/2c/1a/aff8bb287a4b1400f69e09a53bd65de96aa5cee5691925b38731c67fc695/click_default_group-1.2.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/c1/a662f0a8f6e024fca239d493f278d9adf5de1c8408af46a53a76beb13534/dags-0.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/43/f5/ee39c6e92acc742c052f137b47c210cd0a1b72dcd3f98495528bb4d27761/flatten_dict-0.4.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e6/ab/fb21f4c939bb440104cc2b396d3be1d9b7a9fd3c6c2a53d98c45b3d7c954/fsspec-2026.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d2/d8/09bfa816572a4d83bccd6750df1926f79158b1c36c5f73786e26dbe4ee38/greenlet-3.3.2-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/80/e4/88778c6a23b65224e5088e68fd0924e5bde2196a26e76edb3ea3543fed6a/jax-0.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/76/fe/67d2c414b0860d42f4a20b1fadbe7aeffb1b3d885efebd7aedf22a4bc2a2/jaxlib-0.9.1-cp314-cp314-manylinux_2_27_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/7b/91/984aca2ec129e2757d1e4e3c81c3fcda9d0f85b74670a094cc443d9ee949/joblib-1.5.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7c/25/6fe2dfc3d830ec614c5f83f88fc7472c4ed892b7f7f496367d31de4110c4/jupyter_book-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4b/97/f6de8d4af54d6401d6581a686cce3e3e2371a79ba459a449104e026c08bc/kaleido-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/45/d8/55e0901103c93d57bab3b932294c216f0cbd49054187ce29f8f13808d530/jaxopt-0.8.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/51/fe/53ac0cd932db5dcaf55961bc7cb7afdca8d80d8cc7406ed661f0c7dc111a/pdbp-1.8.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/6aa79ba3570bddd1bf7e951c6123f806751e58e8cce736bad77b2cf348d7/logistro-2.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ce/80/7f1f1bf8c2d5dfd8e9c0e1191aa355ff8b80b5619f84d6dcc2703fa7fd5a/loky-3.5.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c6/bb/82c7dcf38070b46172a517e2334e665c5bf374a262f99a283ea454bece7c/ml_dtypes-0.5.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/fe/75/0b4a10da17a44cf13567d08a9c7632a285297e46253263f1ae119129d10a/narwhals-2.18.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/58/3b/1cdec6772bdbaf7b25dab360c59f03cadf05492dd724c6540af905389b07/pandas-3.0.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/5b/f2/44a7dd795a52d34d033b1cb1a6b1162eada650079e557e236fb6b88943be/pytask_parallel-0.5.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/69/77/ac054882c220872512df28d16aeb648fe0e651efbb5be4fd7c4817fd88b0/jaxlib-0.10.2-cp314-cp314-manylinux_2_27_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/71/cc/18245721fa7747065ab478316c7fea7c74777d07f37ae60db2e84f8172e8/beartype-0.22.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/72/9f/485516087cd8c44183aaf9ab850247a28e2e4a42a4d62eab77c21f673450/flatten_dict-0.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/76/3e/c0b690253f0b82d86e99949af13533363acfb5432ecb5d53dd5b3bce9c34/orjson-3.11.9-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/78/91/3635cdb13318cb0a328abaa69e2b91251caad39d6779aa308098f341f6cb/simplejson-4.1.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/91/85/08c4e13a90a13c509d1fe09596dd8198338b6cfff9ee280f01ae7694889e/optimagic-0.5.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fe/16/00261f20f467b9e8950a76ec1749f01359bf47f2fc3dac5e206de99835c0/optree-0.19.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/c2/8b/ecdad52d0b38d4b8f514be603e69ccd5eacf4e7241f972e37e79792212ec/orjson-3.11.7-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/55/77/6ea82043db22cb0f2bbfe7198da3544000ddaadb12d26be36e19b03a2dc5/pandas-3.0.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/89/82/5ab5211079a151b6f661529369c0c8e98ec64cabf5c0cf22a0a05af124d8/jax-0.10.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/99/69/d6c99db15dc0b5e892ac3cc7b942c8b21f4a9cc3bd9ea0bc3b0f339ffbd4/greenlet-3.5.2-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/9c/1a/4834b1f2fb1847412353d7342eb7a1d001a4f3bd9d24155e057135a4aa44/optree-0.19.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/9e/b9/a6d8bb7d228940f01885bd9f327ab7f9d366a9be775c4bf366bf9d9477ae/kaleido-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/dd/b04e4a733637d370831e328a356254cfc9c875195269b234cc8ca31ff674/dags-0.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b1/29/c028a0731e202035f0e2e0bfbf1a3e46ad6c628cbb17f6f1cc9eea5d9ff1/pathlib_abc-0.5.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/51/fe/53ac0cd932db5dcaf55961bc7cb7afdca8d80d8cc7406ed661f0c7dc111a/pdbp-1.8.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/80/b2/bba963dfce0fcbc5020a4f8b4361e132390c4bd78b46cfc7ae355e678b96/pytask-0.5.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/b9/19ecce5c57114b703b97378ded69ffde1f9f9d471d4db361bbfa6105861e/pytask_parallel-0.5.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fa/b6/3127540ecdf1464a00e5a01ee60a1b09175f6913f0644ac748494d9c4b21/pytest_timeout-2.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/05/5b/83e1ff87eb60ca706972f7e02e15c0b33396e7bdbd080069a5d1b53cf0d8/simplejson-3.20.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f2/5e/327428a034407651a048f5e624361adf3f9fbac9d0fa98e981e9c6ff2f5e/sqlalchemy-2.0.48-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/65/44/bb509c3d2c0b5a87e7a5af1d5917a402a32ff026f777a6d7cb6990746cbb/tabcompleter-1.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b5/83/205e7af4153d9690c3cb94fa9cea670c0d26ce7f022aaa589a9e136f1491/jupyter_book-2.1.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ba/6c/ff8bf52315064dbeb55cb5067e191120a5b2e58bb648d0d34cf7969dc2c2/choreographer-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/bb/82c7dcf38070b46172a517e2334e665c5bf374a262f99a283ea454bece7c/ml_dtypes-0.5.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c7/18/c86eb8e0202e32dd3df50d43d7ff9854f8e0603945ff398974c1d91ac1ef/tomli_w-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/fc/8c82be70b8f96d09943360f34cfb2ecdd3035294c51bce4131eeabe56645/tabcompleter-1.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/80/7f1f1bf8c2d5dfd8e9c0e1191aa355ff8b80b5619f84d6dcc2703fa7fd5a/loky-3.5.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d7/54/c30cb1d08258612ece1dfa72c6918998bebecb916c54fca6d806bc780f2b/pytask-0.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dd/1a/5d9a402b39ec892d856bbdd9db502ff73ce28cdf4aff72eb1ce1d6843506/universal_pathlib-0.3.10-py3-none-any.whl - - pypi: ./ + - pypi: https://files.pythonhosted.org/packages/dd/a1/e77854cb5336fd37dc3c6ae3b71de242c98caac5725120be0b526b31cbd0/sqlalchemy-2.0.51-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e5/22/4222d7ddf3da30f363edaa98e329c2bce6c65497c9cb2810931c8b2c0fbc/fsspec-2026.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f9/14/abe5ce876ab5b66ee3c691bf537fcd43d037aea55d447aacf74630a8f31e/plotly-6.8.0-py3-none-any.whl osx-arm64: - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.conda - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.12.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.14.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/appnope-0.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/argon2-cffi-bindings-25.1.0-py314h0612a62_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.2.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.3.0-py314h680f03e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.14.3-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.3.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.3.0-hbca2aae_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-1.2.0-h7d5ae5b_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-bin-1.2.0-hc919400_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.2.0-py314h3daef5d_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.6.0-py314h680f03e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.15.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.4.0-hac0b51c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-2.0.0-py314h44086f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.6.17-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/contourpy-1.3.3-py314hf8a3a22_4.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/coverage-7.13.5-py314h6e9b3f0_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.3-py314hd8ed1ab_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.6-py314hd8ed1ab_100.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/debugpy-1.8.20-py314he609de1_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/execnet-2.1.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/filterpy-1.4.5-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.62.0-pyh7db6752_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.63.0-pyh7db6752_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.14.2-hce30654_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.18-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.2.0-pyh5552912_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.11.0-pyhecfbec7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.3.0-pyh01cf8df_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.14.1-pyh53cf698_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.13.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.0.0-pyhcf101f3_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.15.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.1.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.26.0-hcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.3.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-builder-1.0.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.3.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.9.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.0-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.17.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.20.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.5.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.6.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.28.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/kiwisolver-1.5.0-py314hf8a3a22_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-h385eeb1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.18-hdfa7624_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.1.0-h1eee2c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.11.0-5_h51639a9_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.2.0-hc919400_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.2.0-hc919400_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.2.0-hc919400_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.11.0-5_hb0561ab_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.1-h55c6f16_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.25-hc11a715_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype-2.14.2-hce30654_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype6-2.14.2-hdfa99f5_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgcc-15.2.0-hcbb3090_18.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-h07b0088_18.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-hdae7583_18.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.1.2-hc919400_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.11.0-5_hd9741b5_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.30-openmp_ha158390_4.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.55-h132b30e_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.21-h1a92334_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.52.0-h1ae2325_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.1-h4030677_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.6.0-h07db88b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/linkify-it-py-2.1.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-22.1.0-hc7d1edf_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.10.0-h286801f_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.3-py314h6e9b3f0_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/matplotlib-base-3.10.8-py314hd63e3f0_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.2.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.6.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/memray-1.19.2-py314h44d60dd_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.2.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.3.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.17.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.22.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.11.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.17.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio2-1.7.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.4.2-py314hae46ccb_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.4-hd9e9057_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.7-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-12.1.1-py314hab283cf_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.10.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/prek-0.3.6-h6fdd925_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.25.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-7.2.2-py314ha14b1ff_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-hd74edd7_1002.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pybaum-0.1.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-core-12.1-py314h3a4d195_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-framework-cocoa-12.1-py314h36abed7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.2-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-7.0.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-7.1.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-memray-1.8.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.8.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.14.3-h4c637c5_101_cp314.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.3-h4df99d1_101.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.6-h4df99d1_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2026.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.3-py314h6e9b3f0_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312h022ad19_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/qhull-2020.2-h420ef59_5.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.3-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rpds-py-0.30.0-py314haad56a0_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scipy-1.17.1-py314hfc1f868_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-15.0.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-2.1.0-pyh5552912_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/snakeviz-2.2.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyhc90fa1f_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/textual-8.1.1-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/textual-8.2.7-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.4-py314h0612a62_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.15.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-2.0.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/unicodedata2-17.0.1-py314h6c2aa35_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.8.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/webcolors-25.10.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xlrd-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/argon2-cffi-bindings-25.1.0-py314h0612a62_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.10.3-hc11c9a1_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-cal-0.9.14-h81c6212_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-common-0.14.0-h84a0fba_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-compression-0.3.2-h61d3404_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-http-0.11.0-h0a63974_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-io-0.26.3-h58c0f83_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-s3-0.12.6-h43def2a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.2.5-h61d3404_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-checksums-0.2.10-h61d3404_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-1.2.0-h7d5ae5b_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-bin-1.2.0-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.2.0-py314h3daef5d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.6-hc919400_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cairo-1.18.4-he0f2337_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-2.0.0-py314h44086f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/contourpy-1.3.3-py314hf8a3a22_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/coverage-7.14.3-py314h6e9b3f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/debugpy-1.8.21-py314he609de1_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fontconfig-2.18.1-h2b252f5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.14.3-hce30654_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fribidi-1.0.16-hc919400_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/graphite2-1.3.15-hf6b4638_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/h5py-3.16.0-nompi_py314h658a3ac_102.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/harfbuzz-14.2.1-h3103d1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/hdf5-2.1.0-nompi_hb7e0c14_108.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/kiwisolver-1.5.0-py314hf8a3a22_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-hfd3d5f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.19.1-hdfa7624_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.1.0-h1eee2c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libaec-1.1.5-h8664d51_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.11.0-8_h51639a9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.2.0-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.2.0-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.2.0-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.11.0-8_hb0561ab_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.20.0-hd5a2499_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.8-h55c6f16_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.25-hc11a715_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.8.1-hf6b4638_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype-2.14.3-hce30654_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype6-2.14.3-hdfa99f5_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgcc-15.2.0-hcbb3090_19.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-h07b0088_19.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-hdae7583_19.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libglib-2.88.1-ha08bb59_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.18-h23cfdf5_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libintl-0.25.1-h493aca8_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.1.4.1-h84a0fba_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.11.0-8_hd9741b5_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.3-h8088a28_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.68.1-h8f3e76b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.33-openmp_he657e61_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.58-h132b30e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libraqm-0.10.5-h29bd36a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.22-h1a92334_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.2-h1ae2325_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h1590b86_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.1-h4030677_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.6.0-h07db88b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-22.1.8-hc7d1edf_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.10.0-h286801f_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.3-py314h6e9b3f0_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/matplotlib-base-3.11.0-py314ha5eae4c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/memray-1.19.3-py314h44d60dd_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.6-h1d4f5a5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.5.0-py314hb79c6fa_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.4-hd9e9057_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.3-hd24854e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.47-h30297fc_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-12.2.0-py314hab283cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pixman-0.46.4-h81086ad_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/prek-0.4.5-h6fdd925_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-7.2.2-py314ha14b1ff_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-hd74edd7_1002.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-core-12.1-py314h3a4d195_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-framework-cocoa-12.1-py314h36abed7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.14.6-h156bc91_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.3-py314h6e9b3f0_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312h022ad19_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/qhull-2020.2-h420ef59_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rpds-py-2026.5.1-py314he1d1ac0_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-learn-1.9.0-np2py314h15f0f0f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scipy-1.18.0-py314h18e1515_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.7-py314h6c2aa35_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/unicodedata2-17.0.1-py314h6c2aa35_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.12-hc919400_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hc919400_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h4818236_10.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h10816f8_11.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-ng-2.3.3-hed4e4f5_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/9f/d73dfb85d7a5b1a56a99adc50f2074029468168c970ff5daeade4ad819e4/choreographer-1.2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl + - pypi: . + - pypi: git+https://github.com/optimagic-dev/optimagic.git?branch=probability-allow-fixed-entries#ecd9ebe0dfb3abc09ab015d78774a30794d779d0 + - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/1a/aff8bb287a4b1400f69e09a53bd65de96aa5cee5691925b38731c67fc695/click_default_group-1.2.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/c1/a662f0a8f6e024fca239d493f278d9adf5de1c8408af46a53a76beb13534/dags-0.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/43/f5/ee39c6e92acc742c052f137b47c210cd0a1b72dcd3f98495528bb4d27761/flatten_dict-0.4.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e6/ab/fb21f4c939bb440104cc2b396d3be1d9b7a9fd3c6c2a53d98c45b3d7c954/fsspec-2026.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/80/e4/88778c6a23b65224e5088e68fd0924e5bde2196a26e76edb3ea3543fed6a/jax-0.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a4/b0/f2c9caa6f545d4ecc1eab528c68c9191e40087f1bc79a6da2e29c6416510/jaxlib-0.9.1-cp314-cp314-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/7b/91/984aca2ec129e2757d1e4e3c81c3fcda9d0f85b74670a094cc443d9ee949/joblib-1.5.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7c/25/6fe2dfc3d830ec614c5f83f88fc7472c4ed892b7f7f496367d31de4110c4/jupyter_book-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4b/97/f6de8d4af54d6401d6581a686cce3e3e2371a79ba459a449104e026c08bc/kaleido-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/45/d8/55e0901103c93d57bab3b932294c216f0cbd49054187ce29f8f13808d530/jaxopt-0.8.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/49/cc/14dd93887295859457e507fc46a847b68ae8f20c42b2fde4d8a749c94bbc/optree-0.19.1-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/51/fe/53ac0cd932db5dcaf55961bc7cb7afdca8d80d8cc7406ed661f0c7dc111a/pdbp-1.8.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/6aa79ba3570bddd1bf7e951c6123f806751e58e8cce736bad77b2cf348d7/logistro-2.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ce/80/7f1f1bf8c2d5dfd8e9c0e1191aa355ff8b80b5619f84d6dcc2703fa7fd5a/loky-3.5.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5b/f2/44a7dd795a52d34d033b1cb1a6b1162eada650079e557e236fb6b88943be/pytask_parallel-0.5.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/68/10/bf2d6738d72748b961a3751ab89522d58c54efc36a8e1a12161216cd45cf/pandas-3.0.3-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/68/31/9a5432c433a7671107182cdc9a20ea78a70f99c4e5334aa54b6d4d0d79ed/simplejson-4.1.1-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/71/cc/18245721fa7747065ab478316c7fea7c74777d07f37ae60db2e84f8172e8/beartype-0.22.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/72/4e/1339dc6e2557a344f5ba5590872e80346f76f6cb2ac3dd16e4666e88818c/ml_dtypes-0.5.4-cp314-cp314-macosx_10_13_universal2.whl - - pypi: https://files.pythonhosted.org/packages/fe/75/0b4a10da17a44cf13567d08a9c7632a285297e46253263f1ae119129d10a/narwhals-2.18.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/72/9f/485516087cd8c44183aaf9ab850247a28e2e4a42a4d62eab77c21f673450/flatten_dict-0.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/91/85/08c4e13a90a13c509d1fe09596dd8198338b6cfff9ee280f01ae7694889e/optimagic-0.5.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/08/67/2e19866a03a6e75eb62194a5b55e1e3154ca1517478c300232b0229f8c2a/optree-0.19.0-cp314-cp314-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/e9/1e/745565dca749813db9a093c5ebc4bac1a9475c64d54b95654336ac3ed961/orjson-3.11.7-cp314-cp314-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl - - pypi: https://files.pythonhosted.org/packages/72/3a/5b39b51c64159f470f1ca3b1c2a87da290657ca022f7cd11442606f607d1/pandas-3.0.1-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/89/82/5ab5211079a151b6f661529369c0c8e98ec64cabf5c0cf22a0a05af124d8/jax-0.10.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8e/eb/5da01e356015aee6ecfa1187ced87aef51364e306f5e695dd52719bf0e78/orjson-3.11.9-cp314-cp314-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl + - pypi: https://files.pythonhosted.org/packages/9e/b9/a6d8bb7d228940f01885bd9f327ab7f9d366a9be775c4bf366bf9d9477ae/kaleido-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/dd/b04e4a733637d370831e328a356254cfc9c875195269b234cc8ca31ff674/dags-0.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b1/29/c028a0731e202035f0e2e0bfbf1a3e46ad6c628cbb17f6f1cc9eea5d9ff1/pathlib_abc-0.5.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/51/fe/53ac0cd932db5dcaf55961bc7cb7afdca8d80d8cc7406ed661f0c7dc111a/pdbp-1.8.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/80/b2/bba963dfce0fcbc5020a4f8b4361e132390c4bd78b46cfc7ae355e678b96/pytask-0.5.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/b9/19ecce5c57114b703b97378ded69ffde1f9f9d471d4db361bbfa6105861e/pytask_parallel-0.5.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fa/b6/3127540ecdf1464a00e5a01ee60a1b09175f6913f0644ac748494d9c4b21/pytest_timeout-2.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/05/5b/83e1ff87eb60ca706972f7e02e15c0b33396e7bdbd080069a5d1b53cf0d8/simplejson-3.20.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f7/b3/f437eaa1cf028bb3c927172c7272366393e73ccd104dcf5b6963f4ab5318/sqlalchemy-2.0.48-cp314-cp314-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/65/44/bb509c3d2c0b5a87e7a5af1d5917a402a32ff026f777a6d7cb6990746cbb/tabcompleter-1.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b1/49/a739be2e1d02a96a658eb71ab45d921c874249252358ad24a5bffdd02525/sqlalchemy-2.0.51-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/b5/83/205e7af4153d9690c3cb94fa9cea670c0d26ce7f022aaa589a9e136f1491/jupyter_book-2.1.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ba/6c/ff8bf52315064dbeb55cb5067e191120a5b2e58bb648d0d34cf7969dc2c2/choreographer-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c7/18/c86eb8e0202e32dd3df50d43d7ff9854f8e0603945ff398974c1d91ac1ef/tomli_w-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/fc/8c82be70b8f96d09943360f34cfb2ecdd3035294c51bce4131eeabe56645/tabcompleter-1.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/80/7f1f1bf8c2d5dfd8e9c0e1191aa355ff8b80b5619f84d6dcc2703fa7fd5a/loky-3.5.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d1/a1/c5e46c3e42b866199365e35d11dddfd1fbd8bba4fdb3c52f965b1607ce94/msgspec-0.21.1-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/d7/54/c30cb1d08258612ece1dfa72c6918998bebecb916c54fca6d806bc780f2b/pytask-0.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dd/1a/5d9a402b39ec892d856bbdd9db502ff73ce28cdf4aff72eb1ce1d6843506/universal_pathlib-0.3.10-py3-none-any.whl - - pypi: ./ + - pypi: https://files.pythonhosted.org/packages/e5/22/4222d7ddf3da30f363edaa98e329c2bce6c65497c9cb2810931c8b2c0fbc/fsspec-2026.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f2/0d/27471ec9f1d04674f6e62de809412371e097aed3eca7d9483e677c54c214/jaxlib-0.10.2-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/f9/14/abe5ce876ab5b66ee3c691bf537fcd43d037aea55d447aacf74630a8f31e/plotly-6.8.0-py3-none-any.whl win-64: - - conda: https://conda.anaconda.org/conda-forge/win-64/_openmp_mutex-4.5-20_gnu.conda - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.12.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.14.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/argon2-cffi-bindings-25.1.0-py314h5a2d7ad_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.2.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.3.0-py314h680f03e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.14.3-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.3.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.3.0-hbca2aae_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-1.2.0-h2d644bc_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-bin-1.2.0-hfd05255_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-python-1.2.0-py314he701e3d_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-h4c7d964_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.6.0-py314h680f03e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.15.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.4.0-hac0b51c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-h4c7d964_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/cffi-2.0.0-py314h5a2d7ad_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.6.17-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/contourpy-1.3.3-py314hf309875_4.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/coverage-7.13.5-py314h2359020_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.3-py314hd8ed1ab_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.6-py314hd8ed1ab_100.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/debugpy-1.8.20-py314hb98de8c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/execnet-2.1.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/filterpy-1.4.5-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.62.0-pyh7db6752_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.63.0-pyh7db6752_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/freetype-2.14.2-h57928b3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.18-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.2.0-pyh6dadd2b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.11.0-pyhccfa634_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.3.0-pyh6dadd2b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.14.1-pyhe2676ad_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.13.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.0.0-pyhcf101f3_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.15.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.1.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.26.0-hcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.3.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-builder-1.0.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.3.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.9.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyh6dadd2b_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.0-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.17.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.20.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.5.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.6.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.28.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/kiwisolver-1.5.0-py314hf309875_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.22.2-h0ea6238_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/lcms2-2.18-hf2c6c5f_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/lerc-4.1.0-hd936e49_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.11.0-5_hf2e6a31_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlicommon-1.2.0-hfd05255_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlidec-1.2.0-hfd05255_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlienc-1.2.0-hfd05255_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.11.0-5_h2a3cdd5_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.25-h51727cc_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.7.4-hac47afa_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h3d046cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype-2.14.2-h57928b3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype6-2.14.2-hdbac1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libgcc-15.2.0-h8ee18e1_18.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libgomp-15.2.0-h8ee18e1_18.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.12.2-default_h4379cf1_1000.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.18-hc1393d2_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.1.2-hfd05255_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.11.0-5_hf9ab0e9_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.2-hfd05255_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libmpdec-4.0.0-hfd05255_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.55-h7351971_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libsodium-1.0.21-h6a83c73_3.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.52.0-hf5d6505_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.1-h8f73337_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libwebp-base-1.6.0-h4d5522a_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_10.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.17.0-h0e4246c_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.2-h692994f_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.2-h5d26750_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/llvm-openmp-22.1.0-h4fa8253_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/markupsafe-3.0.3-py314h2359020_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/matplotlib-base-3.10.8-py314hfa45d96_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.2.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2025.3.0-hac47afa_455.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.3.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.17.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.22.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.11.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.17.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio2-1.7.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.4.2-py314h06c3c77_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/openjpeg-2.5.4-h0e57b4f_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.1-hf411b9b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pillow-12.1.1-py314h61b30b5_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.7-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.10.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/prek-0.3.6-h18a1a76_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.25.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/psutil-7.2.2-py314hc5dbbe4_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pthread-stubs-0.4-h0e40799_1002.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pybaum-0.1.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.2-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-7.0.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-7.1.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.8.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.14.3-h4b44e0e_101_cp314.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.3-h4df99d1_101.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.6-h4df99d1_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2026.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-311-py314h8f8f202_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pywinpty-2.0.15-py314h51f0985_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.3-py314h2359020_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pyzmq-27.1.0-py312h343a6d4_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/qhull-2020.2-hc790b64_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/rpds-py-0.30.0-py314h9f07db2_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/scipy-1.17.1-py314h221f224_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-2.1.0-pyh6dadd2b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/snakeviz-2.2.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2022.3.0-h3155e25_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyh6dadd2b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h6ed50ae_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/tornado-6.5.4-py314h5a2d7ad_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.15.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/unicodedata2-17.0.1-py314h5a2d7ad_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h41ae7f8_34.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_34.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.44.35208-h818238b_34.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.8.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/webcolors-25.10.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/win_inet_pton-1.1.0-pyh7428d3b_8.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xlrd-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/argon2-cffi-bindings-25.1.0-py314h5a2d7ad_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-auth-0.10.3-h4ad2c79_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-cal-0.9.14-h270aff2_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-common-0.14.0-hfd05255_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-compression-0.3.2-h1f21522_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-http-0.11.0-h4721ae0_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-io-0.26.3-h1a62f66_5.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-s3-0.12.6-h425879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-sdkutils-0.2.5-h1f21522_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-checksums-0.2.10-h1f21522_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-1.2.0-h2d644bc_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-bin-1.2.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-python-1.2.0-py314he701e3d_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cairo-1.18.4-h477c42c_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cffi-2.0.0-py314h5a2d7ad_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/contourpy-1.3.3-py314hf309875_4.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/coverage-7.14.3-py314h2359020_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/debugpy-1.8.21-py314hb98de8c_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/fontconfig-2.18.1-hd47e2ca_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/freetype-2.14.3-h57928b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/fribidi-1.0.16-hfd05255_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/graphite2-1.3.15-hac47afa_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/h5py-3.16.0-nompi_py314h02517ec_102.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/harfbuzz-14.2.1-h5a1b470_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/hdf5-2.1.0-nompi_ha9ae7cf_108.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/icu-78.3-h637d24d_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/kiwisolver-1.5.0-py314hf309875_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.22.2-h719d79b_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/lcms2-2.19.1-hf2c6c5f_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/lerc-4.1.0-hd936e49_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libaec-1.1.5-haf901d7_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.11.0-8_h8455456_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlicommon-1.2.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlidec-1.2.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlienc-1.2.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.11.0-8_h2a3cdd5_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libcurl-8.20.0-h8206538_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.25-h51727cc_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.8.1-hac47afa_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h3d046cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype-2.14.3-h57928b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype6-2.14.3-hdbac1cb_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libgcc-15.2.0-h8ee18e1_19.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.88.1-h7ce1215_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libgomp-15.2.0-h8ee18e1_19.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.13.0-default_h049141e_1000.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.18-hc1393d2_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libintl-0.22.5-h5728263_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.1.4.1-hfd05255_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.11.0-8_hf9ab0e9_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.3-hfd05255_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libmpdec-4.0.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.58-h7351971_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libraqm-0.10.5-h781ae3c_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsodium-1.0.22-h6a83c73_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.2-hf5d6505_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libssh2-1.11.1-h9aa295b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.1-h8f73337_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libwebp-base-1.6.0-h4d5522a_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_10.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.17.0-h0e4246c_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.3-h3cfd58e_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.3-h8ef44ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.2-hfd05255_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/llvm-openmp-22.1.8-h4fa8253_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/markupsafe-3.0.3-py314h2359020_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/matplotlib-base-3.11.0-py314h6cfc8ec_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2026.0.0-hac47afa_908.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.5.0-py314h02f10f6_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/onemkl-license-2026.0.0-h57928b3_908.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openjpeg-2.5.4-h0e57b4f_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.3-hf411b9b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pcre2-10.47-hd2b5f0e_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pillow-12.2.0-py314h61b30b5_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pixman-0.46.4-h5112557_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/prek-0.4.5-h18a1a76_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/psutil-7.2.2-py314hc5dbbe4_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pthread-stubs-0.4-h0e40799_1002.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.14.6-h4b44e0e_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-312-py314hcaaf0b2_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pywinpty-2.0.15-py314h51f0985_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.3-py314h2359020_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pyzmq-27.1.0-py312h343a6d4_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/qhull-2020.2-hc790b64_5.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/rpds-py-2026.5.1-py314hc980628_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/scikit-learn-1.9.0-np2py314h1b5b07a_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/scipy-1.18.0-py314h221f224_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2023.0.0-hd3d4ead_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h6ed50ae_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tornado-6.5.7-py314h5a2d7ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/unicodedata2-17.0.1-py314h5a2d7ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.5-h1b7c187_39.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.51.36231-h1b9f54f_39.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.51.36231-h1b9f54f_39.conda - conda: https://conda.anaconda.org/conda-forge/win-64/winpty-0.4.3-4.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxau-1.0.12-hba3369d_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxdmcp-1.1.5-hba3369d_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/zeromq-4.3.5-h507cc87_10.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zeromq-4.3.5-h3a581c9_11.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zlib-1.3.2-hfd05255_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zlib-ng-2.3.3-h0261ad2_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/9f/d73dfb85d7a5b1a56a99adc50f2074029468168c970ff5daeade4ad819e4/choreographer-1.2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl + - pypi: . + - pypi: git+https://github.com/optimagic-dev/optimagic.git?branch=probability-allow-fixed-entries#ecd9ebe0dfb3abc09ab015d78774a30794d779d0 + - pypi: https://files.pythonhosted.org/packages/0d/7d/c592d1fa69c210be0d2743fffc598dfc2f54efa9671c5f6f5d1e151c6f4a/jaxlib-0.10.2-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/18/72/ec1b5cbdcb140c132e6c7bdf99bd73e4f675439e77126c88f472fcffa09c/simplejson-4.1.1-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/1a/aff8bb287a4b1400f69e09a53bd65de96aa5cee5691925b38731c67fc695/click_default_group-1.2.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/c1/a662f0a8f6e024fca239d493f278d9adf5de1c8408af46a53a76beb13534/dags-0.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/43/f5/ee39c6e92acc742c052f137b47c210cd0a1b72dcd3f98495528bb4d27761/flatten_dict-0.4.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e6/ab/fb21f4c939bb440104cc2b396d3be1d9b7a9fd3c6c2a53d98c45b3d7c954/fsspec-2026.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f3/ca/2101ca3d9223a1dc125140dbc063644dca76df6ff356531eb27bc267b446/greenlet-3.3.2-cp314-cp314-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/80/e4/88778c6a23b65224e5088e68fd0924e5bde2196a26e76edb3ea3543fed6a/jax-0.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/54/0d/a8e27c1c434e489883c1182bd52de27775b8a78013de62e6eabf80991df5/jaxlib-0.9.1-cp314-cp314-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/7b/91/984aca2ec129e2757d1e4e3c81c3fcda9d0f85b74670a094cc443d9ee949/joblib-1.5.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7c/25/6fe2dfc3d830ec614c5f83f88fc7472c4ed892b7f7f496367d31de4110c4/jupyter_book-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4b/97/f6de8d4af54d6401d6581a686cce3e3e2371a79ba459a449104e026c08bc/kaleido-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2d/44/b3a11f7aa34cb38f1b7f3df8bcd9fcd09bac9d342c2a2c9b8686c804bcd2/greenlet-3.5.2-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/38/55/792619469bab9882d8bbd5865d45a72f6478762d04a9af4bf0d08c503e95/pandas-3.0.3-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/45/d8/55e0901103c93d57bab3b932294c216f0cbd49054187ce29f8f13808d530/jaxopt-0.8.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/51/fe/53ac0cd932db5dcaf55961bc7cb7afdca8d80d8cc7406ed661f0c7dc111a/pdbp-1.8.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/6aa79ba3570bddd1bf7e951c6123f806751e58e8cce736bad77b2cf348d7/logistro-2.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ce/80/7f1f1bf8c2d5dfd8e9c0e1191aa355ff8b80b5619f84d6dcc2703fa7fd5a/loky-3.5.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e9/93/2bfed22d2498c468f6bcd0d9f56b033eaa19f33320389314c19ef6766413/ml_dtypes-0.5.4-cp314-cp314-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/fe/75/0b4a10da17a44cf13567d08a9c7632a285297e46253263f1ae119129d10a/narwhals-2.18.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5b/f2/44a7dd795a52d34d033b1cb1a6b1162eada650079e557e236fb6b88943be/pytask_parallel-0.5.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/cc/18245721fa7747065ab478316c7fea7c74777d07f37ae60db2e84f8172e8/beartype-0.22.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/72/9f/485516087cd8c44183aaf9ab850247a28e2e4a42a4d62eab77c21f673450/flatten_dict-0.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/78/55b12e70f45bccc40d9e483925c065027b3b98ea4cbbdf6f8c2546feaf6c/sqlalchemy-2.0.51-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/91/85/08c4e13a90a13c509d1fe09596dd8198338b6cfff9ee280f01ae7694889e/optimagic-0.5.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7e/c3/587cc9aa8d4742cd690da79460081e7d834499e07e8b2bd2ccc4c66928df/optree-0.19.0-cp314-cp314-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/12/df/172771902943af54bf661a8d102bdf2e7f932127968080632bda6054b62c/orjson-3.11.7-cp314-cp314-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/09/f8/8ce132104074f977f907442790eaae24e27bce3b3b454e82faa3237ff098/pandas-3.0.1-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/89/82/5ab5211079a151b6f661529369c0c8e98ec64cabf5c0cf22a0a05af124d8/jax-0.10.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/c3/4f2f318b98465376bbb7a06a33da553c688b3ed39dafbb8307f824eef74a/optree-0.19.1-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/9e/b9/a6d8bb7d228940f01885bd9f327ab7f9d366a9be775c4bf366bf9d9477ae/kaleido-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/dd/b04e4a733637d370831e328a356254cfc9c875195269b234cc8ca31ff674/dags-0.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b1/29/c028a0731e202035f0e2e0bfbf1a3e46ad6c628cbb17f6f1cc9eea5d9ff1/pathlib_abc-0.5.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/51/fe/53ac0cd932db5dcaf55961bc7cb7afdca8d80d8cc7406ed661f0c7dc111a/pdbp-1.8.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5a/dc/491b7661614ab97483abf2056be1deee4dc2490ecbf7bff9ab5cdbac86e1/pyreadline3-3.5.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/80/b2/bba963dfce0fcbc5020a4f8b4361e132390c4bd78b46cfc7ae355e678b96/pytask-0.5.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/b9/19ecce5c57114b703b97378ded69ffde1f9f9d471d4db361bbfa6105861e/pytask_parallel-0.5.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fa/b6/3127540ecdf1464a00e5a01ee60a1b09175f6913f0644ac748494d9c4b21/pytest_timeout-2.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/14/25/b208c5683343959b670dc001595f2f3737e051da617f66c31f7c4fa93abc/rich-14.3.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/05/5b/83e1ff87eb60ca706972f7e02e15c0b33396e7bdbd080069a5d1b53cf0d8/simplejson-3.20.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/95/7e/e83615cb63f80047f18e61e31e8e32257d39458426c23006deeaf48f463b/sqlalchemy-2.0.48-cp314-cp314-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/65/44/bb509c3d2c0b5a87e7a5af1d5917a402a32ff026f777a6d7cb6990746cbb/tabcompleter-1.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b5/83/205e7af4153d9690c3cb94fa9cea670c0d26ce7f022aaa589a9e136f1491/jupyter_book-2.1.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ba/6c/ff8bf52315064dbeb55cb5067e191120a5b2e58bb648d0d34cf7969dc2c2/choreographer-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c4/33/265c894268cca88ff67b144ca2b4c522fc8b9a6f1966a3640c70516e78e1/msgspec-0.21.1-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c7/18/c86eb8e0202e32dd3df50d43d7ff9854f8e0603945ff398974c1d91ac1ef/tomli_w-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/fc/8c82be70b8f96d09943360f34cfb2ecdd3035294c51bce4131eeabe56645/tabcompleter-1.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/80/7f1f1bf8c2d5dfd8e9c0e1191aa355ff8b80b5619f84d6dcc2703fa7fd5a/loky-3.5.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d7/54/c30cb1d08258612ece1dfa72c6918998bebecb916c54fca6d806bc780f2b/pytask-0.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dd/1a/5d9a402b39ec892d856bbdd9db502ff73ce28cdf4aff72eb1ce1d6843506/universal_pathlib-0.3.10-py3-none-any.whl - - pypi: ./ + - pypi: https://files.pythonhosted.org/packages/e5/22/4222d7ddf3da30f363edaa98e329c2bce6c65497c9cb2810931c8b2c0fbc/fsspec-2026.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e9/93/2bfed22d2498c468f6bcd0d9f56b033eaa19f33320389314c19ef6766413/ml_dtypes-0.5.4-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/f3/c3/0c6798456bade745c75c452342dabacce5798196483e77e643be1f53877d/orjson-3.11.9-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/f7/5e/35c856e186b74678c24927847ad9895a51f1bc02a0c6126477a6c6040064/pyreadline3-3.5.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f9/14/abe5ce876ab5b66ee3c691bf537fcd43d037aea55d447aacf74630a8f31e/plotly-6.8.0-py3-none-any.whl tests-cuda: channels: - url: https://conda.anaconda.org/conda-forge/ indexes: - https://pypi.org/simple - options: - pypi-prerelease-mode: if-necessary-or-explicit packages: linux-64: - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.12.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/argon2-cffi-bindings-25.1.0-py314h5bd0f2a_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.2.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.3.0-py314h680f03e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.14.3-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45.1-default_hfdba357_101.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_linux-64-2.45.1-default_h4852527_101.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.3.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.3.0-hbca2aae_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.10.3-hd2277e8_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.14-h78948cc_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.14.0-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.2-haa0cbde_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.11.0-h6488f85_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.26.3-h3bf836e_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.12.6-hb916526_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.5-haa0cbde_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.10-haa0cbde_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45.1-default_hfdba357_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_linux-64-2.45.1-default_h4852527_102.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.2.0-hed03a55_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.2.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py314h3de4e8d_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-he90730b_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py314h4a8dc5f_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.6-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py314h97ea11e_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.13.5-py314h67df5f8_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.3-py314hd8ed1ab_101.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-64-12.9.27-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-crt-dev_linux-64-12.9.86-ha770c72_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.14.3-py314h67df5f8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-crt-tools-12.9.86-ha770c72_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-12.9.79-h5888daf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-dev-12.9.79-h5888daf_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-dev_linux-64-12.9.79-h3f2d84a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-static-12.9.79-h5888daf_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-static_linux-64-12.9.79-h3f2d84a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart_linux-64-12.9.79-h3f2d84a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-driver-dev_linux-64-12.9.79-h3f2d84a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc-12.9.86-hcdd1206_6.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvcc-dev_linux-64-12.9.86-he91c749_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc-impl-12.9.86-h85509e4_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc-tools-12.9.86-he02047a_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc_linux-64-12.9.86-he0b4e1d_6.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-64-12.9.86-ha770c72_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-impl-12.9.86-h4bc722e_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-tools-12.9.86-h4bc722e_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.21-py314h42812f9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/elfutils-0.194-h849f50c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.18.1-h27c8c51_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.3-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.16-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-14.3.0-h235f0fe_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-14.3.0-h50e9bb6_27.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gnutls-3.8.13-h18acefa_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.15-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-14.3.0-h2185e75_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-14.3.0-hd240bd5_27.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.16.0-nompi_py314hddf7a69_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-14.2.1-h6083320_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-2.1.0-nompi_h7d5651c_108.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.5.0-py314h97ea11e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-hbde042b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.19.1-h0c24ade_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.5-h088129d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.8.7-gpl_hc2c16d8_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-8_h4a7cf45_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-8_h0358290_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.20.0-hcf29cc6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.3-h73754d4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.88.1-h0d30a3d_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libidn2-2.3.8-hfac485b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.4.1-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-8_h47877c9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmicrohttpd-1.0.5-hc2fc477_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h877daf1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnvptxcompiler-dev-12.9.86-ha770c72_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.33-pthreads_h94d23a6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.58-h421ea60_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libraqm-0.10.5-h75b3fb1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-14.3.0-h8f1669f_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.22-h280c20c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.2-h0c1763c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtasn1-4.21.0-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libunistring-0.9.10-h7f98852_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libunwind-1.8.3-h65a8314_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.2-h5347b49_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.3-hca6bf5a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.3-h49c6c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-h280c20c_1002.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py314h67df5f8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.11.0-py314h261f116_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.19.3-py314hef15ded_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/nettle-3.10.1-h4a9d5aa_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.5.0-py314h2b28147_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.3-h35e630c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/p11-kit-0.26.2-h3435931_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.2.0-py314h8ec4b1a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/prek-0.4.5-hb17b654_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.2-py314h0f05182_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.6-habeac84_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py314h67df5f8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-2026.5.1-py314h1bee95f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.7.4-h92489ea_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.9.0-np2py314hf09ca88_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.18.0-py314hf07bd8e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.7-py314h5bd0f2a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-17.0.1-py314h5bd0f2a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-he73a12e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.13-he1eb515_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.7-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h09e67af_11.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.14.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.6.0-py314h680f03e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.15.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.4.0-hac0b51c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.6.17-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.6-py314hd8ed1ab_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-64-12.9.27-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-crt-dev_linux-64-12.9.86-ha770c72_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-dev_linux-64-12.9.79-h3f2d84a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-static_linux-64-12.9.79-h3f2d84a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart_linux-64-12.9.79-h3f2d84a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-driver-dev_linux-64-12.9.79-h3f2d84a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvcc-dev_linux-64-12.9.86-he91c749_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-64-12.9.86-ha770c72_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-12.9-h4f385c5_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.20-py314h42812f9_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/elfutils-0.194-h849f50c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/execnet-2.1.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/filterpy-1.4.5-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.62.0-pyh7db6752_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.63.0-pyh7db6752_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.2-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-14.3.0-hbdf3cc3_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-14.3.0-h298d278_21.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gnutls-3.8.11-h18acefa_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-14.3.0-h2185e75_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-14.3.0-he467f4b_21.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.18-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.2.0-pyha191276_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.11.0-pyhecfbec7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.3.0-pyha191276_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.14.1-pyh53cf698_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.13.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.0.0-pyhcf101f3_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.15.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.1.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.26.0-hcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.3.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-builder-1.0.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.3.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.9.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.0-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.17.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.20.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.5.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.6.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.28.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-4.18.0-he073ed8_9.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.5.0-py314h97ea11e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.18-h0c24ade_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.8.6-gpl_hc2c16d8_100.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-5_h4a7cf45_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-5_h0358290_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.19.0-hcf29cc6_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.2-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.2-h73754d4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-14.3.0-hf649bbc_118.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libidn2-2.3.8-hfac485b_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.2-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-5_h47877c9_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libmicrohttpd-1.0.2-hc2fc477_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.67.0-had1ee68_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libnvptxcompiler-dev-12.9.86-ha770c72_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-14.3.0-hf649bbc_119.conda - conda: https://conda.anaconda.org/conda-forge/noarch/libnvptxcompiler-dev_linux-64-12.9.86-ha770c72_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.55-h421ea60_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-14.3.0-h8f1669f_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.21-h280c20c_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-14.3.0-h9f08a49_118.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libtasn1-4.21.0-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libunistring-0.9.10-h7f98852_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/libunwind-1.8.3-h65a8314_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.2-hca6bf5a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.2-he237659_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-14.3.0-h9f08a49_119.conda - conda: https://conda.anaconda.org/conda-forge/noarch/linkify-it-py-2.1.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-h280c20c_1002.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py314h67df5f8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.10.8-py314h1194b4b_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.2.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.6.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.19.2-py314hef15ded_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.2.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.3.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.17.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.22.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.11.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.17.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/nettle-3.10.1-h4a9d5aa_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio2-1.7.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.2-py314h2b28147_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/p11-kit-0.26.2-h3435931_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.7-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.1.1-py314h8ec4b1a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.10.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/prek-0.3.6-hb17b654_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.25.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.2-py314h0f05182_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pybaum-0.1.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.2-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-7.0.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-7.1.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-memray-1.8.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.8.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.3-h32b2ec7_101_cp314.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.3-h4df99d1_101.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.6-h4df99d1_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2026.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py314h67df5f8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.3-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.30.0-py314h2e6c369_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.17.1-py314hf07bd8e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-15.0.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-2.1.0-pyha191276_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/snakeviz-2.2.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.28-h4ee821c_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyhc90fa1f_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/textual-8.1.1-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/textual-8.2.7-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.3-py314h5bd0f2a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.15.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-2.0.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-17.0.1-py314h5bd0f2a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.8.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/webcolors-25.10.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h41580af_10.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/9f/d73dfb85d7a5b1a56a99adc50f2074029468168c970ff5daeade4ad819e4/choreographer-1.2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/1a/aff8bb287a4b1400f69e09a53bd65de96aa5cee5691925b38731c67fc695/click_default_group-1.2.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/c1/a662f0a8f6e024fca239d493f278d9adf5de1c8408af46a53a76beb13534/dags-0.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/43/f5/ee39c6e92acc742c052f137b47c210cd0a1b72dcd3f98495528bb4d27761/flatten_dict-0.4.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e6/ab/fb21f4c939bb440104cc2b396d3be1d9b7a9fd3c6c2a53d98c45b3d7c954/fsspec-2026.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d2/d8/09bfa816572a4d83bccd6750df1926f79158b1c36c5f73786e26dbe4ee38/greenlet-3.3.2-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/80/e4/88778c6a23b65224e5088e68fd0924e5bde2196a26e76edb3ea3543fed6a/jax-0.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a7/2c/8ddb471091b46de99bba7eaa7f4e3983f9c8e74e310e585ff08915ce8b7a/jax_cuda12_pjrt-0.9.1-py3-none-manylinux_2_27_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/17/e9/3632d7eddb8f282b50bf7c095bba9de91aae0de9baea56d1699d982fe5f8/jax_cuda12_plugin-0.9.1-cp314-cp314-manylinux_2_27_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/76/fe/67d2c414b0860d42f4a20b1fadbe7aeffb1b3d885efebd7aedf22a4bc2a2/jaxlib-0.9.1-cp314-cp314-manylinux_2_27_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/7b/91/984aca2ec129e2757d1e4e3c81c3fcda9d0f85b74670a094cc443d9ee949/joblib-1.5.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7c/25/6fe2dfc3d830ec614c5f83f88fc7472c4ed892b7f7f496367d31de4110c4/jupyter_book-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4b/97/f6de8d4af54d6401d6581a686cce3e3e2371a79ba459a449104e026c08bc/kaleido-1.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/54/20/6aa79ba3570bddd1bf7e951c6123f806751e58e8cce736bad77b2cf348d7/logistro-2.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ce/80/7f1f1bf8c2d5dfd8e9c0e1191aa355ff8b80b5619f84d6dcc2703fa7fd5a/loky-3.5.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c6/bb/82c7dcf38070b46172a517e2334e665c5bf374a262f99a283ea454bece7c/ml_dtypes-0.5.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/fe/75/0b4a10da17a44cf13567d08a9c7632a285297e46253263f1ae119129d10a/narwhals-2.18.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/77/3c/aa88abe01f3be3d1f8f787d1d33dc83e76fec05945f9a28fbb41cfb99cd5/nvidia_cublas_cu12-12.9.1.4-py3-none-manylinux_2_27_x86_64.whl + - conda: https://conda.anaconda.org/conda-forge/noarch/xlrd-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda + - pypi: . + - pypi: git+https://github.com/optimagic-dev/optimagic.git?branch=probability-allow-fixed-entries#ecd9ebe0dfb3abc09ab015d78774a30794d779d0 + - pypi: https://files.pythonhosted.org/packages/02/ac/85bc07d7a0766c7999f9bdfcf7f7cb2487fd0eb5d6bbe2bd41a3a54cd379/jax_cuda12_plugin-0.10.2-cp314-cp314-manylinux_2_27_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/12/46/b0fd4b04f86577921feb97d8e2cf028afe04f614d17fb5013de9282c9216/nvidia_cusparse_cu12-12.5.10.65-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/18/2a/d4cd8506d2044e082f8cd921be57392e6a9b5ccd3ffdf050362430a3d5d5/nvidia_cuda_cccl_cu12-12.9.27-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/c1/2e/b84e32197e33f39907b455b83395a017e697c07a449a2b15fd07fc1c9981/nvidia_cuda_cupti_cu12-12.9.79-py3-none-manylinux_2_25_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/1f/cca084ca2572810fff12ea9dbdcbe39eac048f40daf4a9077b49fcbe8cee/msgspec-0.21.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/25/48/b54a06168a2190572a312bfe4ce443687773eb61367ced31e064953dd2f7/nvidia_cuda_nvcc_cu12-12.9.86-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b8/85/e4af82cc9202023862090bfca4ea827d533329e925c758f0cde964cb54b7/nvidia_cuda_nvrtc_cu12-12.9.86-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/bc/46/a92db19b8309581092a3add7e6fceb4c301a3fd233969856a8cbf042cd3c/nvidia_cuda_runtime_cu12-12.9.79-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/3b/52/94aecda69df65ba1079a8b7dbe84632af5614dc0ed2c733185f6431874e3/nvidia_cudnn_cu12-9.20.0.48-py3-none-manylinux_2_27_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/95/f4/61e6996dd20481ee834f57a8e9dca28b1869366a135e0d42e2aa8493bdd4/nvidia_cufft_cu12-11.4.1.4-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/2c/1a/aff8bb287a4b1400f69e09a53bd65de96aa5cee5691925b38731c67fc695/click_default_group-1.2.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/40/79b0c64d44d6c166c0964ec1d803d067f4a145cca23e23925fd351d0e642/nvidia_cusolver_cu12-11.7.5.82-py3-none-manylinux_2_27_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/12/46/b0fd4b04f86577921feb97d8e2cf028afe04f614d17fb5013de9282c9216/nvidia_cusparse_cu12-12.5.10.65-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/31/1e/9e366f36efc550f07d6737f199e3f6bffafdf28795d007f10a77dd274f5c/nvidia_nccl_cu12-2.29.7-py3-none-manylinux_2_18_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/3e/85/1c12e849e4d50624e75496378a3fb168389f768d3ec7cb694fba873ff9a8/nvidia_nvshmem_cu12-3.7.0-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/45/d8/55e0901103c93d57bab3b932294c216f0cbd49054187ce29f8f13808d530/jaxopt-0.8.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/46/0c/c75bbfb967457a0b7670b8ad267bfc4fffdf341c074e0a80db06c24ccfd4/nvidia_nvjitlink_cu12-12.9.86-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/44/6a/cf1265d48719852f5144055ff611d9e71678a9b29afb7ace72bf248a0cd8/nvidia_nvshmem_cu12-3.5.21-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/91/85/08c4e13a90a13c509d1fe09596dd8198338b6cfff9ee280f01ae7694889e/optimagic-0.5.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fe/16/00261f20f467b9e8950a76ec1749f01359bf47f2fc3dac5e206de99835c0/optree-0.19.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/c2/8b/ecdad52d0b38d4b8f514be603e69ccd5eacf4e7241f972e37e79792212ec/orjson-3.11.7-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/55/77/6ea82043db22cb0f2bbfe7198da3544000ddaadb12d26be36e19b03a2dc5/pandas-3.0.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b1/29/c028a0731e202035f0e2e0bfbf1a3e46ad6c628cbb17f6f1cc9eea5d9ff1/pathlib_abc-0.5.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/50/32/e7ffa9c324ae260e5dbb4af2cd557bf7a8d155c8ac7b79a785fe1796fb92/nvidia_nccl_cu12-2.30.7-py3-none-manylinux_2_18_x86_64.whl - pypi: https://files.pythonhosted.org/packages/51/fe/53ac0cd932db5dcaf55961bc7cb7afdca8d80d8cc7406ed661f0c7dc111a/pdbp-1.8.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/80/b2/bba963dfce0fcbc5020a4f8b4361e132390c4bd78b46cfc7ae355e678b96/pytask-0.5.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/b9/19ecce5c57114b703b97378ded69ffde1f9f9d471d4db361bbfa6105861e/pytask_parallel-0.5.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fa/b6/3127540ecdf1464a00e5a01ee60a1b09175f6913f0644ac748494d9c4b21/pytest_timeout-2.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/05/5b/83e1ff87eb60ca706972f7e02e15c0b33396e7bdbd080069a5d1b53cf0d8/simplejson-3.20.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f2/5e/327428a034407651a048f5e624361adf3f9fbac9d0fa98e981e9c6ff2f5e/sqlalchemy-2.0.48-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/65/44/bb509c3d2c0b5a87e7a5af1d5917a402a32ff026f777a6d7cb6990746cbb/tabcompleter-1.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/54/20/6aa79ba3570bddd1bf7e951c6123f806751e58e8cce736bad77b2cf348d7/logistro-2.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/58/3b/1cdec6772bdbaf7b25dab360c59f03cadf05492dd724c6540af905389b07/pandas-3.0.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/5b/f2/44a7dd795a52d34d033b1cb1a6b1162eada650079e557e236fb6b88943be/pytask_parallel-0.5.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/69/77/ac054882c220872512df28d16aeb648fe0e651efbb5be4fd7c4817fd88b0/jaxlib-0.10.2-cp314-cp314-manylinux_2_27_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/71/cc/18245721fa7747065ab478316c7fea7c74777d07f37ae60db2e84f8172e8/beartype-0.22.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/72/9f/485516087cd8c44183aaf9ab850247a28e2e4a42a4d62eab77c21f673450/flatten_dict-0.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/76/3e/c0b690253f0b82d86e99949af13533363acfb5432ecb5d53dd5b3bce9c34/orjson-3.11.9-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/77/00/326facd192b7dc0731e43b30f5ada5ef235e2a3325a151d94ed3db041536/jax_cuda12_pjrt-0.10.2-py3-none-manylinux_2_27_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/78/91/3635cdb13318cb0a328abaa69e2b91251caad39d6779aa308098f341f6cb/simplejson-4.1.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/82/5ab5211079a151b6f661529369c0c8e98ec64cabf5c0cf22a0a05af124d8/jax-0.10.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/95/f4/61e6996dd20481ee834f57a8e9dca28b1869366a135e0d42e2aa8493bdd4/nvidia_cufft_cu12-11.4.1.4-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/99/69/d6c99db15dc0b5e892ac3cc7b942c8b21f4a9cc3bd9ea0bc3b0f339ffbd4/greenlet-3.5.2-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/9c/1a/4834b1f2fb1847412353d7342eb7a1d001a4f3bd9d24155e057135a4aa44/optree-0.19.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/9e/b9/a6d8bb7d228940f01885bd9f327ab7f9d366a9be775c4bf366bf9d9477ae/kaleido-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/dd/b04e4a733637d370831e328a356254cfc9c875195269b234cc8ca31ff674/dags-0.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b1/29/c028a0731e202035f0e2e0bfbf1a3e46ad6c628cbb17f6f1cc9eea5d9ff1/pathlib_abc-0.5.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b5/83/205e7af4153d9690c3cb94fa9cea670c0d26ce7f022aaa589a9e136f1491/jupyter_book-2.1.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b8/85/e4af82cc9202023862090bfca4ea827d533329e925c758f0cde964cb54b7/nvidia_cuda_nvrtc_cu12-12.9.86-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/ba/6c/ff8bf52315064dbeb55cb5067e191120a5b2e58bb648d0d34cf7969dc2c2/choreographer-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bc/46/a92db19b8309581092a3add7e6fceb4c301a3fd233969856a8cbf042cd3c/nvidia_cuda_runtime_cu12-12.9.79-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c1/2e/b84e32197e33f39907b455b83395a017e697c07a449a2b15fd07fc1c9981/nvidia_cuda_cupti_cu12-12.9.79-py3-none-manylinux_2_25_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c6/bb/82c7dcf38070b46172a517e2334e665c5bf374a262f99a283ea454bece7c/ml_dtypes-0.5.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c7/18/c86eb8e0202e32dd3df50d43d7ff9854f8e0603945ff398974c1d91ac1ef/tomli_w-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/c0/0a517bfe63ccd3b92eb254d264e28fca3c7cab75d07daea315250fb1bf73/nvidia_cublas_cu12-12.9.2.10-py3-none-manylinux_2_27_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/cb/fc/8c82be70b8f96d09943360f34cfb2ecdd3035294c51bce4131eeabe56645/tabcompleter-1.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/80/7f1f1bf8c2d5dfd8e9c0e1191aa355ff8b80b5619f84d6dcc2703fa7fd5a/loky-3.5.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d7/54/c30cb1d08258612ece1dfa72c6918998bebecb916c54fca6d806bc780f2b/pytask-0.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dd/1a/5d9a402b39ec892d856bbdd9db502ff73ce28cdf4aff72eb1ce1d6843506/universal_pathlib-0.3.10-py3-none-any.whl - - pypi: ./ + - pypi: https://files.pythonhosted.org/packages/dd/a1/e77854cb5336fd37dc3c6ae3b71de242c98caac5725120be0b526b31cbd0/sqlalchemy-2.0.51-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e1/ef/276c358c6ab44efbe68e69977657cb80927e7ab6d45968d042e1083f45e5/nvidia_cudnn_cu12-9.23.2.1-py3-none-manylinux_2_27_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e5/22/4222d7ddf3da30f363edaa98e329c2bce6c65497c9cb2810931c8b2c0fbc/fsspec-2026.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f9/14/abe5ce876ab5b66ee3c691bf537fcd43d037aea55d447aacf74630a8f31e/plotly-6.8.0-py3-none-any.whl tests-cuda12: channels: - url: https://conda.anaconda.org/conda-forge/ indexes: - https://pypi.org/simple - options: - pypi-prerelease-mode: if-necessary-or-explicit packages: linux-64: - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.12.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/argon2-cffi-bindings-25.1.0-py314h5bd0f2a_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.2.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.3.0-py314h680f03e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.14.3-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45.1-default_hfdba357_101.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_linux-64-2.45.1-default_h4852527_101.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.3.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.3.0-hbca2aae_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.10.3-hd2277e8_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.14-h78948cc_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.14.0-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.2-haa0cbde_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.11.0-h6488f85_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.26.3-h3bf836e_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.12.6-hb916526_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.5-haa0cbde_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.10-haa0cbde_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45.1-default_hfdba357_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_linux-64-2.45.1-default_h4852527_102.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.2.0-hed03a55_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.2.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py314h3de4e8d_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-he90730b_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py314h4a8dc5f_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.6-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py314h97ea11e_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.13.5-py314h67df5f8_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.3-py314hd8ed1ab_101.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-64-12.9.27-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-crt-dev_linux-64-12.9.86-ha770c72_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.14.3-py314h67df5f8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-crt-tools-12.9.86-ha770c72_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-12.9.79-h5888daf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-dev-12.9.79-h5888daf_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-dev_linux-64-12.9.79-h3f2d84a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-static-12.9.79-h5888daf_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-static_linux-64-12.9.79-h3f2d84a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart_linux-64-12.9.79-h3f2d84a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-driver-dev_linux-64-12.9.79-h3f2d84a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc-12.9.86-hcdd1206_6.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvcc-dev_linux-64-12.9.86-he91c749_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc-impl-12.9.86-h85509e4_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc-tools-12.9.86-he02047a_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc_linux-64-12.9.86-he0b4e1d_6.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-64-12.9.86-ha770c72_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-impl-12.9.86-h4bc722e_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-tools-12.9.86-h4bc722e_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.21-py314h42812f9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/elfutils-0.194-h849f50c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.18.1-h27c8c51_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.3-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.16-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-14.3.0-h235f0fe_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-14.3.0-h50e9bb6_27.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gnutls-3.8.13-h18acefa_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.15-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-14.3.0-h2185e75_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-14.3.0-hd240bd5_27.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.16.0-nompi_py314hddf7a69_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-14.2.1-h6083320_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-2.1.0-nompi_h7d5651c_108.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.5.0-py314h97ea11e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-hbde042b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.19.1-h0c24ade_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.5-h088129d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.8.7-gpl_hc2c16d8_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-8_h4a7cf45_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-8_h0358290_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.20.0-hcf29cc6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.3-h73754d4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.88.1-h0d30a3d_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libidn2-2.3.8-hfac485b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.4.1-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-8_h47877c9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmicrohttpd-1.0.5-hc2fc477_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h877daf1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnvptxcompiler-dev-12.9.86-ha770c72_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.33-pthreads_h94d23a6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.58-h421ea60_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libraqm-0.10.5-h75b3fb1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-14.3.0-h8f1669f_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.22-h280c20c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.2-h0c1763c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtasn1-4.21.0-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libunistring-0.9.10-h7f98852_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libunwind-1.8.3-h65a8314_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.2-h5347b49_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.3-hca6bf5a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.3-h49c6c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-h280c20c_1002.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py314h67df5f8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.11.0-py314h261f116_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.19.3-py314hef15ded_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/nettle-3.10.1-h4a9d5aa_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.5.0-py314h2b28147_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.3-h35e630c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/p11-kit-0.26.2-h3435931_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.2.0-py314h8ec4b1a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/prek-0.4.5-hb17b654_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.2-py314h0f05182_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.6-habeac84_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py314h67df5f8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-2026.5.1-py314h1bee95f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.7.4-h92489ea_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.9.0-np2py314hf09ca88_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.18.0-py314hf07bd8e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.7-py314h5bd0f2a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-17.0.1-py314h5bd0f2a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-he73a12e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.13-he1eb515_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.7-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h09e67af_11.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.14.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.6.0-py314h680f03e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.15.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.4.0-hac0b51c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.6.17-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.6-py314hd8ed1ab_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-64-12.9.27-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-crt-dev_linux-64-12.9.86-ha770c72_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-dev_linux-64-12.9.79-h3f2d84a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-static_linux-64-12.9.79-h3f2d84a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart_linux-64-12.9.79-h3f2d84a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-driver-dev_linux-64-12.9.79-h3f2d84a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvcc-dev_linux-64-12.9.86-he91c749_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-64-12.9.86-ha770c72_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-12.9-h4f385c5_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.20-py314h42812f9_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/elfutils-0.194-h849f50c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/execnet-2.1.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/filterpy-1.4.5-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.62.0-pyh7db6752_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.63.0-pyh7db6752_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.2-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-14.3.0-hbdf3cc3_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-14.3.0-h298d278_21.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gnutls-3.8.11-h18acefa_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-14.3.0-h2185e75_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-14.3.0-he467f4b_21.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.18-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.2.0-pyha191276_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.11.0-pyhecfbec7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.3.0-pyha191276_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.14.1-pyh53cf698_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.13.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.0.0-pyhcf101f3_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.15.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.1.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.26.0-hcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.3.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-builder-1.0.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.3.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.9.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.0-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.17.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.20.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.5.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.6.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.28.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-4.18.0-he073ed8_9.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.5.0-py314h97ea11e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.18-h0c24ade_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.8.6-gpl_hc2c16d8_100.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-5_h4a7cf45_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-5_h0358290_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.19.0-hcf29cc6_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.2-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.2-h73754d4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-14.3.0-hf649bbc_118.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libidn2-2.3.8-hfac485b_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.2-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-5_h47877c9_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libmicrohttpd-1.0.2-hc2fc477_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.67.0-had1ee68_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libnvptxcompiler-dev-12.9.86-ha770c72_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-14.3.0-hf649bbc_119.conda - conda: https://conda.anaconda.org/conda-forge/noarch/libnvptxcompiler-dev_linux-64-12.9.86-ha770c72_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.55-h421ea60_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-14.3.0-h8f1669f_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.21-h280c20c_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-14.3.0-h9f08a49_118.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libtasn1-4.21.0-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libunistring-0.9.10-h7f98852_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/libunwind-1.8.3-h65a8314_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.2-hca6bf5a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.2-he237659_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-14.3.0-h9f08a49_119.conda - conda: https://conda.anaconda.org/conda-forge/noarch/linkify-it-py-2.1.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-h280c20c_1002.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py314h67df5f8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.10.8-py314h1194b4b_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.2.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.6.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.19.2-py314hef15ded_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.2.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.3.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.17.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.22.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.11.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.17.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/nettle-3.10.1-h4a9d5aa_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio2-1.7.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.2-py314h2b28147_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/p11-kit-0.26.2-h3435931_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.7-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.1.1-py314h8ec4b1a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.10.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/prek-0.3.6-hb17b654_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.25.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.2-py314h0f05182_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pybaum-0.1.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.2-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-7.0.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-7.1.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-memray-1.8.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.8.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.3-h32b2ec7_101_cp314.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.3-h4df99d1_101.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.6-h4df99d1_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2026.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py314h67df5f8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.3-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.30.0-py314h2e6c369_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.17.1-py314hf07bd8e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-15.0.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-2.1.0-pyha191276_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/snakeviz-2.2.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.28-h4ee821c_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyhc90fa1f_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/textual-8.1.1-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/textual-8.2.7-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.3-py314h5bd0f2a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.15.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-2.0.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-17.0.1-py314h5bd0f2a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.8.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/webcolors-25.10.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h41580af_10.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/9f/d73dfb85d7a5b1a56a99adc50f2074029468168c970ff5daeade4ad819e4/choreographer-1.2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/1a/aff8bb287a4b1400f69e09a53bd65de96aa5cee5691925b38731c67fc695/click_default_group-1.2.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/c1/a662f0a8f6e024fca239d493f278d9adf5de1c8408af46a53a76beb13534/dags-0.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/43/f5/ee39c6e92acc742c052f137b47c210cd0a1b72dcd3f98495528bb4d27761/flatten_dict-0.4.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e6/ab/fb21f4c939bb440104cc2b396d3be1d9b7a9fd3c6c2a53d98c45b3d7c954/fsspec-2026.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d2/d8/09bfa816572a4d83bccd6750df1926f79158b1c36c5f73786e26dbe4ee38/greenlet-3.3.2-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/80/e4/88778c6a23b65224e5088e68fd0924e5bde2196a26e76edb3ea3543fed6a/jax-0.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a7/2c/8ddb471091b46de99bba7eaa7f4e3983f9c8e74e310e585ff08915ce8b7a/jax_cuda12_pjrt-0.9.1-py3-none-manylinux_2_27_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/17/e9/3632d7eddb8f282b50bf7c095bba9de91aae0de9baea56d1699d982fe5f8/jax_cuda12_plugin-0.9.1-cp314-cp314-manylinux_2_27_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/76/fe/67d2c414b0860d42f4a20b1fadbe7aeffb1b3d885efebd7aedf22a4bc2a2/jaxlib-0.9.1-cp314-cp314-manylinux_2_27_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/7b/91/984aca2ec129e2757d1e4e3c81c3fcda9d0f85b74670a094cc443d9ee949/joblib-1.5.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7c/25/6fe2dfc3d830ec614c5f83f88fc7472c4ed892b7f7f496367d31de4110c4/jupyter_book-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4b/97/f6de8d4af54d6401d6581a686cce3e3e2371a79ba459a449104e026c08bc/kaleido-1.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/54/20/6aa79ba3570bddd1bf7e951c6123f806751e58e8cce736bad77b2cf348d7/logistro-2.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ce/80/7f1f1bf8c2d5dfd8e9c0e1191aa355ff8b80b5619f84d6dcc2703fa7fd5a/loky-3.5.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c6/bb/82c7dcf38070b46172a517e2334e665c5bf374a262f99a283ea454bece7c/ml_dtypes-0.5.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/fe/75/0b4a10da17a44cf13567d08a9c7632a285297e46253263f1ae119129d10a/narwhals-2.18.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/77/3c/aa88abe01f3be3d1f8f787d1d33dc83e76fec05945f9a28fbb41cfb99cd5/nvidia_cublas_cu12-12.9.1.4-py3-none-manylinux_2_27_x86_64.whl + - conda: https://conda.anaconda.org/conda-forge/noarch/xlrd-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda + - pypi: . + - pypi: git+https://github.com/optimagic-dev/optimagic.git?branch=probability-allow-fixed-entries#ecd9ebe0dfb3abc09ab015d78774a30794d779d0 + - pypi: https://files.pythonhosted.org/packages/02/ac/85bc07d7a0766c7999f9bdfcf7f7cb2487fd0eb5d6bbe2bd41a3a54cd379/jax_cuda12_plugin-0.10.2-cp314-cp314-manylinux_2_27_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/12/46/b0fd4b04f86577921feb97d8e2cf028afe04f614d17fb5013de9282c9216/nvidia_cusparse_cu12-12.5.10.65-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/18/2a/d4cd8506d2044e082f8cd921be57392e6a9b5ccd3ffdf050362430a3d5d5/nvidia_cuda_cccl_cu12-12.9.27-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/c1/2e/b84e32197e33f39907b455b83395a017e697c07a449a2b15fd07fc1c9981/nvidia_cuda_cupti_cu12-12.9.79-py3-none-manylinux_2_25_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/1f/cca084ca2572810fff12ea9dbdcbe39eac048f40daf4a9077b49fcbe8cee/msgspec-0.21.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/25/48/b54a06168a2190572a312bfe4ce443687773eb61367ced31e064953dd2f7/nvidia_cuda_nvcc_cu12-12.9.86-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b8/85/e4af82cc9202023862090bfca4ea827d533329e925c758f0cde964cb54b7/nvidia_cuda_nvrtc_cu12-12.9.86-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/bc/46/a92db19b8309581092a3add7e6fceb4c301a3fd233969856a8cbf042cd3c/nvidia_cuda_runtime_cu12-12.9.79-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/3b/52/94aecda69df65ba1079a8b7dbe84632af5614dc0ed2c733185f6431874e3/nvidia_cudnn_cu12-9.20.0.48-py3-none-manylinux_2_27_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/95/f4/61e6996dd20481ee834f57a8e9dca28b1869366a135e0d42e2aa8493bdd4/nvidia_cufft_cu12-11.4.1.4-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/2c/1a/aff8bb287a4b1400f69e09a53bd65de96aa5cee5691925b38731c67fc695/click_default_group-1.2.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/40/79b0c64d44d6c166c0964ec1d803d067f4a145cca23e23925fd351d0e642/nvidia_cusolver_cu12-11.7.5.82-py3-none-manylinux_2_27_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/12/46/b0fd4b04f86577921feb97d8e2cf028afe04f614d17fb5013de9282c9216/nvidia_cusparse_cu12-12.5.10.65-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/31/1e/9e366f36efc550f07d6737f199e3f6bffafdf28795d007f10a77dd274f5c/nvidia_nccl_cu12-2.29.7-py3-none-manylinux_2_18_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/3e/85/1c12e849e4d50624e75496378a3fb168389f768d3ec7cb694fba873ff9a8/nvidia_nvshmem_cu12-3.7.0-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/45/d8/55e0901103c93d57bab3b932294c216f0cbd49054187ce29f8f13808d530/jaxopt-0.8.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/46/0c/c75bbfb967457a0b7670b8ad267bfc4fffdf341c074e0a80db06c24ccfd4/nvidia_nvjitlink_cu12-12.9.86-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/44/6a/cf1265d48719852f5144055ff611d9e71678a9b29afb7ace72bf248a0cd8/nvidia_nvshmem_cu12-3.5.21-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/91/85/08c4e13a90a13c509d1fe09596dd8198338b6cfff9ee280f01ae7694889e/optimagic-0.5.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fe/16/00261f20f467b9e8950a76ec1749f01359bf47f2fc3dac5e206de99835c0/optree-0.19.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/c2/8b/ecdad52d0b38d4b8f514be603e69ccd5eacf4e7241f972e37e79792212ec/orjson-3.11.7-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/55/77/6ea82043db22cb0f2bbfe7198da3544000ddaadb12d26be36e19b03a2dc5/pandas-3.0.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b1/29/c028a0731e202035f0e2e0bfbf1a3e46ad6c628cbb17f6f1cc9eea5d9ff1/pathlib_abc-0.5.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/50/32/e7ffa9c324ae260e5dbb4af2cd557bf7a8d155c8ac7b79a785fe1796fb92/nvidia_nccl_cu12-2.30.7-py3-none-manylinux_2_18_x86_64.whl - pypi: https://files.pythonhosted.org/packages/51/fe/53ac0cd932db5dcaf55961bc7cb7afdca8d80d8cc7406ed661f0c7dc111a/pdbp-1.8.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/80/b2/bba963dfce0fcbc5020a4f8b4361e132390c4bd78b46cfc7ae355e678b96/pytask-0.5.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/b9/19ecce5c57114b703b97378ded69ffde1f9f9d471d4db361bbfa6105861e/pytask_parallel-0.5.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fa/b6/3127540ecdf1464a00e5a01ee60a1b09175f6913f0644ac748494d9c4b21/pytest_timeout-2.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/05/5b/83e1ff87eb60ca706972f7e02e15c0b33396e7bdbd080069a5d1b53cf0d8/simplejson-3.20.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f2/5e/327428a034407651a048f5e624361adf3f9fbac9d0fa98e981e9c6ff2f5e/sqlalchemy-2.0.48-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/65/44/bb509c3d2c0b5a87e7a5af1d5917a402a32ff026f777a6d7cb6990746cbb/tabcompleter-1.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/54/20/6aa79ba3570bddd1bf7e951c6123f806751e58e8cce736bad77b2cf348d7/logistro-2.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/58/3b/1cdec6772bdbaf7b25dab360c59f03cadf05492dd724c6540af905389b07/pandas-3.0.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/5b/f2/44a7dd795a52d34d033b1cb1a6b1162eada650079e557e236fb6b88943be/pytask_parallel-0.5.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/69/77/ac054882c220872512df28d16aeb648fe0e651efbb5be4fd7c4817fd88b0/jaxlib-0.10.2-cp314-cp314-manylinux_2_27_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/71/cc/18245721fa7747065ab478316c7fea7c74777d07f37ae60db2e84f8172e8/beartype-0.22.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/72/9f/485516087cd8c44183aaf9ab850247a28e2e4a42a4d62eab77c21f673450/flatten_dict-0.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/76/3e/c0b690253f0b82d86e99949af13533363acfb5432ecb5d53dd5b3bce9c34/orjson-3.11.9-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/77/00/326facd192b7dc0731e43b30f5ada5ef235e2a3325a151d94ed3db041536/jax_cuda12_pjrt-0.10.2-py3-none-manylinux_2_27_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/78/91/3635cdb13318cb0a328abaa69e2b91251caad39d6779aa308098f341f6cb/simplejson-4.1.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/82/5ab5211079a151b6f661529369c0c8e98ec64cabf5c0cf22a0a05af124d8/jax-0.10.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/95/f4/61e6996dd20481ee834f57a8e9dca28b1869366a135e0d42e2aa8493bdd4/nvidia_cufft_cu12-11.4.1.4-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/99/69/d6c99db15dc0b5e892ac3cc7b942c8b21f4a9cc3bd9ea0bc3b0f339ffbd4/greenlet-3.5.2-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/9c/1a/4834b1f2fb1847412353d7342eb7a1d001a4f3bd9d24155e057135a4aa44/optree-0.19.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/9e/b9/a6d8bb7d228940f01885bd9f327ab7f9d366a9be775c4bf366bf9d9477ae/kaleido-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/dd/b04e4a733637d370831e328a356254cfc9c875195269b234cc8ca31ff674/dags-0.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b1/29/c028a0731e202035f0e2e0bfbf1a3e46ad6c628cbb17f6f1cc9eea5d9ff1/pathlib_abc-0.5.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b5/83/205e7af4153d9690c3cb94fa9cea670c0d26ce7f022aaa589a9e136f1491/jupyter_book-2.1.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b8/85/e4af82cc9202023862090bfca4ea827d533329e925c758f0cde964cb54b7/nvidia_cuda_nvrtc_cu12-12.9.86-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/ba/6c/ff8bf52315064dbeb55cb5067e191120a5b2e58bb648d0d34cf7969dc2c2/choreographer-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bc/46/a92db19b8309581092a3add7e6fceb4c301a3fd233969856a8cbf042cd3c/nvidia_cuda_runtime_cu12-12.9.79-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c1/2e/b84e32197e33f39907b455b83395a017e697c07a449a2b15fd07fc1c9981/nvidia_cuda_cupti_cu12-12.9.79-py3-none-manylinux_2_25_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c6/bb/82c7dcf38070b46172a517e2334e665c5bf374a262f99a283ea454bece7c/ml_dtypes-0.5.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c7/18/c86eb8e0202e32dd3df50d43d7ff9854f8e0603945ff398974c1d91ac1ef/tomli_w-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/c0/0a517bfe63ccd3b92eb254d264e28fca3c7cab75d07daea315250fb1bf73/nvidia_cublas_cu12-12.9.2.10-py3-none-manylinux_2_27_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/cb/fc/8c82be70b8f96d09943360f34cfb2ecdd3035294c51bce4131eeabe56645/tabcompleter-1.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/80/7f1f1bf8c2d5dfd8e9c0e1191aa355ff8b80b5619f84d6dcc2703fa7fd5a/loky-3.5.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d7/54/c30cb1d08258612ece1dfa72c6918998bebecb916c54fca6d806bc780f2b/pytask-0.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dd/1a/5d9a402b39ec892d856bbdd9db502ff73ce28cdf4aff72eb1ce1d6843506/universal_pathlib-0.3.10-py3-none-any.whl - - pypi: ./ - type-checking: + - pypi: https://files.pythonhosted.org/packages/dd/a1/e77854cb5336fd37dc3c6ae3b71de242c98caac5725120be0b526b31cbd0/sqlalchemy-2.0.51-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e1/ef/276c358c6ab44efbe68e69977657cb80927e7ab6d45968d042e1083f45e5/nvidia_cudnn_cu12-9.23.2.1-py3-none-manylinux_2_27_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e5/22/4222d7ddf3da30f363edaa98e329c2bce6c65497c9cb2810931c8b2c0fbc/fsspec-2026.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f9/14/abe5ce876ab5b66ee3c691bf537fcd43d037aea55d447aacf74630a8f31e/plotly-6.8.0-py3-none-any.whl + tests-cuda13: channels: - url: https://conda.anaconda.org/conda-forge/ indexes: - https://pypi.org/simple - options: - pypi-prerelease-mode: if-necessary-or-explicit packages: linux-64: - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.12.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/argon2-cffi-bindings-25.1.0-py314h5bd0f2a_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.2.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.3.0-py314h680f03e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.14.3-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.3.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.3.0-hbca2aae_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.10.3-hd2277e8_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.14-h78948cc_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.14.0-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.2-haa0cbde_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.11.0-h6488f85_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.26.3-h3bf836e_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.12.6-hb916526_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.5-haa0cbde_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.10-haa0cbde_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45.1-default_hfdba357_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_linux-64-2.45.1-default_h4852527_102.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.2.0-hed03a55_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.2.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py314h3de4e8d_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-he90730b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py314h4a8dc5f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py314h97ea11e_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.14.3-py314h67df5f8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-crt-tools-13.3.33-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-13.3.29-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-dev-13.3.29-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-static-13.3.29-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc-13.3.33-hcdd1206_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc-impl-13.3.33-h85509e4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc-tools-13.3.33-he02047a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc_linux-64-13.3.33-hb2fc203_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-impl-13.3.33-h4bc722e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-tools-13.3.33-h4bc722e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.21-py314h42812f9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/elfutils-0.194-h849f50c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.18.1-h27c8c51_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.3-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.16-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-15.2.0-he0086c7_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-15.2.0-h7be306e_27.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gnutls-3.8.13-h18acefa_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.15-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-15.2.0-hda75c37_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-15.2.0-hcb00b6d_27.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.16.0-nompi_py314hddf7a69_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-14.2.1-h6083320_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-2.1.0-nompi_h7d5651c_108.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.5.0-py314h97ea11e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-hbde042b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.19.1-h0c24ade_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.5-h088129d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.8.7-gpl_hc2c16d8_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-8_h4a7cf45_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-8_h0358290_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.20.0-hcf29cc6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.3-h73754d4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.88.1-h0d30a3d_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libidn2-2.3.8-hfac485b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.4.1-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-8_h47877c9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmicrohttpd-1.0.5-hc2fc477_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h877daf1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnvptxcompiler-dev-13.3.33-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.33-pthreads_h94d23a6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.58-h421ea60_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libraqm-0.10.5-h75b3fb1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-15.2.0-h90f66d4_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.22-h280c20c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.2-h0c1763c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtasn1-4.21.0-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libunistring-0.9.10-h7f98852_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libunwind-1.8.3-h65a8314_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.2-h5347b49_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.3-hca6bf5a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.3-h49c6c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-h280c20c_1002.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py314h67df5f8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.11.0-py314h261f116_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.19.3-py314hef15ded_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/nettle-3.10.1-h4a9d5aa_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.5.0-py314h2b28147_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.3-h35e630c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/p11-kit-0.26.2-h3435931_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.2.0-py314h8ec4b1a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/prek-0.4.5-hb17b654_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.2-py314h0f05182_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.6-habeac84_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py314h67df5f8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-2026.5.1-py314h1bee95f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.7.4-h92489ea_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.9.0-np2py314hf09ca88_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.18.0-py314hf07bd8e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.7-py314h5bd0f2a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-17.0.1-py314h5bd0f2a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-he73a12e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.13-he1eb515_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.7-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h09e67af_11.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.14.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.6.0-py314h680f03e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.15.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.4.0-hac0b51c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py314h4a8dc5f_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.6.17-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py314h97ea11e_4.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.3-py314hd8ed1ab_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.6-py314hd8ed1ab_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-64-13.3.3.3.1-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-crt-dev_linux-64-13.3.33-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-dev_linux-64-13.3.29-h376f20c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-static_linux-64-13.3.29-h376f20c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart_linux-64-13.3.29-h376f20c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-driver-dev_linux-64-13.3.29-h376f20c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvcc-dev_linux-64-13.3.33-he91c749_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-64-13.3.33-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-13.3-hcbadf70_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.20-py314h42812f9_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/execnet-2.1.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/filterpy-1.4.5-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.62.0-pyh7db6752_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.63.0-pyh7db6752_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.2-ha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.18-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.2.0-pyha191276_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.11.0-pyhecfbec7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.3.0-pyha191276_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.14.1-pyh53cf698_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.13.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.0.0-pyhcf101f3_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.15.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.1.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.26.0-hcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.3.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-builder-1.0.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.3.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.9.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.0-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.17.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.20.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.5.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.6.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.28.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.5.0-py314h97ea11e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-4.18.0-he073ed8_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.18-h0c24ade_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-5_h4a7cf45_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-5_h0358290_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.2-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.2-h73754d4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.2-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-5_h47877c9_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.55-h421ea60_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.21-h280c20c_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py314h67df5f8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.10.8-py314h1194b4b_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-15.2.0-hcc6f6b0_119.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libnvptxcompiler-dev_linux-64-13.3.33-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-15.2.0-hd446a21_119.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/linkify-it-py-2.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.2.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.6.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.2.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.3.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.17.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.22.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.11.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.17.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio2-1.7.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.2-py314h2b28147_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.7-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.1.1-py314h8ec4b1a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.10.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/prek-0.3.6-hb17b654_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.25.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.2-py314h0f05182_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pybaum-0.1.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.2-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.3-h32b2ec7_101_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-7.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-memray-1.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.8.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.3-h4df99d1_101.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.6-h4df99d1_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2026.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py314h67df5f8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.3-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.30.0-py314h2e6c369_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.17.1-py314hf07bd8e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-15.0.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-2.1.0-pyha191276_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/snakeviz-2.2.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.28-h4ee821c_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyhc90fa1f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/textual-8.2.7-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.3-py314h5bd0f2a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.15.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-17.0.1-py314h5bd0f2a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-2.0.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.8.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/webcolors-25.10.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h41580af_10.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/9f/d73dfb85d7a5b1a56a99adc50f2074029468168c970ff5daeade4ad819e4/choreographer-1.2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl + - conda: https://conda.anaconda.org/conda-forge/noarch/xlrd-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda + - pypi: . + - pypi: git+https://github.com/optimagic-dev/optimagic.git?branch=probability-allow-fixed-entries#ecd9ebe0dfb3abc09ab015d78774a30794d779d0 + - pypi: https://files.pythonhosted.org/packages/01/8a/f767031dcd0d24c2bbab4b696dbcf004da4f3284e5e4649fc47bc0e2bb78/nvidia_nvvm-13.3.33-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/0a/a7/b63e19b0cfb1ef4d2a6053aad1b1cc7344d1f14548c4dffd28b8416fc178/nvidia_cusparse-12.8.1.7-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/13/4a/02a64ee1f4708ad28f49ffa92735cb1a8325f617cb59f33951a07a8c4cca/nvidia_cusolver-12.2.2.18-py3-none-manylinux_2_27_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/1f/cca084ca2572810fff12ea9dbdcbe39eac048f40daf4a9077b49fcbe8cee/msgspec-0.21.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/2c/1a/aff8bb287a4b1400f69e09a53bd65de96aa5cee5691925b38731c67fc695/click_default_group-1.2.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/c1/a662f0a8f6e024fca239d493f278d9adf5de1c8408af46a53a76beb13534/dags-0.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/43/f5/ee39c6e92acc742c052f137b47c210cd0a1b72dcd3f98495528bb4d27761/flatten_dict-0.4.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e6/ab/fb21f4c939bb440104cc2b396d3be1d9b7a9fd3c6c2a53d98c45b3d7c954/fsspec-2026.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d2/d8/09bfa816572a4d83bccd6750df1926f79158b1c36c5f73786e26dbe4ee38/greenlet-3.3.2-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/80/e4/88778c6a23b65224e5088e68fd0924e5bde2196a26e76edb3ea3543fed6a/jax-0.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/76/fe/67d2c414b0860d42f4a20b1fadbe7aeffb1b3d885efebd7aedf22a4bc2a2/jaxlib-0.9.1-cp314-cp314-manylinux_2_27_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/7b/91/984aca2ec129e2757d1e4e3c81c3fcda9d0f85b74670a094cc443d9ee949/joblib-1.5.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7c/25/6fe2dfc3d830ec614c5f83f88fc7472c4ed892b7f7f496367d31de4110c4/jupyter_book-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4b/97/f6de8d4af54d6401d6581a686cce3e3e2371a79ba459a449104e026c08bc/kaleido-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3f/34/c500f90c7ae641b8e0f98965b36b8a7ac79cc8b296e8d251fe3eb592ee54/nvidia_nccl_cu13-2.30.7-py3-none-manylinux_2_18_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/3f/af/e1b107f034f7c133255c162b922bbad3da5be20ebf76df17662ae4bd31f6/nvidia_cuda_nvcc-13.3.33-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/45/d8/55e0901103c93d57bab3b932294c216f0cbd49054187ce29f8f13808d530/jaxopt-0.8.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/51/fe/53ac0cd932db5dcaf55961bc7cb7afdca8d80d8cc7406ed661f0c7dc111a/pdbp-1.8.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/6aa79ba3570bddd1bf7e951c6123f806751e58e8cce736bad77b2cf348d7/logistro-2.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ce/80/7f1f1bf8c2d5dfd8e9c0e1191aa355ff8b80b5619f84d6dcc2703fa7fd5a/loky-3.5.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c6/bb/82c7dcf38070b46172a517e2334e665c5bf374a262f99a283ea454bece7c/ml_dtypes-0.5.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/fe/75/0b4a10da17a44cf13567d08a9c7632a285297e46253263f1ae119129d10a/narwhals-2.18.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/09/17733fa3ef4f183b70d5e55f7fe7c712017fac7ec7a22e39dab1539acdb8/jax_cuda13_pjrt-0.10.2-py3-none-manylinux_2_27_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/58/3b/1cdec6772bdbaf7b25dab360c59f03cadf05492dd724c6540af905389b07/pandas-3.0.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/5b/f2/44a7dd795a52d34d033b1cb1a6b1162eada650079e557e236fb6b88943be/pytask_parallel-0.5.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/0f/f9434b616c38ffaf50b389f68e9b7b9977e35b964d8b7bded939369905bc/nvidia_cudnn_cu13-9.23.2.1-py3-none-manylinux_2_27_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/69/77/ac054882c220872512df28d16aeb648fe0e651efbb5be4fd7c4817fd88b0/jaxlib-0.10.2-cp314-cp314-manylinux_2_27_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/6c/97/3b1a80c97d1a1aad8133ce601a6cf4f238f41e11c2bd4860a69543a5d365/jax_cuda13_plugin-0.10.2-cp314-cp314-manylinux_2_27_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/71/cc/18245721fa7747065ab478316c7fea7c74777d07f37ae60db2e84f8172e8/beartype-0.22.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/72/9f/485516087cd8c44183aaf9ab850247a28e2e4a42a4d62eab77c21f673450/flatten_dict-0.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/76/3e/c0b690253f0b82d86e99949af13533363acfb5432ecb5d53dd5b3bce9c34/orjson-3.11.9-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/78/91/3635cdb13318cb0a328abaa69e2b91251caad39d6779aa308098f341f6cb/simplejson-4.1.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/86/99ac757b96255b1446bf307e1396567fd355b5ebe89ca04d01fa0a6bb704/nvidia_cuda_cupti-13.3.35-py3-none-manylinux_2_25_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/91/85/08c4e13a90a13c509d1fe09596dd8198338b6cfff9ee280f01ae7694889e/optimagic-0.5.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fe/16/00261f20f467b9e8950a76ec1749f01359bf47f2fc3dac5e206de99835c0/optree-0.19.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/c2/8b/ecdad52d0b38d4b8f514be603e69ccd5eacf4e7241f972e37e79792212ec/orjson-3.11.7-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/55/77/6ea82043db22cb0f2bbfe7198da3544000ddaadb12d26be36e19b03a2dc5/pandas-3.0.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/7c/2f/f91e4eee21585ff548e83358332d5632ee49f6b2dcd96cb5dca4e0468951/pandas_stubs-3.0.0.260204-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/82/5ab5211079a151b6f661529369c0c8e98ec64cabf5c0cf22a0a05af124d8/jax-0.10.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8b/2c/86916c8a34dcdb0c3ddd1c0e30545041bd781184e437b9cb76fcda70560b/nvidia_cuda_nvrtc-13.3.33-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/8d/a7/998af901511d5efdc6e42fc597d32a69f34eecf86f1591a9d230ab3ab951/nvidia_cuda_crt-13.3.33-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/93/09/2de17f86c0a94401687d8f62fc35499bb894455ca05150fa7bb6b41ea1e6/nvidia_nvshmem_cu13-3.7.0-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/97/be/5699b6e642b372f7d24c59c2f41383e2696825e20bab85f7399c7c6a56f7/nvidia_cuda_runtime-13.3.29-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/99/69/d6c99db15dc0b5e892ac3cc7b942c8b21f4a9cc3bd9ea0bc3b0f339ffbd4/greenlet-3.5.2-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/9c/1a/4834b1f2fb1847412353d7342eb7a1d001a4f3bd9d24155e057135a4aa44/optree-0.19.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/9e/b9/a6d8bb7d228940f01885bd9f327ab7f9d366a9be775c4bf366bf9d9477ae/kaleido-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/dd/b04e4a733637d370831e328a356254cfc9c875195269b234cc8ca31ff674/dags-0.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b1/29/c028a0731e202035f0e2e0bfbf1a3e46ad6c628cbb17f6f1cc9eea5d9ff1/pathlib_abc-0.5.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/51/fe/53ac0cd932db5dcaf55961bc7cb7afdca8d80d8cc7406ed661f0c7dc111a/pdbp-1.8.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/80/b2/bba963dfce0fcbc5020a4f8b4361e132390c4bd78b46cfc7ae355e678b96/pytask-0.5.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/b9/19ecce5c57114b703b97378ded69ffde1f9f9d471d4db361bbfa6105861e/pytask_parallel-0.5.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fa/b6/3127540ecdf1464a00e5a01ee60a1b09175f6913f0644ac748494d9c4b21/pytest_timeout-2.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/05/5b/83e1ff87eb60ca706972f7e02e15c0b33396e7bdbd080069a5d1b53cf0d8/simplejson-3.20.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f2/5e/327428a034407651a048f5e624361adf3f9fbac9d0fa98e981e9c6ff2f5e/sqlalchemy-2.0.48-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/65/44/bb509c3d2c0b5a87e7a5af1d5917a402a32ff026f777a6d7cb6990746cbb/tabcompleter-1.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/18/14/69a25a0cad493fb6a947302471b579a03516a3b00e7bece77fdc6b4afb9b/ty-0.0.23-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/94/b8/e77c355f179dc89d44e7ca6dbf7a46e650806df1d356a5462e5829fccea5/types_pytz-2026.1.1.20260304-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b5/83/205e7af4153d9690c3cb94fa9cea670c0d26ce7f022aaa589a9e136f1491/jupyter_book-2.1.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ba/6c/ff8bf52315064dbeb55cb5067e191120a5b2e58bb648d0d34cf7969dc2c2/choreographer-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/bb/82c7dcf38070b46172a517e2334e665c5bf374a262f99a283ea454bece7c/ml_dtypes-0.5.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c7/18/c86eb8e0202e32dd3df50d43d7ff9854f8e0603945ff398974c1d91ac1ef/tomli_w-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/fc/8c82be70b8f96d09943360f34cfb2ecdd3035294c51bce4131eeabe56645/tabcompleter-1.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/0d/cc77458e8fb0634597e3994650c2853ee785f2fc61bf370bbb304021cca1/nvidia_cublas-13.5.1.27-py3-none-manylinux_2_27_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/ce/80/7f1f1bf8c2d5dfd8e9c0e1191aa355ff8b80b5619f84d6dcc2703fa7fd5a/loky-3.5.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d7/54/c30cb1d08258612ece1dfa72c6918998bebecb916c54fca6d806bc780f2b/pytask-0.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dd/1a/5d9a402b39ec892d856bbdd9db502ff73ce28cdf4aff72eb1ce1d6843506/universal_pathlib-0.3.10-py3-none-any.whl - - pypi: ./ - osx-arm64: - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.conda + - pypi: https://files.pythonhosted.org/packages/dd/a1/e77854cb5336fd37dc3c6ae3b71de242c98caac5725120be0b526b31cbd0/sqlalchemy-2.0.51-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e5/22/4222d7ddf3da30f363edaa98e329c2bce6c65497c9cb2810931c8b2c0fbc/fsspec-2026.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/00/fab4a29fa1d7eb43bc6b94de4e86312c5e425d5582e58b9641300b9dffc7/nvidia_cufft-12.3.0.29-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f0/ee/580ca6f29dcab0221db8706badca1bbbb084f1975c4d4e83329c3a7e31f0/nvidia_nvjitlink-13.3.33-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f9/14/abe5ce876ab5b66ee3c691bf537fcd43d037aea55d447aacf74630a8f31e/plotly-6.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fe/fb/195d50d25ab68a76b817ffc68c45b1fb828598ce35a8e5c1736060628dab/nvidia_cuda_cccl-13.3.3.3.1-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + type-checking: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/argon2-cffi-bindings-25.1.0-py314h5bd0f2a_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.10.3-hd2277e8_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.14-h78948cc_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.14.0-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.2-haa0cbde_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.11.0-h6488f85_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.26.3-h3bf836e_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.12.6-hb916526_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.5-haa0cbde_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.10-haa0cbde_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.2.0-hed03a55_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py314h3de4e8d_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-he90730b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py314h4a8dc5f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py314h97ea11e_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.14.3-py314h67df5f8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.21-py314h42812f9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/elfutils-0.194-h849f50c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.18.1-h27c8c51_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.3-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.16-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gnutls-3.8.13-h18acefa_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.15-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.16.0-nompi_py314hddf7a69_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-14.2.1-h6083320_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-2.1.0-nompi_h7d5651c_108.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.5.0-py314h97ea11e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-hbde042b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.19.1-h0c24ade_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.5-h088129d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.8.7-gpl_hc2c16d8_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-8_h4a7cf45_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-8_h0358290_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.20.0-hcf29cc6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.3-h73754d4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.88.1-h0d30a3d_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libidn2-2.3.8-hfac485b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.4.1-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-8_h47877c9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmicrohttpd-1.0.5-hc2fc477_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h877daf1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.33-pthreads_h94d23a6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.58-h421ea60_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libraqm-0.10.5-h75b3fb1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.22-h280c20c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.2-h0c1763c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtasn1-4.21.0-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libunistring-0.9.10-h7f98852_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libunwind-1.8.3-h65a8314_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.2-h5347b49_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.3-hca6bf5a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.3-h49c6c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-h280c20c_1002.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py314h67df5f8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.11.0-py314h261f116_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.19.3-py314hef15ded_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/nettle-3.10.1-h4a9d5aa_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.5.0-py314h2b28147_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.3-h35e630c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/p11-kit-0.26.2-h3435931_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.2.0-py314h8ec4b1a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/prek-0.4.5-hb17b654_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.2-py314h0f05182_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.6-habeac84_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py314h67df5f8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-2026.5.1-py314h1bee95f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.7.4-h92489ea_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.9.0-np2py314hf09ca88_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.18.0-py314hf07bd8e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.7-py314h5bd0f2a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-17.0.1-py314h5bd0f2a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-he73a12e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.13-he1eb515_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.7-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h09e67af_11.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.12.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/appnope-0.1.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.14.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/argon2-cffi-bindings-25.1.0-py314h0612a62_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.2.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.3.0-py314h680f03e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.14.3-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.3.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.3.0-hbca2aae_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-1.2.0-h7d5ae5b_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-bin-1.2.0-hc919400_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.2.0-py314h3daef5d_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.6.0-py314h680f03e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.15.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.4.0-hac0b51c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-2.0.0-py314h44086f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.6.17-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/contourpy-1.3.3-py314hf8a3a22_4.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.3-py314hd8ed1ab_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.6-py314hd8ed1ab_100.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/debugpy-1.8.20-py314he609de1_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/execnet-2.1.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/filterpy-1.4.5-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.62.0-pyh7db6752_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.63.0-pyh7db6752_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.14.2-hce30654_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.18-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.2.0-pyh5552912_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.11.0-pyhecfbec7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.3.0-pyha191276_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.14.1-pyh53cf698_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.13.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.0.0-pyhcf101f3_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.15.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.1.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.26.0-hcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.3.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-builder-1.0.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.3.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.9.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.0-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.17.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.20.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.5.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.6.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.28.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/kiwisolver-1.5.0-py314hf8a3a22_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-h385eeb1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.18-hdfa7624_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.1.0-h1eee2c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.11.0-5_h51639a9_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.2.0-hc919400_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.2.0-hc919400_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.2.0-hc919400_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.11.0-5_hb0561ab_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.1-h55c6f16_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.25-hc11a715_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype-2.14.2-hce30654_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype6-2.14.2-hdfa99f5_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgcc-15.2.0-hcbb3090_18.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-h07b0088_18.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-hdae7583_18.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.1.2-hc919400_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.11.0-5_hd9741b5_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.30-openmp_ha158390_4.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.55-h132b30e_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.21-h1a92334_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.52.0-h1ae2325_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.1-h4030677_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.6.0-h07db88b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-22.1.0-hc7d1edf_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.3-py314h6e9b3f0_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/matplotlib-base-3.10.8-py314hd63e3f0_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/linkify-it-py-2.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.2.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.6.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.2.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.3.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.17.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.22.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.11.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.17.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio2-1.7.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.4.2-py314hae46ccb_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.4-hd9e9057_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.7-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-12.1.1-py314hab283cf_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.10.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/prek-0.3.6-h6fdd925_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.25.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-7.2.2-py314ha14b1ff_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-hd74edd7_1002.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pybaum-0.1.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-core-12.1-py314h3a4d195_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-framework-cocoa-12.1-py314h36abed7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.2-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.14.3-h4c637c5_101_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-7.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-memray-1.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.8.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.3-h4df99d1_101.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.6-h4df99d1_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2026.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.3-py314h6e9b3f0_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312h022ad19_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/qhull-2020.2-h420ef59_5.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.3-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rpds-py-0.30.0-py314haad56a0_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scipy-1.17.1-py314hfc1f868_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-2.1.0-pyh5552912_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-15.0.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-2.1.0-pyha191276_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/snakeviz-2.2.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyhc90fa1f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/textual-8.2.7-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.4-py314h0612a62_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.15.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/unicodedata2-17.0.1-py314h6c2aa35_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-2.0.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.8.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/webcolors-25.10.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.12-hc919400_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hc919400_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h4818236_10.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-ng-2.3.3-hed4e4f5_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/9f/d73dfb85d7a5b1a56a99adc50f2074029468168c970ff5daeade4ad819e4/choreographer-1.2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl + - conda: https://conda.anaconda.org/conda-forge/noarch/xlrd-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda + - pypi: . + - pypi: git+https://github.com/optimagic-dev/optimagic.git?branch=probability-allow-fixed-entries#ecd9ebe0dfb3abc09ab015d78774a30794d779d0 + - pypi: https://files.pythonhosted.org/packages/0b/e0/99ec5b02203c4e9ce878bc63d8caa06ac1f891e4d63bded9a5ced70fcb4f/pandas_stubs-3.0.3.260530-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/1f/cca084ca2572810fff12ea9dbdcbe39eac048f40daf4a9077b49fcbe8cee/msgspec-0.21.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/2c/1a/aff8bb287a4b1400f69e09a53bd65de96aa5cee5691925b38731c67fc695/click_default_group-1.2.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/c1/a662f0a8f6e024fca239d493f278d9adf5de1c8408af46a53a76beb13534/dags-0.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/43/f5/ee39c6e92acc742c052f137b47c210cd0a1b72dcd3f98495528bb4d27761/flatten_dict-0.4.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e6/ab/fb21f4c939bb440104cc2b396d3be1d9b7a9fd3c6c2a53d98c45b3d7c954/fsspec-2026.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/80/e4/88778c6a23b65224e5088e68fd0924e5bde2196a26e76edb3ea3543fed6a/jax-0.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a4/b0/f2c9caa6f545d4ecc1eab528c68c9191e40087f1bc79a6da2e29c6416510/jaxlib-0.9.1-cp314-cp314-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/7b/91/984aca2ec129e2757d1e4e3c81c3fcda9d0f85b74670a094cc443d9ee949/joblib-1.5.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7c/25/6fe2dfc3d830ec614c5f83f88fc7472c4ed892b7f7f496367d31de4110c4/jupyter_book-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4b/97/f6de8d4af54d6401d6581a686cce3e3e2371a79ba459a449104e026c08bc/kaleido-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/45/d8/55e0901103c93d57bab3b932294c216f0cbd49054187ce29f8f13808d530/jaxopt-0.8.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/51/fe/53ac0cd932db5dcaf55961bc7cb7afdca8d80d8cc7406ed661f0c7dc111a/pdbp-1.8.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/6aa79ba3570bddd1bf7e951c6123f806751e58e8cce736bad77b2cf348d7/logistro-2.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ce/80/7f1f1bf8c2d5dfd8e9c0e1191aa355ff8b80b5619f84d6dcc2703fa7fd5a/loky-3.5.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/72/4e/1339dc6e2557a344f5ba5590872e80346f76f6cb2ac3dd16e4666e88818c/ml_dtypes-0.5.4-cp314-cp314-macosx_10_13_universal2.whl - - pypi: https://files.pythonhosted.org/packages/fe/75/0b4a10da17a44cf13567d08a9c7632a285297e46253263f1ae119129d10a/narwhals-2.18.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/58/3b/1cdec6772bdbaf7b25dab360c59f03cadf05492dd724c6540af905389b07/pandas-3.0.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/5b/f2/44a7dd795a52d34d033b1cb1a6b1162eada650079e557e236fb6b88943be/pytask_parallel-0.5.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/62/89/41e80670779a223d8bc8bc83019a619988cfa5c432cedac5cec23884fbc4/types_pytz-2026.2.0.20260518-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/69/77/ac054882c220872512df28d16aeb648fe0e651efbb5be4fd7c4817fd88b0/jaxlib-0.10.2-cp314-cp314-manylinux_2_27_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/71/cc/18245721fa7747065ab478316c7fea7c74777d07f37ae60db2e84f8172e8/beartype-0.22.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/72/9f/485516087cd8c44183aaf9ab850247a28e2e4a42a4d62eab77c21f673450/flatten_dict-0.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/76/3e/c0b690253f0b82d86e99949af13533363acfb5432ecb5d53dd5b3bce9c34/orjson-3.11.9-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/78/91/3635cdb13318cb0a328abaa69e2b91251caad39d6779aa308098f341f6cb/simplejson-4.1.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/91/85/08c4e13a90a13c509d1fe09596dd8198338b6cfff9ee280f01ae7694889e/optimagic-0.5.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/08/67/2e19866a03a6e75eb62194a5b55e1e3154ca1517478c300232b0229f8c2a/optree-0.19.0-cp314-cp314-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/e9/1e/745565dca749813db9a093c5ebc4bac1a9475c64d54b95654336ac3ed961/orjson-3.11.7-cp314-cp314-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl - - pypi: https://files.pythonhosted.org/packages/72/3a/5b39b51c64159f470f1ca3b1c2a87da290657ca022f7cd11442606f607d1/pandas-3.0.1-cp314-cp314-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/7c/2f/f91e4eee21585ff548e83358332d5632ee49f6b2dcd96cb5dca4e0468951/pandas_stubs-3.0.0.260204-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/82/5ab5211079a151b6f661529369c0c8e98ec64cabf5c0cf22a0a05af124d8/jax-0.10.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/99/69/d6c99db15dc0b5e892ac3cc7b942c8b21f4a9cc3bd9ea0bc3b0f339ffbd4/greenlet-3.5.2-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/9c/1a/4834b1f2fb1847412353d7342eb7a1d001a4f3bd9d24155e057135a4aa44/optree-0.19.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/9e/b9/a6d8bb7d228940f01885bd9f327ab7f9d366a9be775c4bf366bf9d9477ae/kaleido-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/dd/b04e4a733637d370831e328a356254cfc9c875195269b234cc8ca31ff674/dags-0.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b1/29/c028a0731e202035f0e2e0bfbf1a3e46ad6c628cbb17f6f1cc9eea5d9ff1/pathlib_abc-0.5.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/51/fe/53ac0cd932db5dcaf55961bc7cb7afdca8d80d8cc7406ed661f0c7dc111a/pdbp-1.8.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/80/b2/bba963dfce0fcbc5020a4f8b4361e132390c4bd78b46cfc7ae355e678b96/pytask-0.5.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/b9/19ecce5c57114b703b97378ded69ffde1f9f9d471d4db361bbfa6105861e/pytask_parallel-0.5.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fa/b6/3127540ecdf1464a00e5a01ee60a1b09175f6913f0644ac748494d9c4b21/pytest_timeout-2.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/05/5b/83e1ff87eb60ca706972f7e02e15c0b33396e7bdbd080069a5d1b53cf0d8/simplejson-3.20.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f7/b3/f437eaa1cf028bb3c927172c7272366393e73ccd104dcf5b6963f4ab5318/sqlalchemy-2.0.48-cp314-cp314-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/65/44/bb509c3d2c0b5a87e7a5af1d5917a402a32ff026f777a6d7cb6990746cbb/tabcompleter-1.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0f/01/3f25909b02fac29bb0a62b2251f8d62e65d697781ffa4cf6b47a4c075c85/ty-0.0.23-py3-none-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/94/b8/e77c355f179dc89d44e7ca6dbf7a46e650806df1d356a5462e5829fccea5/types_pytz-2026.1.1.20260304-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b5/83/205e7af4153d9690c3cb94fa9cea670c0d26ce7f022aaa589a9e136f1491/jupyter_book-2.1.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ba/6c/ff8bf52315064dbeb55cb5067e191120a5b2e58bb648d0d34cf7969dc2c2/choreographer-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/bb/82c7dcf38070b46172a517e2334e665c5bf374a262f99a283ea454bece7c/ml_dtypes-0.5.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c7/18/c86eb8e0202e32dd3df50d43d7ff9854f8e0603945ff398974c1d91ac1ef/tomli_w-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/fc/8c82be70b8f96d09943360f34cfb2ecdd3035294c51bce4131eeabe56645/tabcompleter-1.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/80/7f1f1bf8c2d5dfd8e9c0e1191aa355ff8b80b5619f84d6dcc2703fa7fd5a/loky-3.5.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d7/54/c30cb1d08258612ece1dfa72c6918998bebecb916c54fca6d806bc780f2b/pytask-0.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dd/1a/5d9a402b39ec892d856bbdd9db502ff73ce28cdf4aff72eb1ce1d6843506/universal_pathlib-0.3.10-py3-none-any.whl - - pypi: ./ - win-64: - - conda: https://conda.anaconda.org/conda-forge/win-64/_openmp_mutex-4.5-20_gnu.conda + - pypi: https://files.pythonhosted.org/packages/dd/a1/e77854cb5336fd37dc3c6ae3b71de242c98caac5725120be0b526b31cbd0/sqlalchemy-2.0.51-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e5/22/4222d7ddf3da30f363edaa98e329c2bce6c65497c9cb2810931c8b2c0fbc/fsspec-2026.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f9/14/abe5ce876ab5b66ee3c691bf537fcd43d037aea55d447aacf74630a8f31e/plotly-6.8.0-py3-none-any.whl + osx-arm64: - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.12.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.14.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/appnope-0.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/argon2-cffi-bindings-25.1.0-py314h5a2d7ad_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.2.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.3.0-py314h680f03e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.14.3-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.3.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.3.0-hbca2aae_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-1.2.0-h2d644bc_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-bin-1.2.0-hfd05255_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-python-1.2.0-py314he701e3d_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-h4c7d964_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.6.0-py314h680f03e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.15.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.4.0-hac0b51c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/cffi-2.0.0-py314h5a2d7ad_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.6.17-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/contourpy-1.3.3-py314hf309875_4.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.3-py314hd8ed1ab_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.6-py314hd8ed1ab_100.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/debugpy-1.8.20-py314hb98de8c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/execnet-2.1.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/filterpy-1.4.5-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.62.0-pyh7db6752_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.63.0-pyh7db6752_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/freetype-2.14.2-h57928b3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.18-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.2.0-pyh6dadd2b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.11.0-pyhccfa634_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.3.0-pyh01cf8df_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.14.1-pyh53cf698_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.13.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.0.0-pyhcf101f3_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.15.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.1.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.26.0-hcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.3.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.8.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyh6dadd2b_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.0-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.17.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-builder-1.0.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.3.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.9.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.20.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.5.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.6.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.28.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/kiwisolver-1.5.0-py314hf309875_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.22.2-h0ea6238_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/lcms2-2.18-hf2c6c5f_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/lerc-4.1.0-hd936e49_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.11.0-5_hf2e6a31_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlicommon-1.2.0-hfd05255_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlidec-1.2.0-hfd05255_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlienc-1.2.0-hfd05255_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.11.0-5_h2a3cdd5_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.25-h51727cc_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.7.4-hac47afa_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h3d046cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype-2.14.2-h57928b3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype6-2.14.2-hdbac1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libgcc-15.2.0-h8ee18e1_18.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libgomp-15.2.0-h8ee18e1_18.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.12.2-default_h4379cf1_1000.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.18-hc1393d2_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.1.2-hfd05255_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.11.0-5_hf9ab0e9_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.2-hfd05255_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libmpdec-4.0.0-hfd05255_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.55-h7351971_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libsodium-1.0.21-h6a83c73_3.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.52.0-hf5d6505_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.1-h8f73337_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libwebp-base-1.6.0-h4d5522a_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_10.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.17.0-h0e4246c_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.2-h692994f_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.2-h5d26750_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/llvm-openmp-22.1.0-h4fa8253_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/markupsafe-3.0.3-py314h2359020_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/matplotlib-base-3.10.8-py314hfa45d96_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.2.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2025.3.0-hac47afa_455.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/linkify-it-py-2.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.2.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.6.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.3.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.17.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.22.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.11.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.17.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio2-1.7.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.4.2-py314h06c3c77_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/openjpeg-2.5.4-h0e57b4f_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.1-hf411b9b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pillow-12.1.1-py314h61b30b5_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.7-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.10.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/prek-0.3.6-h18a1a76_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.25.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/psutil-7.2.2-py314hc5dbbe4_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pthread-stubs-0.4-h0e40799_1002.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pybaum-0.1.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.2-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.14.3-h4b44e0e_101_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-7.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-memray-1.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.8.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.3-h4df99d1_101.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.6-h4df99d1_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2026.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-311-py314h8f8f202_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pywinpty-2.0.15-py314h51f0985_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.3-py314h2359020_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pyzmq-27.1.0-py312h343a6d4_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/qhull-2020.2-hc790b64_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/rpds-py-0.30.0-py314h9f07db2_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/scipy-1.17.1-py314h221f224_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-2.1.0-pyh6dadd2b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-15.0.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-2.1.0-pyh5552912_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/snakeviz-2.2.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2022.3.0-h3155e25_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyh6dadd2b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyhc90fa1f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/textual-8.2.7-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h6ed50ae_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/tornado-6.5.4-py314h5a2d7ad_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.15.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/unicodedata2-17.0.1-py314h5a2d7ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-2.0.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h41ae7f8_34.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_34.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.44.35208-h818238b_34.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.8.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/webcolors-25.10.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/win_inet_pton-1.1.0-pyh7428d3b_8.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/winpty-0.4.3-4.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxau-1.0.12-hba3369d_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxdmcp-1.1.5-hba3369d_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/zeromq-4.3.5-h507cc87_10.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/zlib-ng-2.3.3-h0261ad2_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/9f/d73dfb85d7a5b1a56a99adc50f2074029468168c970ff5daeade4ad819e4/choreographer-1.2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl + - conda: https://conda.anaconda.org/conda-forge/noarch/xlrd-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/argon2-cffi-bindings-25.1.0-py314h0612a62_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.10.3-hc11c9a1_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-cal-0.9.14-h81c6212_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-common-0.14.0-h84a0fba_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-compression-0.3.2-h61d3404_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-http-0.11.0-h0a63974_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-io-0.26.3-h58c0f83_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-s3-0.12.6-h43def2a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.2.5-h61d3404_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-checksums-0.2.10-h61d3404_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-1.2.0-h7d5ae5b_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-bin-1.2.0-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.2.0-py314h3daef5d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.6-hc919400_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cairo-1.18.4-he0f2337_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-2.0.0-py314h44086f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/contourpy-1.3.3-py314hf8a3a22_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/coverage-7.14.3-py314h6e9b3f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/debugpy-1.8.21-py314he609de1_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fontconfig-2.18.1-h2b252f5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.14.3-hce30654_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fribidi-1.0.16-hc919400_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/graphite2-1.3.15-hf6b4638_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/h5py-3.16.0-nompi_py314h658a3ac_102.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/harfbuzz-14.2.1-h3103d1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/hdf5-2.1.0-nompi_hb7e0c14_108.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/kiwisolver-1.5.0-py314hf8a3a22_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-hfd3d5f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.19.1-hdfa7624_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.1.0-h1eee2c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libaec-1.1.5-h8664d51_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.11.0-8_h51639a9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.2.0-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.2.0-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.2.0-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.11.0-8_hb0561ab_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.20.0-hd5a2499_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.8-h55c6f16_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.25-hc11a715_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.8.1-hf6b4638_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype-2.14.3-hce30654_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype6-2.14.3-hdfa99f5_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgcc-15.2.0-hcbb3090_19.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-h07b0088_19.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-hdae7583_19.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libglib-2.88.1-ha08bb59_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.18-h23cfdf5_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libintl-0.25.1-h493aca8_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.1.4.1-h84a0fba_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.11.0-8_hd9741b5_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.3-h8088a28_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.68.1-h8f3e76b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.33-openmp_he657e61_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.58-h132b30e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libraqm-0.10.5-h29bd36a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.22-h1a92334_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.2-h1ae2325_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h1590b86_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.1-h4030677_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.6.0-h07db88b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-22.1.8-hc7d1edf_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.10.0-h286801f_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.3-py314h6e9b3f0_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/matplotlib-base-3.11.0-py314ha5eae4c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/memray-1.19.3-py314h44d60dd_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.6-h1d4f5a5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.5.0-py314hb79c6fa_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.4-hd9e9057_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.3-hd24854e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.47-h30297fc_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-12.2.0-py314hab283cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pixman-0.46.4-h81086ad_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/prek-0.4.5-h6fdd925_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-7.2.2-py314ha14b1ff_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-hd74edd7_1002.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-core-12.1-py314h3a4d195_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-framework-cocoa-12.1-py314h36abed7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.14.6-h156bc91_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.3-py314h6e9b3f0_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312h022ad19_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/qhull-2020.2-h420ef59_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rpds-py-2026.5.1-py314he1d1ac0_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-learn-1.9.0-np2py314h15f0f0f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scipy-1.18.0-py314h18e1515_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.7-py314h6c2aa35_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/unicodedata2-17.0.1-py314h6c2aa35_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.12-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h10816f8_11.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-ng-2.3.3-hed4e4f5_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda + - pypi: . + - pypi: git+https://github.com/optimagic-dev/optimagic.git?branch=probability-allow-fixed-entries#ecd9ebe0dfb3abc09ab015d78774a30794d779d0 + - pypi: https://files.pythonhosted.org/packages/0b/e0/99ec5b02203c4e9ce878bc63d8caa06ac1f891e4d63bded9a5ced70fcb4f/pandas_stubs-3.0.3.260530-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/1a/aff8bb287a4b1400f69e09a53bd65de96aa5cee5691925b38731c67fc695/click_default_group-1.2.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/c1/a662f0a8f6e024fca239d493f278d9adf5de1c8408af46a53a76beb13534/dags-0.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/43/f5/ee39c6e92acc742c052f137b47c210cd0a1b72dcd3f98495528bb4d27761/flatten_dict-0.4.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e6/ab/fb21f4c939bb440104cc2b396d3be1d9b7a9fd3c6c2a53d98c45b3d7c954/fsspec-2026.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f3/ca/2101ca3d9223a1dc125140dbc063644dca76df6ff356531eb27bc267b446/greenlet-3.3.2-cp314-cp314-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/80/e4/88778c6a23b65224e5088e68fd0924e5bde2196a26e76edb3ea3543fed6a/jax-0.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/54/0d/a8e27c1c434e489883c1182bd52de27775b8a78013de62e6eabf80991df5/jaxlib-0.9.1-cp314-cp314-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/7b/91/984aca2ec129e2757d1e4e3c81c3fcda9d0f85b74670a094cc443d9ee949/joblib-1.5.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7c/25/6fe2dfc3d830ec614c5f83f88fc7472c4ed892b7f7f496367d31de4110c4/jupyter_book-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4b/97/f6de8d4af54d6401d6581a686cce3e3e2371a79ba459a449104e026c08bc/kaleido-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/45/d8/55e0901103c93d57bab3b932294c216f0cbd49054187ce29f8f13808d530/jaxopt-0.8.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/49/cc/14dd93887295859457e507fc46a847b68ae8f20c42b2fde4d8a749c94bbc/optree-0.19.1-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/51/fe/53ac0cd932db5dcaf55961bc7cb7afdca8d80d8cc7406ed661f0c7dc111a/pdbp-1.8.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/6aa79ba3570bddd1bf7e951c6123f806751e58e8cce736bad77b2cf348d7/logistro-2.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ce/80/7f1f1bf8c2d5dfd8e9c0e1191aa355ff8b80b5619f84d6dcc2703fa7fd5a/loky-3.5.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e9/93/2bfed22d2498c468f6bcd0d9f56b033eaa19f33320389314c19ef6766413/ml_dtypes-0.5.4-cp314-cp314-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/fe/75/0b4a10da17a44cf13567d08a9c7632a285297e46253263f1ae119129d10a/narwhals-2.18.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5b/f2/44a7dd795a52d34d033b1cb1a6b1162eada650079e557e236fb6b88943be/pytask_parallel-0.5.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/62/89/41e80670779a223d8bc8bc83019a619988cfa5c432cedac5cec23884fbc4/types_pytz-2026.2.0.20260518-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/68/10/bf2d6738d72748b961a3751ab89522d58c54efc36a8e1a12161216cd45cf/pandas-3.0.3-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/68/31/9a5432c433a7671107182cdc9a20ea78a70f99c4e5334aa54b6d4d0d79ed/simplejson-4.1.1-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/71/cc/18245721fa7747065ab478316c7fea7c74777d07f37ae60db2e84f8172e8/beartype-0.22.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/72/4e/1339dc6e2557a344f5ba5590872e80346f76f6cb2ac3dd16e4666e88818c/ml_dtypes-0.5.4-cp314-cp314-macosx_10_13_universal2.whl + - pypi: https://files.pythonhosted.org/packages/72/9f/485516087cd8c44183aaf9ab850247a28e2e4a42a4d62eab77c21f673450/flatten_dict-0.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/91/85/08c4e13a90a13c509d1fe09596dd8198338b6cfff9ee280f01ae7694889e/optimagic-0.5.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7e/c3/587cc9aa8d4742cd690da79460081e7d834499e07e8b2bd2ccc4c66928df/optree-0.19.0-cp314-cp314-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/12/df/172771902943af54bf661a8d102bdf2e7f932127968080632bda6054b62c/orjson-3.11.7-cp314-cp314-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/09/f8/8ce132104074f977f907442790eaae24e27bce3b3b454e82faa3237ff098/pandas-3.0.1-cp314-cp314-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/7c/2f/f91e4eee21585ff548e83358332d5632ee49f6b2dcd96cb5dca4e0468951/pandas_stubs-3.0.0.260204-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/82/5ab5211079a151b6f661529369c0c8e98ec64cabf5c0cf22a0a05af124d8/jax-0.10.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8e/eb/5da01e356015aee6ecfa1187ced87aef51364e306f5e695dd52719bf0e78/orjson-3.11.9-cp314-cp314-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl + - pypi: https://files.pythonhosted.org/packages/9e/b9/a6d8bb7d228940f01885bd9f327ab7f9d366a9be775c4bf366bf9d9477ae/kaleido-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/dd/b04e4a733637d370831e328a356254cfc9c875195269b234cc8ca31ff674/dags-0.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b1/29/c028a0731e202035f0e2e0bfbf1a3e46ad6c628cbb17f6f1cc9eea5d9ff1/pathlib_abc-0.5.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/51/fe/53ac0cd932db5dcaf55961bc7cb7afdca8d80d8cc7406ed661f0c7dc111a/pdbp-1.8.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5a/dc/491b7661614ab97483abf2056be1deee4dc2490ecbf7bff9ab5cdbac86e1/pyreadline3-3.5.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/80/b2/bba963dfce0fcbc5020a4f8b4361e132390c4bd78b46cfc7ae355e678b96/pytask-0.5.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/b9/19ecce5c57114b703b97378ded69ffde1f9f9d471d4db361bbfa6105861e/pytask_parallel-0.5.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fa/b6/3127540ecdf1464a00e5a01ee60a1b09175f6913f0644ac748494d9c4b21/pytest_timeout-2.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/14/25/b208c5683343959b670dc001595f2f3737e051da617f66c31f7c4fa93abc/rich-14.3.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/05/5b/83e1ff87eb60ca706972f7e02e15c0b33396e7bdbd080069a5d1b53cf0d8/simplejson-3.20.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/95/7e/e83615cb63f80047f18e61e31e8e32257d39458426c23006deeaf48f463b/sqlalchemy-2.0.48-cp314-cp314-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/65/44/bb509c3d2c0b5a87e7a5af1d5917a402a32ff026f777a6d7cb6990746cbb/tabcompleter-1.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/31/2e/eaed4ff5c85e857a02415084c394e02c30476b65e158eec1938fdaa9a205/ty-0.0.23-py3-none-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/94/b8/e77c355f179dc89d44e7ca6dbf7a46e650806df1d356a5462e5829fccea5/types_pytz-2026.1.1.20260304-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b1/49/a739be2e1d02a96a658eb71ab45d921c874249252358ad24a5bffdd02525/sqlalchemy-2.0.51-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/b5/83/205e7af4153d9690c3cb94fa9cea670c0d26ce7f022aaa589a9e136f1491/jupyter_book-2.1.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ba/6c/ff8bf52315064dbeb55cb5067e191120a5b2e58bb648d0d34cf7969dc2c2/choreographer-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c7/18/c86eb8e0202e32dd3df50d43d7ff9854f8e0603945ff398974c1d91ac1ef/tomli_w-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/fc/8c82be70b8f96d09943360f34cfb2ecdd3035294c51bce4131eeabe56645/tabcompleter-1.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/80/7f1f1bf8c2d5dfd8e9c0e1191aa355ff8b80b5619f84d6dcc2703fa7fd5a/loky-3.5.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d1/a1/c5e46c3e42b866199365e35d11dddfd1fbd8bba4fdb3c52f965b1607ce94/msgspec-0.21.1-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/d7/54/c30cb1d08258612ece1dfa72c6918998bebecb916c54fca6d806bc780f2b/pytask-0.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dd/1a/5d9a402b39ec892d856bbdd9db502ff73ce28cdf4aff72eb1ce1d6843506/universal_pathlib-0.3.10-py3-none-any.whl - - pypi: ./ -packages: -- conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda - build_number: 20 - sha256: 1dd3fffd892081df9726d7eb7e0dea6198962ba775bd88842135a4ddb4deb3c9 - md5: a9f577daf3de00bca7c3c76c0ecbd1de - depends: - - __glibc >=2.17,<3.0.a0 - - libgomp >=7.5.0 - constrains: - - openmp_impl <0.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 28948 - timestamp: 1770939786096 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.conda - build_number: 7 - sha256: 7acaa2e0782cad032bdaf756b536874346ac1375745fb250e9bdd6a48a7ab3cd - md5: a44032f282e7d2acdeb1c240308052dd - depends: - - llvm-openmp >=9.0.1 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 8325 - timestamp: 1764092507920 -- conda: https://conda.anaconda.org/conda-forge/win-64/_openmp_mutex-4.5-20_gnu.conda + - pypi: https://files.pythonhosted.org/packages/e5/22/4222d7ddf3da30f363edaa98e329c2bce6c65497c9cb2810931c8b2c0fbc/fsspec-2026.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f2/0d/27471ec9f1d04674f6e62de809412371e097aed3eca7d9483e677c54c214/jaxlib-0.10.2-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/f9/14/abe5ce876ab5b66ee3c691bf537fcd43d037aea55d447aacf74630a8f31e/plotly-6.8.0-py3-none-any.whl + win-64: + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.14.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.6.0-py314h680f03e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.15.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.4.0-hac0b51c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-h4c7d964_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.6.17-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.6-py314hd8ed1ab_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/execnet-2.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filterpy-1.4.5-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.63.0-pyh7db6752_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.18-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.3.0-pyh6dadd2b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.14.1-pyhe2676ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.15.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.1.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.26.0-hcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-builder-1.0.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.3.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.9.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyh6dadd2b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.20.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.28.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.3.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.22.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.11.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.17.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio2-1.7.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.7-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.10.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybaum-0.1.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-7.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.6-h4df99d1_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2026.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-2.1.0-pyh6dadd2b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/snakeviz-2.2.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyh6dadd2b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.15.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.8.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/webcolors-25.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/win_inet_pton-1.1.0-pyh7428d3b_8.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xlrd-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/argon2-cffi-bindings-25.1.0-py314h5a2d7ad_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-auth-0.10.3-h4ad2c79_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-cal-0.9.14-h270aff2_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-common-0.14.0-hfd05255_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-compression-0.3.2-h1f21522_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-http-0.11.0-h4721ae0_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-io-0.26.3-h1a62f66_5.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-s3-0.12.6-h425879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-sdkutils-0.2.5-h1f21522_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-checksums-0.2.10-h1f21522_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-1.2.0-h2d644bc_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-bin-1.2.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-python-1.2.0-py314he701e3d_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cairo-1.18.4-h477c42c_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cffi-2.0.0-py314h5a2d7ad_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/contourpy-1.3.3-py314hf309875_4.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/coverage-7.14.3-py314h2359020_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/debugpy-1.8.21-py314hb98de8c_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/fontconfig-2.18.1-hd47e2ca_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/freetype-2.14.3-h57928b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/fribidi-1.0.16-hfd05255_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/graphite2-1.3.15-hac47afa_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/h5py-3.16.0-nompi_py314h02517ec_102.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/harfbuzz-14.2.1-h5a1b470_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/hdf5-2.1.0-nompi_ha9ae7cf_108.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/icu-78.3-h637d24d_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/kiwisolver-1.5.0-py314hf309875_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.22.2-h719d79b_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/lcms2-2.19.1-hf2c6c5f_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/lerc-4.1.0-hd936e49_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libaec-1.1.5-haf901d7_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.11.0-8_h8455456_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlicommon-1.2.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlidec-1.2.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlienc-1.2.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.11.0-8_h2a3cdd5_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libcurl-8.20.0-h8206538_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.25-h51727cc_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.8.1-hac47afa_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h3d046cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype-2.14.3-h57928b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype6-2.14.3-hdbac1cb_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libgcc-15.2.0-h8ee18e1_19.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.88.1-h7ce1215_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libgomp-15.2.0-h8ee18e1_19.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.13.0-default_h049141e_1000.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.18-hc1393d2_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libintl-0.22.5-h5728263_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.1.4.1-hfd05255_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.11.0-8_hf9ab0e9_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.3-hfd05255_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libmpdec-4.0.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.58-h7351971_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libraqm-0.10.5-h781ae3c_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsodium-1.0.22-h6a83c73_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.2-hf5d6505_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libssh2-1.11.1-h9aa295b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.1-h8f73337_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libwebp-base-1.6.0-h4d5522a_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_10.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.17.0-h0e4246c_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.3-h3cfd58e_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.3-h8ef44ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.2-hfd05255_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/llvm-openmp-22.1.8-h4fa8253_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/markupsafe-3.0.3-py314h2359020_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/matplotlib-base-3.11.0-py314h6cfc8ec_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2026.0.0-hac47afa_908.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.5.0-py314h02f10f6_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/onemkl-license-2026.0.0-h57928b3_908.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openjpeg-2.5.4-h0e57b4f_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.3-hf411b9b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pcre2-10.47-hd2b5f0e_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pillow-12.2.0-py314h61b30b5_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pixman-0.46.4-h5112557_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/prek-0.4.5-h18a1a76_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/psutil-7.2.2-py314hc5dbbe4_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pthread-stubs-0.4-h0e40799_1002.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.14.6-h4b44e0e_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-312-py314hcaaf0b2_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pywinpty-2.0.15-py314h51f0985_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.3-py314h2359020_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pyzmq-27.1.0-py312h343a6d4_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/qhull-2020.2-hc790b64_5.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/rpds-py-2026.5.1-py314hc980628_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/scikit-learn-1.9.0-np2py314h1b5b07a_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/scipy-1.18.0-py314h221f224_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2023.0.0-hd3d4ead_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h6ed50ae_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tornado-6.5.7-py314h5a2d7ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/unicodedata2-17.0.1-py314h5a2d7ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.5-h1b7c187_39.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.51.36231-h1b9f54f_39.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.51.36231-h1b9f54f_39.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/winpty-0.4.3-4.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxau-1.0.12-hba3369d_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxdmcp-1.1.5-hba3369d_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zeromq-4.3.5-h3a581c9_11.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zlib-1.3.2-hfd05255_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zlib-ng-2.3.3-h0261ad2_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda + - pypi: . + - pypi: git+https://github.com/optimagic-dev/optimagic.git?branch=probability-allow-fixed-entries#ecd9ebe0dfb3abc09ab015d78774a30794d779d0 + - pypi: https://files.pythonhosted.org/packages/0b/e0/99ec5b02203c4e9ce878bc63d8caa06ac1f891e4d63bded9a5ced70fcb4f/pandas_stubs-3.0.3.260530-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0d/7d/c592d1fa69c210be0d2743fffc598dfc2f54efa9671c5f6f5d1e151c6f4a/jaxlib-0.10.2-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/18/72/ec1b5cbdcb140c132e6c7bdf99bd73e4f675439e77126c88f472fcffa09c/simplejson-4.1.1-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2c/1a/aff8bb287a4b1400f69e09a53bd65de96aa5cee5691925b38731c67fc695/click_default_group-1.2.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2d/44/b3a11f7aa34cb38f1b7f3df8bcd9fcd09bac9d342c2a2c9b8686c804bcd2/greenlet-3.5.2-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/38/55/792619469bab9882d8bbd5865d45a72f6478762d04a9af4bf0d08c503e95/pandas-3.0.3-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/45/d8/55e0901103c93d57bab3b932294c216f0cbd49054187ce29f8f13808d530/jaxopt-0.8.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/51/fe/53ac0cd932db5dcaf55961bc7cb7afdca8d80d8cc7406ed661f0c7dc111a/pdbp-1.8.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/54/20/6aa79ba3570bddd1bf7e951c6123f806751e58e8cce736bad77b2cf348d7/logistro-2.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5b/f2/44a7dd795a52d34d033b1cb1a6b1162eada650079e557e236fb6b88943be/pytask_parallel-0.5.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/62/89/41e80670779a223d8bc8bc83019a619988cfa5c432cedac5cec23884fbc4/types_pytz-2026.2.0.20260518-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/cc/18245721fa7747065ab478316c7fea7c74777d07f37ae60db2e84f8172e8/beartype-0.22.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/72/9f/485516087cd8c44183aaf9ab850247a28e2e4a42a4d62eab77c21f673450/flatten_dict-0.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/78/55b12e70f45bccc40d9e483925c065027b3b98ea4cbbdf6f8c2546feaf6c/sqlalchemy-2.0.51-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/82/5ab5211079a151b6f661529369c0c8e98ec64cabf5c0cf22a0a05af124d8/jax-0.10.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/c3/4f2f318b98465376bbb7a06a33da553c688b3ed39dafbb8307f824eef74a/optree-0.19.1-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/9e/b9/a6d8bb7d228940f01885bd9f327ab7f9d366a9be775c4bf366bf9d9477ae/kaleido-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/dd/b04e4a733637d370831e328a356254cfc9c875195269b234cc8ca31ff674/dags-0.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b1/29/c028a0731e202035f0e2e0bfbf1a3e46ad6c628cbb17f6f1cc9eea5d9ff1/pathlib_abc-0.5.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b5/83/205e7af4153d9690c3cb94fa9cea670c0d26ce7f022aaa589a9e136f1491/jupyter_book-2.1.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ba/6c/ff8bf52315064dbeb55cb5067e191120a5b2e58bb648d0d34cf7969dc2c2/choreographer-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c4/33/265c894268cca88ff67b144ca2b4c522fc8b9a6f1966a3640c70516e78e1/msgspec-0.21.1-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c7/18/c86eb8e0202e32dd3df50d43d7ff9854f8e0603945ff398974c1d91ac1ef/tomli_w-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/fc/8c82be70b8f96d09943360f34cfb2ecdd3035294c51bce4131eeabe56645/tabcompleter-1.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/80/7f1f1bf8c2d5dfd8e9c0e1191aa355ff8b80b5619f84d6dcc2703fa7fd5a/loky-3.5.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d7/54/c30cb1d08258612ece1dfa72c6918998bebecb916c54fca6d806bc780f2b/pytask-0.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dd/1a/5d9a402b39ec892d856bbdd9db502ff73ce28cdf4aff72eb1ce1d6843506/universal_pathlib-0.3.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/22/4222d7ddf3da30f363edaa98e329c2bce6c65497c9cb2810931c8b2c0fbc/fsspec-2026.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e9/93/2bfed22d2498c468f6bcd0d9f56b033eaa19f33320389314c19ef6766413/ml_dtypes-0.5.4-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/f3/c3/0c6798456bade745c75c452342dabacce5798196483e77e643be1f53877d/orjson-3.11.9-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/f7/5e/35c856e186b74678c24927847ad9895a51f1bc02a0c6126477a6c6040064/pyreadline3-3.5.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f9/14/abe5ce876ab5b66ee3c691bf537fcd43d037aea55d447aacf74630a8f31e/plotly-6.8.0-py3-none-any.whl +packages: +- conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda build_number: 20 - sha256: 8a1cee28bd0ee7451ada1cd50b64720e57e17ff994fc62dd8329bef570d382e4 - md5: 1626967b574d1784b578b52eaeb071e7 + sha256: 1dd3fffd892081df9726d7eb7e0dea6198962ba775bd88842135a4ddb4deb3c9 + md5: a9f577daf3de00bca7c3c76c0ecbd1de depends: + - __glibc >=2.17,<3.0.a0 - libgomp >=7.5.0 - - libwinpthread >=12.0.0.r4.gg4f2fc60ca constrains: - openmp_impl <0.0a0 - - msys2-conda-epoch <0.0a0 license: BSD-3-Clause license_family: BSD purls: [] - size: 52252 - timestamp: 1770943776666 -- conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - sha256: a3967b937b9abf0f2a99f3173fa4630293979bd1644709d89580e7c62a544661 - md5: aaa2a381ccc56eac91d63b6c1240312f - depends: - - cpython - - python-gil - license: MIT - license_family: MIT - purls: [] - size: 8191 - timestamp: 1744137672556 -- pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - name: annotated-types - version: 0.7.0 - sha256: 1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53 - requires_dist: - - typing-extensions>=4.0.0 ; python_full_version < '3.9' - requires_python: '>=3.8' -- conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.12.1-pyhcf101f3_0.conda - sha256: eb0c4e2b24f1fbefaf96ce6c992c6bd64340bc3c06add4d7415ab69222b201da - md5: 11a2b8c732d215d977998ccd69a9d5e8 - depends: - - exceptiongroup >=1.0.2 - - idna >=2.8 - - python >=3.10 - - typing_extensions >=4.5 - - python - constrains: - - trio >=0.32.0 - - uvloop >=0.21 - license: MIT - license_family: MIT - purls: - - pkg:pypi/anyio?source=compressed-mapping - size: 145175 - timestamp: 1767719033569 -- conda: https://conda.anaconda.org/conda-forge/noarch/appnope-0.1.4-pyhd8ed1ab_1.conda - sha256: 8f032b140ea4159806e4969a68b4a3c0a7cab1ad936eb958a2b5ffe5335e19bf - md5: 54898d0f524c9dee622d44bbb081a8ab - depends: - - python >=3.9 - license: BSD-2-Clause - license_family: BSD - purls: - - pkg:pypi/appnope?source=hash-mapping - size: 10076 - timestamp: 1733332433806 -- conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda - sha256: bea62005badcb98b1ae1796ec5d70ea0fc9539e7d59708ac4e7d41e2f4bb0bad - md5: 8ac12aff0860280ee0cff7fa2cf63f3b - depends: - - argon2-cffi-bindings - - python >=3.9 - - typing-extensions - constrains: - - argon2_cffi ==999 - license: MIT - license_family: MIT - purls: - - pkg:pypi/argon2-cffi?source=hash-mapping - size: 18715 - timestamp: 1749017288144 + run_exports: + strong: + - _openmp_mutex >=4.5 + size: 28948 + timestamp: 1770939786096 - conda: https://conda.anaconda.org/conda-forge/linux-64/argon2-cffi-bindings-25.1.0-py314h5bd0f2a_2.conda sha256: 39234a99df3d2e3065383808ed8bfda36760de5ef590c54c3692bb53571ef02b md5: 3cca1b74b2752917b5b65b81f61f0553 @@ -3864,174 +4776,183 @@ packages: license_family: MIT purls: - pkg:pypi/argon2-cffi-bindings?source=hash-mapping + run_exports: {} size: 35598 timestamp: 1762509505285 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/argon2-cffi-bindings-25.1.0-py314h0612a62_2.conda - sha256: aab60bbaea5cc49dff37438d1ad469d64025cda2ce58103cf68da61701ed2075 - md5: a240a79a49a95b388ef81ccda27a5e51 - depends: - - __osx >=11.0 - - cffi >=2.0.0b1 - - python >=3.14,<3.15.0a0 - - python >=3.14,<3.15.0a0 *_cp314 - - python_abi 3.14.* *_cp314 - license: MIT - license_family: MIT - purls: - - pkg:pypi/argon2-cffi-bindings?source=hash-mapping - size: 34218 - timestamp: 1762509977830 -- conda: https://conda.anaconda.org/conda-forge/win-64/argon2-cffi-bindings-25.1.0-py314h5a2d7ad_2.conda - sha256: a742e7cd0d5534bfff3fd550a0c1e430411fad60a24f88930d261056ab08096f - md5: ffa247e46f47e157851dc547f4c513e4 - depends: - - cffi >=2.0.0b1 - - python >=3.14,<3.15.0a0 - - python_abi 3.14.* *_cp314 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: MIT - license_family: MIT - purls: - - pkg:pypi/argon2-cffi-bindings?source=hash-mapping - size: 38653 - timestamp: 1762509771011 -- conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda - sha256: 792da8131b1b53ff667bd6fc617ea9087b570305ccb9913deb36b8e12b3b5141 - md5: 85c4f19f377424eafc4ed7911b291642 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.10.3-hd2277e8_3.conda + sha256: 34238103e9b75a9ed0d8b01132551c2af4f9ae68ee2f81320a685ffb27731f6c + md5: 9329dcd00c4d61aa49e516dddd784e91 depends: - - python >=3.10 - - python-dateutil >=2.7.0 - - python-tzdata - - python + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - aws-c-cal >=0.9.14,<0.9.15.0a0 + - aws-c-io >=0.26.3,<0.26.4.0a0 + - aws-c-sdkutils >=0.2.5,<0.2.6.0a0 + - aws-c-common >=0.14.0,<0.14.1.0a0 + - aws-c-http >=0.11.0,<0.11.1.0a0 license: Apache-2.0 license_family: APACHE - purls: - - pkg:pypi/arrow?source=hash-mapping - size: 113854 - timestamp: 1760831179410 -- conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda - sha256: ee4da0f3fe9d59439798ee399ef3e482791e48784873d546e706d0935f9ff010 - md5: 9673a61a297b00016442e022d689faa6 + purls: [] + run_exports: + weak: + - aws-c-auth >=0.10.3,<0.10.4.0a0 + size: 134649 + timestamp: 1781802943551 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.14-h78948cc_2.conda + sha256: 06a0e2af439b21c94adff8fac5dd66dbda5f182fc80ac635c4903959ea306cbb + md5: fe81235aae00f32df8584267b4f2daf8 depends: - - python >=3.10 - constrains: - - astroid >=2,<5 + - __glibc >=2.17,<3.0.a0 + - aws-c-common >=0.14.0,<0.14.1.0a0 + - libgcc >=14 + - openssl >=3.5.6,<4.0a0 license: Apache-2.0 license_family: Apache - purls: - - pkg:pypi/asttokens?source=hash-mapping - size: 28797 - timestamp: 1763410017955 -- conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.2.0-pyhcf101f3_0.conda - sha256: d078b0d3fdc13b0ff08485af20928a095c80dff03f7021ee18e8426a773ae948 - md5: 2cdaf7f8bda7eb9ce49c3e08f2f65803 + purls: [] + run_exports: + weak: + - aws-c-cal >=0.9.14,<0.9.15.0a0 + size: 57011 + timestamp: 1780566647051 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.14.0-hb03c661_0.conda + sha256: 6d2b33965bf6daeffd3ad336f41410053ff06ed6f2b2ce62c1ec27c0a39b4e7e + md5: f1c005b2e3b618706112ddd7f3af4521 depends: - - python >=3.10 - - typing_extensions >=4.0.0 - - python - license: MIT - license_family: MIT - purls: - - pkg:pypi/async-lru?source=hash-mapping - size: 21470 - timestamp: 1771623881915 -- conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - sha256: c13d5e42d187b1d0255f591b7ce91201d4ed8a5370f0d986707a802c20c9d32f - md5: 537296d57ea995666c68c821b00e360b + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: Apache-2.0 + license_family: Apache + purls: [] + run_exports: + weak: + - aws-c-common >=0.14.0,<0.14.1.0a0 + size: 242497 + timestamp: 1780160843944 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.2-haa0cbde_2.conda + sha256: 0e4952f9be8de7f281ca7d734a3a8f05ad0db856c6ef1e0897798c4afbcd9a54 + md5: 595911421e25551e36fde7027bf33f38 depends: - - python >=3.10 - - python - license: MIT - license_family: MIT - purls: - - pkg:pypi/attrs?source=compressed-mapping - size: 64759 - timestamp: 1764875182184 -- conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda - sha256: a14a9ad02101aab25570543a59c5193043b73dc311a25650134ed9e6cb691770 - md5: f1976ce927373500cc19d3c0b2c85177 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - aws-c-common >=0.14.0,<0.14.1.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + run_exports: + weak: + - aws-c-compression >=0.3.2,<0.3.3.0a0 + size: 22007 + timestamp: 1780566239465 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.11.0-h6488f85_2.conda + sha256: d2b844db1a4dfbc20b5129b7df4a656c1459c5fb16745101bbd802813ba8d411 + md5: da0be1e8cb4a43c876f26d9d812dea06 depends: - - python >=3.10 - - python - constrains: - - pytz >=2015.7 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/babel?source=compressed-mapping - size: 7684321 - timestamp: 1772555330347 -- conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.3.0-py314h680f03e_0.conda - noarch: generic - sha256: c31ab719d256bc6f89926131e88ecd0f0c5d003fe8481852c6424f4ec6c7eb29 - md5: a2ac7763a9ac75055b68f325d3255265 + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - aws-c-compression >=0.3.2,<0.3.3.0a0 + - aws-c-io >=0.26.3,<0.26.4.0a0 + - aws-c-cal >=0.9.14,<0.9.15.0a0 + - aws-c-common >=0.14.0,<0.14.1.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + run_exports: + weak: + - aws-c-http >=0.11.0,<0.11.1.0a0 + size: 230293 + timestamp: 1780586764553 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.26.3-h3bf836e_5.conda + sha256: c798005b65bc74d02aba1db01d4d344c4e72662f0beef35fbdd35b4695c197de + md5: 12697e83c2a0e5b93fd03855a70eb360 depends: - - python >=3.14 - license: BSD-3-Clause AND MIT AND EPL-2.0 + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - aws-c-cal >=0.9.14,<0.9.15.0a0 + - s2n >=1.7.4,<1.7.5.0a0 + - aws-c-common >=0.14.0,<0.14.1.0a0 + license: Apache-2.0 + license_family: APACHE purls: [] - size: 7514 - timestamp: 1767044983590 -- conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.14.3-pyha770c72_0.conda - sha256: bf1e71c3c0a5b024e44ff928225a0874fc3c3356ec1a0b6fe719108e6d1288f6 - md5: 5267bef8efea4127aacd1f4e1f149b6e + run_exports: + weak: + - aws-c-io >=0.26.3,<0.26.4.0a0 + size: 181839 + timestamp: 1781649803811 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.12.6-hb916526_0.conda + sha256: bda2c735382e2232997fb34c5d71d476ab2f4e5ba5bc9e059106f280f2334a88 + md5: f2b6275244daa12109bcd0a126f1fb85 depends: - - python >=3.10 - - soupsieve >=1.2 - - typing-extensions - license: MIT - license_family: MIT - purls: - - pkg:pypi/beautifulsoup4?source=hash-mapping - size: 90399 - timestamp: 1764520638652 -- conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45.1-default_hfdba357_101.conda - sha256: 74341b26a2b9475dc14ba3cf12432fcd10a23af285101883e720216d81d44676 - md5: 83aa53cb3f5fc849851a84d777a60551 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - aws-c-common >=0.14.0,<0.14.1.0a0 + - aws-checksums >=0.2.10,<0.2.11.0a0 + - openssl >=3.5.7,<4.0a0 + - aws-c-cal >=0.9.14,<0.9.15.0a0 + - aws-c-auth >=0.10.3,<0.10.4.0a0 + - aws-c-io >=0.26.3,<0.26.4.0a0 + - aws-c-http >=0.11.0,<0.11.1.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + run_exports: + weak: + - aws-c-s3 >=0.12.6,<0.12.7.0a0 + size: 154088 + timestamp: 1781252014556 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.5-haa0cbde_0.conda + sha256: c351a2bb8734accc6a047b55be15a8ce205725aeeedd2576c320841c3c383731 + md5: 5088795f3dfcf00a26f03c2a17ae8429 + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - aws-c-common >=0.14.0,<0.14.1.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + run_exports: + weak: + - aws-c-sdkutils >=0.2.5,<0.2.6.0a0 + size: 65759 + timestamp: 1781063620400 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.10-haa0cbde_2.conda + sha256: ad49333d96a5f9bcce02752a6515cbb077d7513e358a8fb1a832f4e772d54bac + md5: 5c05a63452bf73c50aa272a6f961c4fc depends: - - ld_impl_linux-64 2.45.1 default_hbd61a6d_101 + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - aws-c-common >=0.14.0,<0.14.1.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + run_exports: + weak: + - aws-checksums >=0.2.10,<0.2.11.0a0 + size: 101627 + timestamp: 1780568539000 +- conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45.1-default_hfdba357_102.conda + sha256: 0a7d405064f53b9d91d92515f1460f7906ee5e8523f3cd8973430e81219f4917 + md5: 8165352fdce2d2025bf884dc0ee85700 + depends: + - ld_impl_linux-64 2.45.1 default_hbd61a6d_102 - sysroot_linux-64 - zstd >=1.5.7,<1.6.0a0 license: GPL-3.0-only license_family: GPL purls: [] - size: 3744895 - timestamp: 1770267152681 -- conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_linux-64-2.45.1-default_h4852527_101.conda - sha256: 4826f97d33cbe54459970a1e84500dbe0cccf8326aaf370e707372ae20ec5a47 - md5: dec96579f9a7035a59492bf6ee613b53 + run_exports: {} + size: 3661455 + timestamp: 1774197460085 +- conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_linux-64-2.45.1-default_h4852527_102.conda + sha256: 78a58d523d072b7f8e591b8f8572822e044b31764ed7e8d170392e7bc6d58339 + md5: 2a307a17309d358c9b42afdd3199ddcc depends: - - binutils_impl_linux-64 2.45.1 default_hfdba357_101 + - binutils_impl_linux-64 2.45.1 default_hfdba357_102 license: GPL-3.0-only license_family: GPL purls: [] - size: 36060 - timestamp: 1770267177798 -- conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.3.0-pyhcf101f3_1.conda - sha256: f8ff1f98423674278964a46c93a1766f9e91960d44efd91c6c3ed56a33813f46 - md5: 7c5ebdc286220e8021bf55e6384acd67 - depends: - - python >=3.10 - - webencodings - - python - constrains: - - tinycss2 >=1.1.0,<1.5 - license: Apache-2.0 AND MIT - purls: - - pkg:pypi/bleach?source=compressed-mapping - size: 142008 - timestamp: 1770719370680 -- conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.3.0-hbca2aae_1.conda - sha256: 7c07a865e5e4cca233cc4e0eb3f0f5ff6c90776461687b4fb0b1764133e1fd61 - md5: f11a319b9700b203aa14c295858782b6 - depends: - - bleach ==6.3.0 pyhcf101f3_1 - - tinycss2 - license: Apache-2.0 AND MIT - purls: [] - size: 4409 - timestamp: 1770719370682 + run_exports: {} + size: 36304 + timestamp: 1774197485247 - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.2.0-hed03a55_1.conda sha256: e511644d691f05eb12ebe1e971fd6dc3ae55a4df5c253b4e1788b789bdf2dfa6 md5: 8ccf913aaba749a5496c17629d859ed1 @@ -4044,36 +4965,13 @@ packages: license: MIT license_family: MIT purls: [] + run_exports: + weak: + - libbrotlicommon >=1.2.0,<1.3.0a0 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 size: 20103 timestamp: 1764017231353 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-1.2.0-h7d5ae5b_1.conda - sha256: 422ac5c91f8ef07017c594d9135b7ae068157393d2a119b1908c7e350938579d - md5: 48ece20aa479be6ac9a284772827d00c - depends: - - __osx >=11.0 - - brotli-bin 1.2.0 hc919400_1 - - libbrotlidec 1.2.0 hc919400_1 - - libbrotlienc 1.2.0 hc919400_1 - license: MIT - license_family: MIT - purls: [] - size: 20237 - timestamp: 1764018058424 -- conda: https://conda.anaconda.org/conda-forge/win-64/brotli-1.2.0-h2d644bc_1.conda - sha256: a4fffdf1c9b9d3d0d787e20c724cff3a284dfa3773f9ce609c93b1cfd0ce8933 - md5: bc58fdbced45bb096364de0fba1637af - depends: - - brotli-bin 1.2.0 hfd05255_1 - - libbrotlidec 1.2.0 hfd05255_1 - - libbrotlienc 1.2.0 hfd05255_1 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: MIT - license_family: MIT - purls: [] - size: 20342 - timestamp: 1764017988883 - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.2.0-hb03c661_1.conda sha256: 64b137f30b83b1dd61db6c946ae7511657eead59fdf74e84ef0ded219605aa94 md5: af39b9a8711d4a8d437b52c1d78eb6a1 @@ -4085,34 +4983,9 @@ packages: license: MIT license_family: MIT purls: [] + run_exports: {} size: 21021 timestamp: 1764017221344 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-bin-1.2.0-hc919400_1.conda - sha256: e2d142052a83ff2e8eab3fe68b9079cad80d109696dc063a3f92275802341640 - md5: 377d015c103ad7f3371be1777f8b584c - depends: - - __osx >=11.0 - - libbrotlidec 1.2.0 hc919400_1 - - libbrotlienc 1.2.0 hc919400_1 - license: MIT - license_family: MIT - purls: [] - size: 18628 - timestamp: 1764018033635 -- conda: https://conda.anaconda.org/conda-forge/win-64/brotli-bin-1.2.0-hfd05255_1.conda - sha256: e76966232ef9612de33c2087e3c92c2dc42ea5f300050735a3c646f33bce0429 - md5: 6abd7089eb3f0c790235fe469558d190 - depends: - - libbrotlidec 1.2.0 hfd05255_1 - - libbrotlienc 1.2.0 hfd05255_1 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: MIT - license_family: MIT - purls: [] - size: 22714 - timestamp: 1764017952449 - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py314h3de4e8d_1.conda sha256: 3ad3500bff54a781c29f16ce1b288b36606e2189d0b0ef2f67036554f47f12b0 md5: 8910d2c46f7e7b519129f486e0fe927a @@ -4128,42 +5001,9 @@ packages: license_family: MIT purls: - pkg:pypi/brotli?source=hash-mapping + run_exports: {} size: 367376 timestamp: 1764017265553 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.2.0-py314h3daef5d_1.conda - sha256: 5c2e471fd262fcc3c5a9d5ea4dae5917b885e0e9b02763dbd0f0d9635ed4cb99 - md5: f9501812fe7c66b6548c7fcaa1c1f252 - depends: - - __osx >=11.0 - - libcxx >=19 - - python >=3.14,<3.15.0a0 - - python >=3.14,<3.15.0a0 *_cp314 - - python_abi 3.14.* *_cp314 - constrains: - - libbrotlicommon 1.2.0 hc919400_1 - license: MIT - license_family: MIT - purls: - - pkg:pypi/brotli?source=hash-mapping - size: 359854 - timestamp: 1764018178608 -- conda: https://conda.anaconda.org/conda-forge/win-64/brotli-python-1.2.0-py314he701e3d_1.conda - sha256: 6854ee7675135c57c73a04849c29cbebc2fb6a3a3bfee1f308e64bf23074719b - md5: 1302b74b93c44791403cbeee6a0f62a3 - depends: - - python >=3.14,<3.15.0a0 - - python_abi 3.14.* *_cp314 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - constrains: - - libbrotlicommon 1.2.0 hfd05255_1 - license: MIT - license_family: MIT - purls: - - pkg:pypi/brotli?source=hash-mapping - size: 335782 - timestamp: 1764018443683 - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda sha256: 0b75d45f0bba3e95dc693336fa51f40ea28c980131fec438afb7ce6118ed05f6 md5: d2ffd7602c02f2b316fd921d39876885 @@ -4173,30 +5013,11 @@ packages: license: bzip2-1.0.6 license_family: BSD purls: [] + run_exports: + weak: + - bzip2 >=1.0.8,<2.0a0 size: 260182 timestamp: 1771350215188 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda - sha256: 540fe54be35fac0c17feefbdc3e29725cce05d7367ffedfaaa1bdda234b019df - md5: 620b85a3f45526a8bc4d23fd78fc22f0 - depends: - - __osx >=11.0 - license: bzip2-1.0.6 - license_family: BSD - purls: [] - size: 124834 - timestamp: 1771350416561 -- conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda - sha256: 76dfb71df5e8d1c4eded2dbb5ba15bb8fb2e2b0fe42d94145d5eed4c75c35902 - md5: 4cb8e6b48f67de0b018719cdf1136306 - depends: - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: bzip2-1.0.6 - license_family: BSD - purls: [] - size: 56115 - timestamp: 1771350256444 - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda sha256: cc9accf72fa028d31c2a038460787751127317dcfa991f8d1f1babf216bb454e md5: 920bb03579f15389b9e512095ad995b7 @@ -4206,58 +5027,41 @@ packages: license: MIT license_family: MIT purls: [] + run_exports: + weak: + - c-ares >=1.34.6,<2.0a0 size: 207882 timestamp: 1765214722852 -- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-h4c7d964_0.conda - sha256: 37950019c59b99585cee5d30dbc2cc9696ed4e11f5742606a4db1621ed8f94d6 - md5: f001e6e220355b7f87403a4d0e5bf1ca - depends: - - __win - license: ISC - purls: [] - size: 147734 - timestamp: 1772006322223 -- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - sha256: 67cc7101b36421c5913a1687ef1b99f85b5d6868da3abbf6ec1a4181e79782fc - md5: 4492fd26db29495f0ba23f146cd5638d - depends: - - __unix - license: ISC - purls: [] - size: 147413 - timestamp: 1772006283803 -- conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 - noarch: python - sha256: 561e6660f26c35d137ee150187d89767c988413c978e1b712d53f27ddf70ea17 - md5: 9b347a7ec10940d3f7941ff6c460b551 - depends: - - cached_property >=1.5.2,<1.5.3.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 4134 - timestamp: 1615209571450 -- conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 - sha256: 6dbf7a5070cc43d90a1e4c2ec0c541c69d8e30a0e25f50ce9f6e4a432e42c5d7 - md5: 576d629e47797577ab0f1b351297ef4a - depends: - - python >=3.6 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/cached-property?source=hash-mapping - size: 11065 - timestamp: 1615209567874 -- conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda - sha256: a6b118fd1ed6099dc4fc03f9c492b88882a780fadaef4ed4f93dc70757713656 - md5: 765c4d97e877cdbbb88ff33152b86125 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-he90730b_1.conda + sha256: 06525fa0c4e4f56e771a3b986d0fdf0f0fc5a3270830ee47e127a5105bde1b9a + md5: bb6c4808bfa69d6f7f6b07e5846ced37 depends: - - python >=3.10 - license: ISC - purls: - - pkg:pypi/certifi?source=compressed-mapping - size: 151445 - timestamp: 1772001170301 + - __glibc >=2.17,<3.0.a0 + - fontconfig >=2.15.0,<3.0a0 + - fonts-conda-ecosystem + - icu >=78.1,<79.0a0 + - libexpat >=2.7.3,<3.0a0 + - libfreetype >=2.14.1 + - libfreetype6 >=2.14.1 + - libgcc >=14 + - libglib >=2.86.3,<3.0a0 + - libpng >=1.6.53,<1.7.0a0 + - libstdcxx >=14 + - libxcb >=1.17.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pixman >=0.46.4,<1.0a0 + - xorg-libice >=1.1.2,<2.0a0 + - xorg-libsm >=1.2.6,<2.0a0 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxrender >=0.9.12,<0.10.0a0 + license: LGPL-2.1-only or MPL-1.1 + purls: [] + run_exports: + weak: + - cairo >=1.18.4,<2.0a0 + size: 989514 + timestamp: 1766415934926 - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py314h4a8dc5f_1.conda sha256: c6339858a0aaf5d939e00d345c98b99e4558f285942b27232ac098ad17ac7f8e md5: cf45f4278afd6f4e6d03eda0f435d527 @@ -4272,153 +5076,29 @@ packages: license_family: MIT purls: - pkg:pypi/cffi?source=hash-mapping + run_exports: {} size: 300271 timestamp: 1761203085220 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-2.0.0-py314h44086f9_1.conda - sha256: 5b5ee5de01eb4e4fd2576add5ec9edfc654fbaf9293e7b7ad2f893a67780aa98 - md5: 10dd19e4c797b8f8bdb1ec1fbb6821d7 +- conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py314h97ea11e_4.conda + sha256: b0314a7f1fb4a294b1a8bcf5481d4a8d9412a9fee23b7e3f93fb10e4d504f2cc + md5: 95bede9cdb7a30a4b611223d52a01aa4 depends: - - __osx >=11.0 - - libffi >=3.5.2,<3.6.0a0 - - pycparser - - python >=3.14,<3.15.0a0 - - python >=3.14,<3.15.0a0 *_cp314 + - numpy >=1.25 + - python + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 - python_abi 3.14.* *_cp314 - license: MIT - license_family: MIT - purls: - - pkg:pypi/cffi?source=hash-mapping - size: 292983 - timestamp: 1761203354051 -- conda: https://conda.anaconda.org/conda-forge/win-64/cffi-2.0.0-py314h5a2d7ad_1.conda - sha256: 924f2f01fa7a62401145ef35ab6fc95f323b7418b2644a87fea0ea68048880ed - md5: c360170be1c9183654a240aadbedad94 - depends: - - pycparser - - python >=3.14,<3.15.0a0 - - python_abi 3.14.* *_cp314 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: MIT - license_family: MIT - purls: - - pkg:pypi/cffi?source=hash-mapping - size: 294731 - timestamp: 1761203441365 -- conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.6-pyhd8ed1ab_0.conda - sha256: d86dfd428b2e3c364fa90e07437c8405d635aa4ef54b25ab51d9c712be4112a5 - md5: 49ee13eb9b8f44d63879c69b8a40a74b - depends: - - python >=3.10 - license: MIT - license_family: MIT - purls: - - pkg:pypi/charset-normalizer?source=compressed-mapping - size: 58510 - timestamp: 1773660086450 -- pypi: https://files.pythonhosted.org/packages/b7/9f/d73dfb85d7a5b1a56a99adc50f2074029468168c970ff5daeade4ad819e4/choreographer-1.2.1-py3-none-any.whl - name: choreographer - version: 1.2.1 - sha256: 9af5385effa3c204dbc337abf7ac74fd8908ced326a15645dc31dde75718c77e - requires_dist: - - logistro>=2.0.1 - - simplejson>=3.19.3 - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl - name: click - version: 8.3.1 - sha256: 981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6 - requires_dist: - - colorama ; sys_platform == 'win32' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/2c/1a/aff8bb287a4b1400f69e09a53bd65de96aa5cee5691925b38731c67fc695/click_default_group-1.2.4-py2.py3-none-any.whl - name: click-default-group - version: 1.2.4 - sha256: 9b60486923720e7fc61731bdb32b617039aba820e22e1c88766b1125592eaa5f - requires_dist: - - click - - pytest ; extra == 'test' - requires_python: '>=2.7' -- pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - name: cloudpickle - version: 3.1.2 - sha256: 9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a - requires_python: '>=3.8' -- conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - sha256: ab29d57dc70786c1269633ba3dff20288b81664d3ff8d21af995742e2bb03287 - md5: 962b9857ee8e7018c22f2776ffa0b2d7 - depends: - - python >=3.9 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/colorama?source=hash-mapping - size: 27011 - timestamp: 1733218222191 -- conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda - sha256: 576a44729314ad9e4e5ebe055fbf48beb8116b60e58f9070278985b2b634f212 - md5: 2da13f2b299d8e1995bafbbe9689a2f7 - depends: - - python >=3.9 - - python - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/comm?source=hash-mapping - size: 14690 - timestamp: 1753453984907 -- conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py314h97ea11e_4.conda - sha256: b0314a7f1fb4a294b1a8bcf5481d4a8d9412a9fee23b7e3f93fb10e4d504f2cc - md5: 95bede9cdb7a30a4b611223d52a01aa4 - depends: - - numpy >=1.25 - - python - - libstdcxx >=14 - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - python_abi 3.14.* *_cp314 - license: BSD-3-Clause - license_family: BSD + license: BSD-3-Clause + license_family: BSD purls: - pkg:pypi/contourpy?source=hash-mapping + run_exports: {} size: 324013 timestamp: 1769155968691 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/contourpy-1.3.3-py314hf8a3a22_4.conda - sha256: 754ab72f1c1ae99ef7c57995f59224dc9632cbd6731fe7e6277437fd01d43156 - md5: cddc851000ce131d757678c2f329eaad - depends: - - numpy >=1.25 - - python - - python 3.14.* *_cp314 - - __osx >=11.0 - - libcxx >=19 - - python_abi 3.14.* *_cp314 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/contourpy?source=hash-mapping - size: 290405 - timestamp: 1769156069514 -- conda: https://conda.anaconda.org/conda-forge/win-64/contourpy-1.3.3-py314hf309875_4.conda - sha256: f141bcbf8e490b49b2f53f517173d13a64d75e43cfae170e0d931cb0b66f4bce - md5: c26934035616f7d578f9da0491aed3d8 - depends: - - numpy >=1.25 - - python - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - - ucrt >=10.0.20348.0 - - python_abi 3.14.* *_cp314 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/contourpy?source=hash-mapping - size: 247437 - timestamp: 1769155978556 -- conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.13.5-py314h67df5f8_0.conda - sha256: cf5f98a291c3a5489cb299bae38711d5dc21b88a00df981f3b1528781e18c909 - md5: 78f547b78ace7541c4f54c4268ac9d2e +- conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.14.3-py314h67df5f8_0.conda + sha256: 68f6814d548e6b1d8b655371cb34b909f5862d5d80b4b6ccf7231a84ceeb88da + md5: e3aecdc8eab8a93c5aad5f113fa91509 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 @@ -4426,71 +5106,11 @@ packages: - python_abi 3.14.* *_cp314 - tomli license: Apache-2.0 - license_family: APACHE - purls: - - pkg:pypi/coverage?source=compressed-mapping - size: 411308 - timestamp: 1773761119353 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/coverage-7.13.5-py314h6e9b3f0_0.conda - sha256: 808ebcb57027251f379f84e53a3755d2851918f78bdd512d131afe40ca64a041 - md5: cdbafe4a3e605024e7372c9580f9d734 - depends: - - __osx >=11.0 - - python >=3.14,<3.15.0a0 - - python >=3.14,<3.15.0a0 *_cp314 - - python_abi 3.14.* *_cp314 - - tomli - license: Apache-2.0 - license_family: APACHE - purls: - - pkg:pypi/coverage?source=compressed-mapping - size: 412458 - timestamp: 1773761280047 -- conda: https://conda.anaconda.org/conda-forge/win-64/coverage-7.13.5-py314h2359020_0.conda - sha256: 80a6a7be7eef784b8314a4cb563563c654e2180a0b2b31b232f79b2e7334aaf2 - md5: 849f0bd5b83d4fd59b41202b21bb3ca2 - depends: - - python >=3.14,<3.15.0a0 - - python_abi 3.14.* *_cp314 - - tomli - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: Apache-2.0 - license_family: APACHE purls: - - pkg:pypi/coverage?source=compressed-mapping - size: 438927 - timestamp: 1773760993379 -- conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.3-py314hd8ed1ab_101.conda - noarch: generic - sha256: 91b06300879df746214f7363d6c27c2489c80732e46a369eb2afc234bcafb44c - md5: 3bb89e4f795e5414addaa531d6b1500a - depends: - - python >=3.14,<3.15.0a0 - - python_abi * *_cp314 - license: Python-2.0 - purls: [] - size: 50078 - timestamp: 1770674447292 -- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-64-12.9.27-ha770c72_0.conda - sha256: 2ee3b9564ca326226e5cda41d11b251482df8e7c757e333d28ec75213c75d126 - md5: 87ff6381e33b76e5b9b179a2cdd005ec - depends: - - cuda-version >=12.9,<12.10.0a0 - license: LicenseRef-NVIDIA-End-User-License-Agreement - purls: [] - size: 1150650 - timestamp: 1746189825236 -- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-crt-dev_linux-64-12.9.86-ha770c72_2.conda - sha256: e6257534c4b4b6b8a1192f84191c34906ab9968c92680fa09f639e7846a87304 - md5: 79d280de61e18010df5997daea4743df - depends: - - cuda-version >=12.9,<12.10.0a0 - license: LicenseRef-NVIDIA-End-User-License-Agreement - purls: [] - size: 94239 - timestamp: 1753975242354 + - pkg:pypi/coverage?source=hash-mapping + run_exports: {} + size: 419228 + timestamp: 1782178151393 - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-crt-tools-12.9.86-ha770c72_2.conda sha256: 2da9964591af14ba11b2379bed01d56e7185260ee0998d1a939add7fb752db45 md5: 503a94e20d2690d534d676a764a1852c @@ -4498,8 +5118,19 @@ packages: - cuda-version >=12.9,<12.10.0a0 license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] + run_exports: {} size: 29138 timestamp: 1753975252445 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-crt-tools-13.3.33-ha770c72_0.conda + sha256: 6703eab8637f41e6cb7fea7a4cfc7c8c59d3dc1d37e32ae01f34d05c33fca48e + md5: 1793e19df122252161d929c5f7bcd42b + depends: + - cuda-version >=13.3,<13.4.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + run_exports: {} + size: 30512 + timestamp: 1779905082733 - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-12.9.79-h5888daf_0.conda sha256: 57d1294ecfaf9dc8cdb5fc4be3e63ebc7614538bddb5de53cfd9b1b7de43aed5 md5: cb15315d19b58bd9cd424084e58ad081 @@ -4511,8 +5142,23 @@ packages: - libstdcxx >=13 license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] + run_exports: {} size: 23242 timestamp: 1749218416505 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-13.3.29-hecca717_0.conda + sha256: 3d74819f261d77a410e8f8ddbd973446c312ec76605d60619d9b85113eca9632 + md5: 3fc21c99786b908fd7f32ea279fc9780 + depends: + - __glibc >=2.17,<3.0.a0 + - cuda-cudart_linux-64 13.3.29 h376f20c_0 + - cuda-version >=13.3,<13.4.0a0 + - libgcc >=14 + - libstdcxx >=14 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + run_exports: {} + size: 24659 + timestamp: 1779898425780 - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-dev-12.9.79-h5888daf_0.conda sha256: 04d8235cb3cb3510c0492c3515a9d1a6053b50ef39be42b60cafb05044b5f4c6 md5: ba38a7c3b4c14625de45784b773f0c71 @@ -4526,20 +5172,29 @@ packages: - libstdcxx >=13 license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] + run_exports: + weak: + - cuda-cudart >=12.9.79,<13.0a0 size: 23687 timestamp: 1749218464010 -- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-dev_linux-64-12.9.79-h3f2d84a_0.conda - sha256: ffe86ed0144315b276f18020d836c8ef05bf971054cf7c3eb167af92494080d5 - md5: 86e40eb67d83f1a58bdafdd44e5a77c6 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-dev-13.3.29-hecca717_0.conda + sha256: 050ac942737f501b5dee21c0bbfa77f4617c52269f188ab66a5e2b8b7acd0f22 + md5: e21171cc900f202b2af82f1afddbdfcf depends: - - cuda-cccl_linux-64 - - cuda-cudart-static_linux-64 - - cuda-cudart_linux-64 - - cuda-version >=12.9,<12.10.0a0 + - __glibc >=2.17,<3.0.a0 + - cuda-cudart 13.3.29 hecca717_0 + - cuda-cudart-dev_linux-64 13.3.29 h376f20c_0 + - cuda-cudart-static 13.3.29 hecca717_0 + - cuda-version >=13.3,<13.4.0a0 + - libgcc >=14 + - libstdcxx >=14 license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 389140 - timestamp: 1749218427266 + run_exports: + weak: + - cuda-cudart >=13.3.29,<14.0a0 + size: 25129 + timestamp: 1779898446163 - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-static-12.9.79-h5888daf_0.conda sha256: 6261e1d9af80e1ec308e3e5e2ff825d189ef922d24093beaf6efca12e67ce060 md5: d3c4ac48f4967f09dd910d9c15d40c81 @@ -4551,35 +5206,23 @@ packages: - libstdcxx >=13 license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] + run_exports: {} size: 23283 timestamp: 1749218442382 -- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-static_linux-64-12.9.79-h3f2d84a_0.conda - sha256: d435f8a19b59b52ce460ee3a6bfd877288a0d1d645119a6ba60f1c3627dc5032 - md5: b87bf315d81218dd63eb46cc1eaef775 - depends: - - cuda-version >=12.9,<12.10.0a0 - license: LicenseRef-NVIDIA-End-User-License-Agreement - purls: [] - size: 1148889 - timestamp: 1749218381225 -- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart_linux-64-12.9.79-h3f2d84a_0.conda - sha256: 6cde0ace2b995b49d0db2eefb7bc30bf00ffc06bb98ef7113632dec8f8907475 - md5: 64508631775fbbf9eca83c84b1df0cae - depends: - - cuda-version >=12.9,<12.10.0a0 - license: LicenseRef-NVIDIA-End-User-License-Agreement - purls: [] - size: 197249 - timestamp: 1749218394213 -- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-driver-dev_linux-64-12.9.79-h3f2d84a_0.conda - sha256: a15574d966e73135a79d5e6570c87e13accdb44bd432449b5deea71644ad442c - md5: d411828daa36ac84eab210ba3bbe5a64 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-static-13.3.29-hecca717_0.conda + sha256: e2596138baef66e9b7fa08329e944d3ef8cca7c3d2da28d32bc37ff7e4801d1a + md5: 3a99ba2e09c508fd8b8b0eaf6d37a376 depends: - - cuda-version >=12.9,<12.10.0a0 + - __glibc >=2.17,<3.0.a0 + - cuda-cudart-static_linux-64 13.3.29 h376f20c_0 + - cuda-version >=13.3,<13.4.0a0 + - libgcc >=14 + - libstdcxx >=14 license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 37714 - timestamp: 1749218405324 + run_exports: {} + size: 24626 + timestamp: 1779898435744 - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc-12.9.86-hcdd1206_6.conda sha256: f7c5de6b1f0f463f73c78cc73439027cdd5cb94fb4ce099116969812973cabcb md5: 02289b10ac97bac35ad1add086c5072a @@ -4589,23 +5232,21 @@ packages: - gxx_linux-64 license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] + run_exports: {} size: 25472 timestamp: 1771619493470 -- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvcc-dev_linux-64-12.9.86-he91c749_2.conda - sha256: a1672a34439a72869de9e011e935d41b62fc8dfb1a2700e85ed8a7a129b79981 - md5: 19d4e090217f0ea89d30bedb7461c048 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc-13.3.33-hcdd1206_0.conda + sha256: f01c992e93dcb514560f031e8dc2830224c2b72fbca493ae4657ad03eff699d4 + md5: ac88fe52b51b8af89a58dcb510fa5455 depends: - - cuda-crt-dev_linux-64 12.9.86 ha770c72_2 - - cuda-nvvm-dev_linux-64 12.9.86 ha770c72_2 - - cuda-version >=12.9,<12.10.0a0 - - libgcc >=6 - - libnvptxcompiler-dev_linux-64 12.9.86 ha770c72_2 - constrains: - - gcc_impl_linux-64 >=6,<15.0a0 + - cuda-nvcc_linux-64 13.3.33.* + - gcc_linux-64 + - gxx_linux-64 license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 28121 - timestamp: 1753975535813 + run_exports: {} + size: 25676 + timestamp: 1779909800772 - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc-impl-12.9.86-h85509e4_2.conda sha256: 961cf20d411b7685cd744e6c6ed35efea547d095c62151d6f3053d9931bb994d md5: 67458d2685e7503933efa550f3ee40f3 @@ -4621,8 +5262,27 @@ packages: - gcc_impl_linux-64 >=6,<15.0a0 license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] + run_exports: {} size: 27215 timestamp: 1753975546846 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc-impl-13.3.33-h85509e4_0.conda + sha256: 3227d8a8c6ab8c9d19fbf5aeddcf061e6fa6666eebd98be1f0e7709fec2b7451 + md5: b6a32227bc6be2a46b9e49671172fe34 + depends: + - cuda-cudart >=13.3.29,<14.0a0 + - cuda-cudart-dev + - cuda-nvcc-dev_linux-64 13.3.33 he91c749_0 + - cuda-nvcc-tools 13.3.33 he02047a_0 + - cuda-nvvm-impl 13.3.33 h4bc722e_0 + - cuda-version >=13.3,<13.4.0a0 + - libnvptxcompiler-dev 13.3.33 ha770c72_0 + constrains: + - gcc_impl_linux-64 >=6,<16.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + run_exports: {} + size: 28672 + timestamp: 1779905232747 - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc-tools-12.9.86-he02047a_2.conda sha256: 0e849be7b5e4832ca218ec2c48a9ba3a15a984f629e2e54f38a53f4f57220341 md5: dc256c9864c2e8e9c817fbca1c84a4bc @@ -4637,8 +5297,26 @@ packages: - gcc_impl_linux-64 >=6,<15.0a0 license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] + run_exports: {} size: 27380012 timestamp: 1753975454194 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc-tools-13.3.33-he02047a_0.conda + sha256: 03eb789235ec13b06ba826af3e0fdda82a88de865e784d4a3bc75fc57a51cc98 + md5: 886a75eb0a30410f5b36ec319c8d90d5 + depends: + - __glibc >=2.17,<3.0.a0 + - cuda-crt-tools 13.3.33 ha770c72_0 + - cuda-nvvm-tools 13.3.33 h4bc722e_0 + - cuda-version >=13.3,<13.4.0a0 + - libgcc >=12 + - libstdcxx >=12 + constrains: + - gcc_impl_linux-64 >=6,<16.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + run_exports: {} + size: 34635831 + timestamp: 1779905180976 - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc_linux-64-12.9.86-he0b4e1d_6.conda sha256: c506221dafb7cfd081f7d12d01d8e8ab9b29adfcc7d69d61fedd3232174e4016 md5: 359d05bc3ec5d3a467eb558e3844aea2 @@ -4652,17 +5330,29 @@ packages: - sysroot_linux-64 >=2.17,<3.0a0 license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] + run_exports: + strong: + - cuda-version >=12.9,<13 size: 27575 timestamp: 1771619492974 -- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-64-12.9.86-ha770c72_2.conda - sha256: 522722dcaffd133e0c7500c69dc70e21ac34d6762dcbaabfe847439f944028f0 - md5: 7b386291414c7eea113d25ac28a33772 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc_linux-64-13.3.33-hb2fc203_0.conda + sha256: a111e087e7830b0833608882a033643a03523bcb0af62d531a6b6d43731ce0ee + md5: 6ffa88ddae93f17f7cf4183156c7c212 depends: - - cuda-version >=12.9,<12.10.0a0 + - __glibc >=2.17,<3.0.a0 + - cuda-cudart-dev_linux-64 13.3.* + - cuda-driver-dev_linux-64 13.3.* + - cuda-nvcc-dev_linux-64 13.3.33.* + - cuda-nvcc-impl 13.3.33.* + - cuda-nvcc-tools 13.3.33.* + - sysroot_linux-64 >=2.17,<3.0a0 license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 27096 - timestamp: 1753975261562 + run_exports: + strong: + - cuda-version >=13.3,<14 + size: 27813 + timestamp: 1779909800193 - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-impl-12.9.86-h4bc722e_2.conda sha256: f4d34556174e4faa9d374ba2244707082870e1bbc1bb441ad3d9d2cea37da6af md5: 82125dd3c0c4aa009faa00e2829b93d8 @@ -4672,8 +5362,21 @@ packages: - libgcc >=12 license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] + run_exports: {} size: 21425520 timestamp: 1753975283188 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-impl-13.3.33-h4bc722e_0.conda + sha256: 1ea87e853ba917c14b222da1bff5179a3aa490ca5fd64e9ff1b865d2ca62e569 + md5: 3cdad839773c71e550927c626f8ba5fa + depends: + - __glibc >=2.17,<3.0.a0 + - cuda-version >=13.3,<13.4.0a0 + - libgcc >=12 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + run_exports: {} + size: 22428462 + timestamp: 1779905092854 - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-tools-12.9.86-h4bc722e_2.conda sha256: 45f5e881ed0d973132a5475a0b5c066db6e748ef3a831a14dba8374b252e0067 md5: f9af26e4079adcd72688a8e8dbecb229 @@ -4683,41 +5386,24 @@ packages: - libgcc >=12 license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] + run_exports: {} size: 24246736 timestamp: 1753975332907 -- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-12.9-h4f385c5_3.conda - sha256: 5f5f428031933f117ff9f7fcc650e6ea1b3fef5936cf84aa24af79167513b656 - md5: b6d5d7f1c171cbd228ea06b556cfa859 - constrains: - - cudatoolkit 12.9|12.9.* - - __cuda >=12 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-tools-13.3.33-h4bc722e_0.conda + sha256: 3fc9d3ba08b4a3b5fd0065f048e8c6007a8ca1c8df07b3538f4b61435ecbc2ac + md5: 99365fca01f05b4255c79180e6e86a43 + depends: + - __glibc >=2.17,<3.0.a0 + - cuda-version >=13.3,<13.4.0a0 + - libgcc >=12 license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 21578 - timestamp: 1746134436166 -- conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda - sha256: bb47aec5338695ff8efbddbc669064a3b10fe34ad881fb8ad5d64fbfa6910ed1 - md5: 4c2a8fef270f6c69591889b93f9f55c1 - depends: - - python >=3.10 - - python - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/cycler?source=hash-mapping - size: 14778 - timestamp: 1764466758386 -- pypi: https://files.pythonhosted.org/packages/2c/c1/a662f0a8f6e024fca239d493f278d9adf5de1c8408af46a53a76beb13534/dags-0.5.1-py3-none-any.whl - name: dags - version: 0.5.1 - sha256: e9fd9fbe0536784fe8b8ce58ea194801b1de39d7364941d4a1f2d8240c14123d - requires_dist: - - flatten-dict - - networkx>=3.6 - requires_python: '>=3.11' -- conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.20-py314h42812f9_0.conda - sha256: d9e89e351d7189c41615cfceca76b3bcacaa9c81d9945ac1caa6fb9e5184f610 - md5: 57e6fad901c05754d5256fe3ab9f277b + run_exports: {} + size: 29720382 + timestamp: 1779905121216 +- conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.21-py314h42812f9_0.conda + sha256: c16696b23e1d75b6eea7d0c8b9c31c03d1987eeb61852f09b6d4042ca015acd3 + md5: a7eb8029c4fe320c0179085707017c2d depends: - python - libgcc >=14 @@ -4728,60 +5414,9 @@ packages: license_family: MIT purls: - pkg:pypi/debugpy?source=hash-mapping - size: 2886804 - timestamp: 1769744977998 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/debugpy-1.8.20-py314he609de1_0.conda - sha256: 7736a82ebe75c0f3ea6991298363d1f2edb34291f8616c1d3719862881c3a167 - md5: 407c74dc27356ba6bf3a0191070e3ac0 - depends: - - python - - python 3.14.* *_cp314 - - __osx >=11.0 - - libcxx >=19 - - python_abi 3.14.* *_cp314 - license: MIT - license_family: MIT - purls: - - pkg:pypi/debugpy?source=hash-mapping - size: 2778080 - timestamp: 1769745040206 -- conda: https://conda.anaconda.org/conda-forge/win-64/debugpy-1.8.20-py314hb98de8c_0.conda - sha256: ece1d8299ad081edaf1e5279f2a900bdedddb2c795ac029a06401543cd7610ad - md5: 48ae8370a4562f7049d587d017792a3a - depends: - - python - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - - ucrt >=10.0.20348.0 - - python_abi 3.14.* *_cp314 - license: MIT - license_family: MIT - purls: - - pkg:pypi/debugpy?source=hash-mapping - size: 4026404 - timestamp: 1769745008861 -- conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda - sha256: c17c6b9937c08ad63cb20a26f403a3234088e57d4455600974a0ce865cb14017 - md5: 9ce473d1d1be1cc3810856a48b3fab32 - depends: - - python >=3.9 - license: BSD-2-Clause - license_family: BSD - purls: - - pkg:pypi/decorator?source=hash-mapping - size: 14129 - timestamp: 1740385067843 -- conda: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 - sha256: 9717a059677553562a8f38ff07f3b9f61727bd614f505658b0a5ecbcf8df89be - md5: 961b3a227b437d82ad7054484cfa71b2 - depends: - - python >=3.6 - license: PSF-2.0 - license_family: PSF - purls: - - pkg:pypi/defusedxml?source=hash-mapping - size: 24062 - timestamp: 1615232388757 + run_exports: {} + size: 2842115 + timestamp: 1780390153580 - conda: https://conda.anaconda.org/conda-forge/linux-64/elfutils-0.194-h849f50c_0.conda sha256: f71eae7dc8ff9392d225d2d529691b2db16289b7d8009646eeb1adf0caf3937b md5: 6da1f998c8ea85ba7692afbb5db72fb9 @@ -4800,250 +5435,97 @@ packages: license: LGPL-3.0-only license_family: LGPL purls: [] + run_exports: + weak: + - elfutils >=0.194,<0.195.0a0 size: 1289929 timestamp: 1765447425767 -- conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - sha256: ee6cf346d017d954255bbcbdb424cddea4d14e4ed7e9813e429db1d795d01144 - md5: 8e662bd460bda79b1ea39194e3c4c9ab - depends: - - python >=3.10 - - typing_extensions >=4.6.0 - license: MIT and PSF-2.0 - purls: - - pkg:pypi/exceptiongroup?source=hash-mapping - size: 21333 - timestamp: 1763918099466 -- conda: https://conda.anaconda.org/conda-forge/noarch/execnet-2.1.2-pyhd8ed1ab_0.conda - sha256: 1acc6a420efc5b64c384c1f35f49129966f8a12c93b4bb2bdc30079e5dc9d8a8 - md5: a57b4be42619213a94f31d2c69c5dda7 - depends: - - python >=3.10 - license: MIT - license_family: MIT - purls: - - pkg:pypi/execnet?source=hash-mapping - size: 39499 - timestamp: 1762974150770 -- conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda - sha256: 210c8165a58fdbf16e626aac93cc4c14dbd551a01d1516be5ecad795d2422cad - md5: ff9efb7f7469aed3c4a8106ffa29593c - depends: - - python >=3.10 - license: MIT - license_family: MIT - purls: - - pkg:pypi/executing?source=hash-mapping - size: 30753 - timestamp: 1756729456476 -- conda: https://conda.anaconda.org/conda-forge/noarch/filterpy-1.4.5-pyhd8ed1ab_2.conda - sha256: dc81e6283bd2cdc5e8a3e5c88527870b2992a8f71f25ddec9dd995223c08aed8 - md5: 261bd75b03d09c5eeea5aedf7365e811 - depends: - - matplotlib-base - - numpy - - python >=3.9 - - scipy - license: MIT - license_family: MIT - purls: - - pkg:pypi/filterpy?source=hash-mapping - size: 72868 - timestamp: 1739826907157 -- pypi: https://files.pythonhosted.org/packages/43/f5/ee39c6e92acc742c052f137b47c210cd0a1b72dcd3f98495528bb4d27761/flatten_dict-0.4.2-py2.py3-none-any.whl - name: flatten-dict - version: 0.4.2 - sha256: 7e245b20c4c718981212210eec4284a330c9f713e632e98765560e05421e48ad - requires_dist: - - importlib-metadata ; python_full_version < '3.8' - - pathlib2>=2.3,<3.0 ; python_full_version < '3.4' - - six>=1.12,<2.0 - requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*' -- conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.62.0-pyh7db6752_0.conda - sha256: ed4462f6e49b8dea4e45f7294cca576a38cf4fc41e04bbcd95f9cf55be7776b9 - md5: 049f68f9c90f00069c748cd6fb7bfb55 +- conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.18.1-h27c8c51_0.conda + sha256: 2e50bdcebdf70a865b81f2456bbc586386451ec601c60f2b6cd22b8c40a2d384 + md5: e0e050cfa9fa85fe39632ab11cb7f3e0 depends: - - brotli - - munkres - - python >=3.10 - - unicodedata2 >=15.1.0 - track_features: - - fonttools_no_compile + - __glibc >=2.17,<3.0.a0 + - libexpat >=2.8.1,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libgcc >=14 + - libuuid >=2.42.1,<3.0a0 + - libzlib >=1.3.2,<2.0a0 license: MIT license_family: MIT - purls: - - pkg:pypi/fonttools?source=compressed-mapping - size: 837910 - timestamp: 1773137210630 -- conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_1.conda - sha256: 2509992ec2fd38ab27c7cdb42cf6cadc566a1cc0d1021a2673475d9fa87c6276 - md5: d3549fd50d450b6d9e7dddff25dd2110 - depends: - - cached-property >=1.3.0 - - python >=3.9,<4 - license: MPL-2.0 - license_family: MOZILLA - purls: - - pkg:pypi/fqdn?source=hash-mapping - size: 16705 - timestamp: 1733327494780 -- conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.2-ha770c72_0.conda - sha256: 36857701b46828b6760c3c1652414ee504e7fc12740261ac6fcff3959b72bd7a - md5: eeec961fec28e747e1e1dc0446277452 - depends: - - libfreetype 2.14.2 ha770c72_0 - - libfreetype6 2.14.2 h73754d4_0 - license: GPL-2.0-only OR FTL purls: [] - size: 174292 - timestamp: 1772757205296 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.14.2-hce30654_0.conda - sha256: 3c02ecdbfd94d25721811f51d0f400bf705005a728011e19db9975a8985e1021 - md5: ca730d8e7d1de1f71013edfef0e08f13 + run_exports: + weak: + - fontconfig >=2.18.1,<3.0a0 + - fonts-conda-ecosystem + size: 281880 + timestamp: 1780450077431 +- conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.3-ha770c72_0.conda + sha256: c934c385889c7836f034039b43b05ccfa98f53c900db03d8411189892ced090b + md5: 8462b5322567212beeb025f3519fb3e2 depends: - - libfreetype 2.14.2 hce30654_0 - - libfreetype6 2.14.2 hdfa99f5_0 + - libfreetype 2.14.3 ha770c72_0 + - libfreetype6 2.14.3 h73754d4_0 license: GPL-2.0-only OR FTL purls: [] - size: 173786 - timestamp: 1772756361577 -- conda: https://conda.anaconda.org/conda-forge/win-64/freetype-2.14.2-h57928b3_0.conda - sha256: 6dd4bb3862ea3d07015331059504cf3b6af1a11a6909e7a9b6e04a20e253da28 - md5: c360b467564b875a9f5dc481b8726cee + run_exports: + weak: + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + size: 173839 + timestamp: 1774298173462 +- conda: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.16-hb03c661_0.conda + sha256: 858283ff33d4c033f4971bf440cebff217d5552a5222ba994c49be990dacd40d + md5: f9f81ea472684d75b9dd8d0b328cf655 depends: - - libfreetype 2.14.2 h57928b3_0 - - libfreetype6 2.14.2 hdbac1cb_0 - license: GPL-2.0-only OR FTL + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: LGPL-2.1-or-later purls: [] - size: 185633 - timestamp: 1772756186241 -- pypi: https://files.pythonhosted.org/packages/e6/ab/fb21f4c939bb440104cc2b396d3be1d9b7a9fd3c6c2a53d98c45b3d7c954/fsspec-2026.2.0-py3-none-any.whl - name: fsspec - version: 2026.2.0 - sha256: 98de475b5cb3bd66bedd5c4679e87b4fdfe1a3bf4d707b151b3c07e58c9a2437 - requires_dist: - - adlfs ; extra == 'abfs' - - adlfs ; extra == 'adl' - - pyarrow>=1 ; extra == 'arrow' - - dask ; extra == 'dask' - - distributed ; extra == 'dask' - - pre-commit ; extra == 'dev' - - ruff>=0.5 ; extra == 'dev' - - numpydoc ; extra == 'doc' - - sphinx ; extra == 'doc' - - sphinx-design ; extra == 'doc' - - sphinx-rtd-theme ; extra == 'doc' - - yarl ; extra == 'doc' - - dropbox ; extra == 'dropbox' - - dropboxdrivefs ; extra == 'dropbox' - - requests ; extra == 'dropbox' - - adlfs ; extra == 'full' - - aiohttp!=4.0.0a0,!=4.0.0a1 ; extra == 'full' - - dask ; extra == 'full' - - distributed ; extra == 'full' - - dropbox ; extra == 'full' - - dropboxdrivefs ; extra == 'full' - - fusepy ; extra == 'full' - - gcsfs>2024.2.0 ; extra == 'full' - - libarchive-c ; extra == 'full' - - ocifs ; extra == 'full' - - panel ; extra == 'full' - - paramiko ; extra == 'full' - - pyarrow>=1 ; extra == 'full' - - pygit2 ; extra == 'full' - - requests ; extra == 'full' - - s3fs>2024.2.0 ; extra == 'full' - - smbprotocol ; extra == 'full' - - tqdm ; extra == 'full' - - fusepy ; extra == 'fuse' - - gcsfs>2024.2.0 ; extra == 'gcs' - - pygit2 ; extra == 'git' - - requests ; extra == 'github' - - gcsfs ; extra == 'gs' - - panel ; extra == 'gui' - - pyarrow>=1 ; extra == 'hdfs' - - aiohttp!=4.0.0a0,!=4.0.0a1 ; extra == 'http' - - libarchive-c ; extra == 'libarchive' - - ocifs ; extra == 'oci' - - s3fs>2024.2.0 ; extra == 's3' - - paramiko ; extra == 'sftp' - - smbprotocol ; extra == 'smb' - - paramiko ; extra == 'ssh' - - aiohttp!=4.0.0a0,!=4.0.0a1 ; extra == 'test' - - numpy ; extra == 'test' - - pytest ; extra == 'test' - - pytest-asyncio!=0.22.0 ; extra == 'test' - - pytest-benchmark ; extra == 'test' - - pytest-cov ; extra == 'test' - - pytest-mock ; extra == 'test' - - pytest-recording ; extra == 'test' - - pytest-rerunfailures ; extra == 'test' - - requests ; extra == 'test' - - aiobotocore>=2.5.4,<3.0.0 ; extra == 'test-downstream' - - dask[dataframe,test] ; extra == 'test-downstream' - - moto[server]>4,<5 ; extra == 'test-downstream' - - pytest-timeout ; extra == 'test-downstream' - - xarray ; extra == 'test-downstream' - - adlfs ; extra == 'test-full' - - aiohttp!=4.0.0a0,!=4.0.0a1 ; extra == 'test-full' - - backports-zstd ; python_full_version < '3.14' and extra == 'test-full' - - cloudpickle ; extra == 'test-full' - - dask ; extra == 'test-full' - - distributed ; extra == 'test-full' - - dropbox ; extra == 'test-full' - - dropboxdrivefs ; extra == 'test-full' - - fastparquet ; extra == 'test-full' - - fusepy ; extra == 'test-full' - - gcsfs ; extra == 'test-full' - - jinja2 ; extra == 'test-full' - - kerchunk ; extra == 'test-full' - - libarchive-c ; extra == 'test-full' - - lz4 ; extra == 'test-full' - - notebook ; extra == 'test-full' - - numpy ; extra == 'test-full' - - ocifs ; extra == 'test-full' - - pandas<3.0.0 ; extra == 'test-full' - - panel ; extra == 'test-full' - - paramiko ; extra == 'test-full' - - pyarrow ; extra == 'test-full' - - pyarrow>=1 ; extra == 'test-full' - - pyftpdlib ; extra == 'test-full' - - pygit2 ; extra == 'test-full' - - pytest ; extra == 'test-full' - - pytest-asyncio!=0.22.0 ; extra == 'test-full' - - pytest-benchmark ; extra == 'test-full' - - pytest-cov ; extra == 'test-full' - - pytest-mock ; extra == 'test-full' - - pytest-recording ; extra == 'test-full' - - pytest-rerunfailures ; extra == 'test-full' - - python-snappy ; extra == 'test-full' - - requests ; extra == 'test-full' - - smbprotocol ; extra == 'test-full' - - tqdm ; extra == 'test-full' - - urllib3 ; extra == 'test-full' - - zarr ; extra == 'test-full' - - zstandard ; python_full_version < '3.14' and extra == 'test-full' - - tqdm ; extra == 'tqdm' - requires_python: '>=3.10' -- conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-14.3.0-hbdf3cc3_18.conda - sha256: 3b31a273b806c6851e16e9cf63ef87cae28d19be0df148433f3948e7da795592 - md5: 30bb690150536f622873758b0e8d6712 + run_exports: + weak: + - fribidi >=1.0.16,<2.0a0 + size: 61244 + timestamp: 1757438574066 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-14.3.0-h235f0fe_19.conda + sha256: 1e2500ca976d4831c953d1c6db7b238d2e6806910b930e3eb631b79ba5c3ba41 + md5: 99936dc616b7ce97b0468759b8a7c64e depends: - binutils_impl_linux-64 >=2.45 - libgcc >=14.3.0 - - libgcc-devel_linux-64 14.3.0 hf649bbc_118 + - libgcc-devel_linux-64 14.3.0 hf649bbc_119 - libgomp >=14.3.0 - - libsanitizer 14.3.0 h8f1669f_18 + - libsanitizer 14.3.0 h8f1669f_19 - libstdcxx >=14.3.0 - - libstdcxx-devel_linux-64 14.3.0 h9f08a49_118 + - libstdcxx-devel_linux-64 14.3.0 h9f08a49_119 + - sysroot_linux-64 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + run_exports: {} + size: 77667192 + timestamp: 1778268558509 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-15.2.0-he0086c7_19.conda + sha256: a48400ec4b73369c1c59babe4ad35821b63a88bba0ec40a80cea5f8c53a26b83 + md5: e3be72048d3c4a78b8e27ec48ba06252 + depends: + - binutils_impl_linux-64 >=2.45 + - libgcc >=15.2.0 + - libgcc-devel_linux-64 15.2.0 hcc6f6b0_119 + - libgomp >=15.2.0 + - libsanitizer 15.2.0 h90f66d4_19 + - libstdcxx >=15.2.0 + - libstdcxx-devel_linux-64 15.2.0 hd446a21_119 - sysroot_linux-64 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 76302378 - timestamp: 1771378056505 -- conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-14.3.0-h298d278_21.conda - sha256: 27ad0cd10dccffca74e20fb38c9f8643ff8fce56eee260bf89fa257d5ab0c90a - md5: 1403ed5fe091bd7442e4e8a229d14030 + run_exports: {} + size: 81180457 + timestamp: 1778269124617 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-14.3.0-h50e9bb6_27.conda + sha256: d7f427d6db94a5eed2a43b186f8dc17cc1fbeb03517442390a36f1cde02548b0 + md5: 90369fa27fae2f7bf7eaaccc34c793e2 depends: - gcc_impl_linux-64 14.3.0.* - binutils_linux-64 @@ -5051,8 +5533,26 @@ packages: license: BSD-3-Clause license_family: BSD purls: [] - size: 28946 - timestamp: 1770908213807 + run_exports: + strong: + - libgcc >=14 + size: 29324 + timestamp: 1781279939286 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-15.2.0-h7be306e_27.conda + sha256: b24b13d467898a9b9a17a868a2686412a98f8935dc7cc51547dd90645d4e8436 + md5: 28bc49875f9c38e2401696b3e48d0798 + depends: + - gcc_impl_linux-64 15.2.0.* + - binutils_linux-64 + - sysroot_linux-64 + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: + strong: + - libgcc >=15 + size: 29330 + timestamp: 1781279944230 - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda sha256: 309cf4f04fec0c31b6771a5809a1909b4b3154a2208f52351e1ada006f4c750c md5: c94a5994ef49749880a8139cf9afcbe1 @@ -5061,11 +5561,14 @@ packages: - libstdcxx-ng >=12 license: GPL-2.0-or-later OR LGPL-3.0-or-later purls: [] + run_exports: + weak: + - gmp >=6.3.0,<7.0a0 size: 460055 timestamp: 1718980856608 -- conda: https://conda.anaconda.org/conda-forge/linux-64/gnutls-3.8.11-h18acefa_1.conda - sha256: c1e0ec25221c132fcee81098a23f956f3c26302739086d99e9119ab5546b05fe - md5: 334367662a82dfe67945438e373a1d3b +- conda: https://conda.anaconda.org/conda-forge/linux-64/gnutls-3.8.13-h18acefa_0.conda + sha256: dbdbb714064914281c755650bc54e1855412e7e2f4c99ad171b5123ed704b2b1 + md5: 7c3de21891993e89aabdadaa603ed835 depends: - __glibc >=2.17,<3.0.a0 - gmp >=6.3.0,<7.0a0 @@ -5074,141 +5577,160 @@ packages: - libstdcxx >=14 - libtasn1 >=4.21.0,<5.0a0 - nettle >=3.10.1,<3.11.0a0 - - p11-kit >=0.26.0,<0.27.0a0 + - p11-kit >=0.26.2,<0.27.0a0 license: LGPL-2.1-or-later license_family: LGPL purls: [] - size: 2030992 - timestamp: 1768686277371 -- pypi: https://files.pythonhosted.org/packages/d2/d8/09bfa816572a4d83bccd6750df1926f79158b1c36c5f73786e26dbe4ee38/greenlet-3.3.2-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - name: greenlet - version: 3.3.2 - sha256: 63d10328839d1973e5ba35e98cccbca71b232b14051fd957b6f8b6e8e80d0506 - requires_dist: - - sphinx ; extra == 'docs' - - furo ; extra == 'docs' - - objgraph ; extra == 'test' - - psutil ; extra == 'test' - - setuptools ; extra == 'test' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/f3/ca/2101ca3d9223a1dc125140dbc063644dca76df6ff356531eb27bc267b446/greenlet-3.3.2-cp314-cp314-win_amd64.whl - name: greenlet - version: 3.3.2 - sha256: 8c4dd0f3997cf2512f7601563cc90dfb8957c0cff1e3a1b23991d4ea1776c492 - requires_dist: - - sphinx ; extra == 'docs' - - furo ; extra == 'docs' - - objgraph ; extra == 'test' - - psutil ; extra == 'test' - - setuptools ; extra == 'test' - requires_python: '>=3.10' -- conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-14.3.0-h2185e75_18.conda - sha256: 38ffca57cc9c264d461ac2ce9464a9d605e0f606d92d831de9075cb0d95fc68a - md5: 6514b3a10e84b6a849e1b15d3753eb22 + run_exports: + weak: + - gnutls >=3.8.13,<3.9.0a0 + size: 2054535 + timestamp: 1778044634746 +- conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.15-hecca717_0.conda + sha256: 885fa7d1d7e2ad9ed0a700ee0d81ceb49de278253082d517959b22d6336eecce + md5: cf09e9fc938518e91d0706572cadf17a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: LGPL-2.0-or-later + license_family: LGPL + purls: [] + run_exports: + weak: + - graphite2 >=1.3.15,<2.0a0 + size: 100054 + timestamp: 1780454302233 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-14.3.0-h2185e75_19.conda + sha256: a31694c26d6a525d44f81130ebf7b9abe18771b7eaecb2cf93630c0b8b8fb936 + md5: 8b867d053ed89743eeac52c3a50f112d + depends: + - gcc_impl_linux-64 14.3.0 h235f0fe_19 + - libstdcxx-devel_linux-64 14.3.0 h9f08a49_119 + - sysroot_linux-64 + - tzdata + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + run_exports: {} + size: 15235650 + timestamp: 1778268773535 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-15.2.0-hda75c37_19.conda + sha256: 3f5288346b9fe233352443b3c2e31f1fde845e39d3e96475fc05ec2e782af158 + md5: 9d41f3899b512199af0a4bb939b83e21 depends: - - gcc_impl_linux-64 14.3.0 hbdf3cc3_18 - - libstdcxx-devel_linux-64 14.3.0 h9f08a49_118 + - gcc_impl_linux-64 15.2.0 he0086c7_19 + - libstdcxx-devel_linux-64 15.2.0 hd446a21_119 - sysroot_linux-64 - tzdata license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 14566100 - timestamp: 1771378271421 -- conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-14.3.0-he467f4b_21.conda - sha256: 1e07c197e0779fa9105e59cd55a835ded96bfde59eb169439736a89b27b48e5d - md5: 7b51f4ff82eeb1f386bfee20a7bed3ed + run_exports: {} + size: 16356816 + timestamp: 1778269332159 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-14.3.0-hd240bd5_27.conda + sha256: cf5a44d14732b79e3c2bc6ebe1dba4f6b9077939f3093c75e36ad340737b5c15 + md5: 41fae38a424bbc78438cfec6a4fde187 depends: - gxx_impl_linux-64 14.3.0.* - - gcc_linux-64 ==14.3.0 h298d278_21 + - gcc_linux-64 ==14.3.0 h50e9bb6_27 - binutils_linux-64 - sysroot_linux-64 license: BSD-3-Clause license_family: BSD purls: [] - size: 27503 - timestamp: 1770908213813 -- conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda - sha256: 96cac6573fd35ae151f4d6979bab6fbc90cb6b1fb99054ba19eb075da9822fcb - md5: b8993c19b0c32a2f7b66cbb58ca27069 - depends: - - python >=3.10 - - typing_extensions - - python - license: MIT - license_family: MIT - purls: - - pkg:pypi/h11?source=compressed-mapping - size: 39069 - timestamp: 1767729720872 -- conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda - sha256: 84c64443368f84b600bfecc529a1194a3b14c3656ee2e832d15a20e0329b6da3 - md5: 164fc43f0b53b6e3a7bc7dce5e4f1dc9 - depends: - - python >=3.10 - - hyperframe >=6.1,<7 - - hpack >=4.1,<5 - - python - license: MIT - license_family: MIT - purls: - - pkg:pypi/h2?source=hash-mapping - size: 95967 - timestamp: 1756364871835 -- conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - sha256: 6ad78a180576c706aabeb5b4c8ceb97c0cb25f1e112d76495bff23e3779948ba - md5: 0a802cb9888dd14eeefc611f05c40b6e - depends: - - python >=3.9 - license: MIT - license_family: MIT - purls: - - pkg:pypi/hpack?source=hash-mapping - size: 30731 - timestamp: 1737618390337 -- conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda - sha256: 04d49cb3c42714ce533a8553986e1642d0549a05dc5cc48e0d43ff5be6679a5b - md5: 4f14640d58e2cc0aa0819d9d8ba125bb - depends: - - python >=3.9 - - h11 >=0.16 - - h2 >=3,<5 - - sniffio 1.* - - anyio >=4.0,<5.0 - - certifi - - python + run_exports: + strong: + - libstdcxx >=14 + - libgcc >=14 + size: 27854 + timestamp: 1781279939286 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-15.2.0-hcb00b6d_27.conda + sha256: f78da7a8b49943a6ce48372a5bc85ab741ac86666f1040e8876545065ec1096e + md5: 5e194579a5f72c70102f342aa362f5f9 + depends: + - gxx_impl_linux-64 15.2.0.* + - gcc_linux-64 ==15.2.0 h7be306e_27 + - binutils_linux-64 + - sysroot_linux-64 license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/httpcore?source=hash-mapping - size: 49483 - timestamp: 1745602916758 -- conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda - sha256: cd0f1de3697b252df95f98383e9edb1d00386bfdd03fdf607fa42fe5fcb09950 - md5: d6989ead454181f4f9bc987d3dc4e285 + purls: [] + run_exports: + strong: + - libstdcxx >=15 + - libgcc >=15 + size: 27848 + timestamp: 1781279944230 +- conda: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.16.0-nompi_py314hddf7a69_102.conda + sha256: 48e18f20bc1ff15433299dd77c20a4160eb29572eea799ae5a73632c6c3d7dfd + md5: d93afa30018997705dd04513eeb5ac0f depends: - - anyio - - certifi - - httpcore 1.* - - idna - - python >=3.9 + - __glibc >=2.17,<3.0.a0 + - cached-property + - hdf5 >=2.1.0,<3.0a0 + - libgcc >=14 + - numpy >=1.23,<3 + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/httpx?source=hash-mapping - size: 63082 - timestamp: 1733663449209 -- conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - sha256: 77af6f5fe8b62ca07d09ac60127a30d9069fdc3c68d6b256754d0ffb1f7779f8 - md5: 8e6923fc12f1fe8f8c4e5c9f343256ac + - pkg:pypi/h5py?source=hash-mapping + run_exports: {} + size: 1345557 + timestamp: 1775581268685 +- conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-14.2.1-h6083320_0.conda + sha256: da9901aa1e20cbc2369fda212039b294dd02bce95f005539bab840b7310bf7d0 + md5: 21ee4640b7c2d94e584349fa12b29b9a depends: - - python >=3.9 + - __glibc >=2.17,<3.0.a0 + - cairo >=1.18.4,<2.0a0 + - graphite2 >=1.3.14,<2.0a0 + - icu >=78.3,<79.0a0 + - libexpat >=2.8.1,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libgcc >=14 + - libglib >=2.88.1,<3.0a0 + - libstdcxx >=14 + - libzlib >=1.3.2,<2.0a0 license: MIT license_family: MIT - purls: - - pkg:pypi/hyperframe?source=hash-mapping - size: 17397 - timestamp: 1737618427549 + purls: [] + run_exports: + weak: + - harfbuzz >=14.2.1 + size: 2362258 + timestamp: 1780450503234 +- conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-2.1.0-nompi_h7d5651c_108.conda + sha256: 8225145aababbef3f8900b651cfa4ac9257cd4d522957711f469f6ea5b504761 + md5: 3c126667b98ad8ccf390a91b9097f574 + depends: + - __glibc >=2.17,<3.0.a0 + - aws-c-auth >=0.10.3,<0.10.4.0a0 + - aws-c-common >=0.14.0,<0.14.1.0a0 + - aws-c-http >=0.11.0,<0.11.1.0a0 + - aws-c-io >=0.26.3,<0.26.4.0a0 + - aws-c-s3 >=0.12.6,<0.12.7.0a0 + - aws-c-sdkutils >=0.2.5,<0.2.6.0a0 + - libaec >=1.1.5,<2.0a0 + - libcurl >=8.20.0,<9.0a0 + - libgcc >=14 + - libgfortran + - libgfortran5 >=14.3.0 + - libstdcxx >=14 + - libzlib >=1.3.2,<2.0a0 + - openssl >=3.5.7,<4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - hdf5 >=2.1.0,<3.0a0 + size: 4377467 + timestamp: 1781836834023 - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda sha256: fbf86c4a59c2ed05bbffb2ba25c7ed94f6185ec30ecb691615d42342baa1a16a md5: c80d8a3b84358cb967fa81e7075fbc8a @@ -5217,3088 +5739,3152 @@ packages: - libgcc >=14 - libstdcxx >=14 license: MIT + license_family: MIT purls: [] + run_exports: + weak: + - icu >=78.3,<79.0a0 size: 12723451 timestamp: 1773822285671 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda - sha256: 3a7907a17e9937d3a46dfd41cffaf815abad59a569440d1e25177c15fd0684e5 - md5: f1182c91c0de31a7abd40cedf6a5ebef +- conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + sha256: 0960d06048a7185d3542d850986d807c6e37ca2e644342dd0c72feefcf26c2a4 + md5: b38117a3c920364aff79f870c984b4a3 depends: - - __osx >=11.0 - license: MIT + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: LGPL-2.1-or-later purls: [] - size: 12361647 - timestamp: 1773822915649 -- conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda - sha256: ae89d0299ada2a3162c2614a9d26557a92aa6a77120ce142f8e0109bbf0342b0 - md5: 53abe63df7e10a6ba605dc5f9f961d36 + run_exports: + weak: + - keyutils >=1.6.3,<2.0a0 + size: 134088 + timestamp: 1754905959823 +- conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.5.0-py314h97ea11e_0.conda + sha256: e3488ea4a336f29e57de8f282bf40c0505cfc482e03004615e694b48e7d9c79f + md5: 7397e418cab519b8d789936cf2dde6f6 depends: - - python >=3.10 + - python + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - python_abi 3.14.* *_cp314 license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/idna?source=hash-mapping - size: 50721 - timestamp: 1760286526795 -- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - sha256: c18ab120a0613ada4391b15981d86ff777b5690ca461ea7e9e49531e8f374745 - md5: 63ccfdc3a3ce25b027b8767eb722fca8 + - pkg:pypi/kiwisolver?source=hash-mapping + run_exports: {} + size: 77363 + timestamp: 1773067048780 +- conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-hbde042b_1.conda + sha256: 9b07046870772f28740e3f6149f09ff222843733087a33c5540b169c6289652d + md5: 54157a1c8c0bb70f62dd0b17fba7e7f2 depends: - - python >=3.9 - - zipp >=3.20 - - python - license: Apache-2.0 - license_family: APACHE - purls: - - pkg:pypi/importlib-metadata?source=hash-mapping - size: 34641 - timestamp: 1747934053147 -- pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - name: iniconfig - version: 2.3.0 - sha256: f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12 - requires_python: '>=3.10' -- conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda - sha256: e1a9e3b1c8fe62dc3932a616c284b5d8cbe3124bbfbedcf4ce5c828cb166ee19 - md5: 9614359868482abba1bd15ce465e3c42 + - __glibc >=2.17,<3.0.a0 + - keyutils >=1.6.3,<2.0a0 + - libedit >=3.1.20250104,<3.2.0a0 + - libedit >=3.1.20250104,<4.0a0 + - libgcc >=14 + - libstdcxx >=14 + - openssl >=3.5.7,<4.0a0 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - krb5 >=1.22.2,<1.23.0a0 + size: 1388990 + timestamp: 1781859420533 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.19.1-h0c24ade_1.conda + sha256: 112b5b9462572d970f4abd2912f76a25ee7db158b1e7260163d91dd8a630db84 + md5: 8b3ce45e929cd8e8e5f4d18586b56d8b depends: - - python >=3.10 + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libjpeg-turbo >=3.1.4.1,<4.0a0 + - libtiff >=4.7.1,<4.8.0a0 license: MIT license_family: MIT - purls: - - pkg:pypi/iniconfig?source=compressed-mapping - size: 13387 - timestamp: 1760831448842 -- conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.2.0-pyh5552912_1.conda - sha256: 5c1f3e874adaf603449f2b135d48f168c5d510088c78c229bda0431268b43b27 - md5: 4b53d436f3fbc02ce3eeaf8ae9bebe01 + purls: [] + run_exports: + weak: + - lcms2 >=2.19.1,<3.0a0 + size: 251971 + timestamp: 1780211695895 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda + sha256: 3d584956604909ff5df353767f3a2a2f60e07d070b328d109f30ac40cd62df6c + md5: 18335a698559cdbcd86150a48bf54ba6 depends: - - appnope - - __osx - - comm >=0.1.1 - - debugpy >=1.6.5 - - ipython >=7.23.1 - - jupyter_client >=8.8.0 - - jupyter_core >=5.1,!=6.0.* - - matplotlib-inline >=0.1 - - nest-asyncio >=1.4 - - packaging >=22 - - psutil >=5.7 - - python >=3.10 - - pyzmq >=25 - - tornado >=6.4.1 - - traitlets >=5.4.0 - - python + - __glibc >=2.17,<3.0.a0 + - zstd >=1.5.7,<1.6.0a0 constrains: - - appnope >=0.1.2 - license: BSD-3-Clause + - binutils_impl_linux-64 2.45.1 + license: GPL-3.0-only + license_family: GPL + purls: [] + run_exports: {} + size: 728002 + timestamp: 1774197446916 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda + sha256: f84cb54782f7e9cea95e810ea8fef186e0652d0fa73d3009914fa2c1262594e1 + md5: a752488c68f2e7c456bcbd8f16eec275 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: Apache-2.0 + license_family: Apache + purls: [] + run_exports: + weak: + - lerc >=4.1.0,<5.0a0 + size: 261513 + timestamp: 1773113328888 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.5-h088129d_0.conda + sha256: 822e4ae421a7e9c04e841323526321185f6659222325e1a9aedec811c686e688 + md5: 86f7414544ae606282352fa1e116b41f + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: BSD-2-Clause license_family: BSD - purls: - - pkg:pypi/ipykernel?source=hash-mapping - size: 132260 - timestamp: 1770566135697 -- conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.2.0-pyh6dadd2b_1.conda - sha256: 9cdadaeef5abadca4113f92f5589db19f8b7df5e1b81cb0225f7024a3aedefa3 - md5: b3a7d5842f857414d9ae831a799444dd + purls: [] + run_exports: + weak: + - libaec >=1.1.5,<2.0a0 + size: 36544 + timestamp: 1769221884824 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.8.7-gpl_hc2c16d8_101.conda + sha256: 78dd3d493d72c7d7c7647912fe383a3545a2695ee308037b64e9d0752ccedbe9 + md5: bb1483d91797dae0b466cab86ceb59a7 depends: - - __win - - comm >=0.1.1 - - debugpy >=1.6.5 - - ipython >=7.23.1 - - jupyter_client >=8.8.0 - - jupyter_core >=5.1,!=6.0.* - - matplotlib-inline >=0.1 - - nest-asyncio >=1.4 - - packaging >=22 - - psutil >=5.7 - - python >=3.10 - - pyzmq >=25 - - tornado >=6.4.1 - - traitlets >=5.4.0 - - python - constrains: - - appnope >=0.1.2 - license: BSD-3-Clause + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - libgcc >=14 + - liblzma >=5.8.3,<6.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + - libzlib >=1.3.2,<2.0a0 + - lz4-c >=1.10.0,<1.11.0a0 + - lzo >=2.10,<3.0a0 + - openssl >=3.5.6,<4.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: BSD-2-Clause license_family: BSD - purls: - - pkg:pypi/ipykernel?source=compressed-mapping - size: 132382 - timestamp: 1770566174387 -- conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.2.0-pyha191276_1.conda - sha256: b77ed58eb235e5ad80e742b03caeed4bbc2a2ef064cb9a2deee3b75dfae91b2a - md5: 8b267f517b81c13594ed68d646fd5dcb + purls: [] + run_exports: + weak: + - libarchive >=3.8.7,<3.9.0a0 + size: 890218 + timestamp: 1778486345922 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-8_h4a7cf45_openblas.conda + build_number: 8 + sha256: b2da6bfd72a1c9cb143ccf64bf5b28790cb4eb58bd1cb978f6537b2322f7d48b + md5: 00fc660ab1b2f5ca07e92b4900d10c79 depends: - - __linux - - comm >=0.1.1 - - debugpy >=1.6.5 - - ipython >=7.23.1 - - jupyter_client >=8.8.0 - - jupyter_core >=5.1,!=6.0.* - - matplotlib-inline >=0.1 - - nest-asyncio >=1.4 - - packaging >=22 - - psutil >=5.7 - - python >=3.10 - - pyzmq >=25 - - tornado >=6.4.1 - - traitlets >=5.4.0 - - python + - libopenblas >=0.3.33,<0.3.34.0a0 + - libopenblas >=0.3.33,<1.0a0 constrains: - - appnope >=0.1.2 + - blas 2.308 openblas + - mkl <2027 + - libcblas 3.11.0 8*_openblas + - liblapack 3.11.0 8*_openblas + - liblapacke 3.11.0 8*_openblas license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/ipykernel?source=compressed-mapping - size: 133644 - timestamp: 1770566133040 -- conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.11.0-pyhccfa634_0.conda - sha256: 558073f3ceba49ab67d9e698ff2b49ddf1d1d3259de46b50795be1b6d8ec9de4 - md5: a522444721669fe6bb482f8814b969f4 + purls: [] + run_exports: + weak: + - libblas >=3.11.0,<4.0a0 + size: 18804 + timestamp: 1779859100675 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda + sha256: 318f36bd49ca8ad85e6478bd8506c88d82454cc008c1ac1c6bf00a3c42fa610e + md5: 72c8fd1af66bd67bf580645b426513ed depends: - - __win - - decorator >=5.1.0 - - ipython_pygments_lexers >=1.0.0 - - jedi >=0.18.2 - - matplotlib-inline >=0.1.6 - - prompt-toolkit >=3.0.41,<3.1.0 - - pygments >=2.14.0 - - python >=3.12 - - stack_data >=0.6.0 - - traitlets >=5.13.0 - - colorama >=0.4.4 - - python - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/ipython?source=compressed-mapping - size: 647253 - timestamp: 1772790189384 -- conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.11.0-pyhecfbec7_0.conda - sha256: 1f90e346baab7926bc52d7b60c0625087e96b4fab1bdb9a7fe83ac842312c930 - md5: 326c46b8ec2a1b4964927c7ea55ebf49 + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - libbrotlicommon >=1.2.0,<1.3.0a0 + size: 79965 + timestamp: 1764017188531 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda + sha256: 12fff21d38f98bc446d82baa890e01fd82e3b750378fedc720ff93522ffb752b + md5: 366b40a69f0ad6072561c1d09301c886 depends: - - __unix - - decorator >=5.1.0 - - ipython_pygments_lexers >=1.0.0 - - jedi >=0.18.2 - - matplotlib-inline >=0.1.6 - - prompt-toolkit >=3.0.41,<3.1.0 - - pygments >=2.14.0 - - python >=3.12 - - stack_data >=0.6.0 - - traitlets >=5.13.0 - - pexpect >4.6 - - python - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/ipython?source=compressed-mapping - size: 648197 - timestamp: 1772790149194 -- conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda - sha256: 894682a42a7d659ae12878dbcb274516a7031bbea9104e92f8e88c1f2765a104 - md5: bd80ba060603cc228d9d81c257093119 + - __glibc >=2.17,<3.0.a0 + - libbrotlicommon 1.2.0 hb03c661_1 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - libbrotlidec >=1.2.0,<1.3.0a0 + size: 34632 + timestamp: 1764017199083 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda + sha256: a0c15c79997820bbd3fbc8ecf146f4fe0eca36cc60b62b63ac6cf78857f1dd0d + md5: 4ffbb341c8b616aa2494b6afb26a0c5f depends: - - pygments - - python >=3.9 + - __glibc >=2.17,<3.0.a0 + - libbrotlicommon 1.2.0 hb03c661_1 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - libbrotlienc >=1.2.0,<1.3.0a0 + size: 298378 + timestamp: 1764017210931 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-8_h0358290_openblas.conda + build_number: 8 + sha256: 1a2bc77bb26520255904a3d9b1f40e6bf0bf9d8d3405c7709dd162282820915a + md5: 33a413f1095f8325e5c30fde3b0d2445 + depends: + - libblas 3.11.0 8_h4a7cf45_openblas + constrains: + - blas 2.308 openblas + - liblapacke 3.11.0 8*_openblas + - liblapack 3.11.0 8*_openblas license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/ipython-pygments-lexers?source=hash-mapping - size: 13993 - timestamp: 1737123723464 -- conda: https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_1.conda - sha256: 08e838d29c134a7684bca0468401d26840f41c92267c4126d7b43a6b533b0aed - md5: 0b0154421989637d424ccf0f104be51a + purls: [] + run_exports: + weak: + - libcblas >=3.11.0,<4.0a0 + size: 18778 + timestamp: 1779859107964 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.20.0-hcf29cc6_0.conda + sha256: 75963a5dd913311f59a35dbd307592f4fa754c4808aff9c33edb430c415e38eb + md5: c3cc2864f82a944bc90a7beb4d3b0e88 depends: - - arrow >=0.15.0 - - python >=3.9 - license: MIT + - __glibc >=2.17,<3.0.a0 + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=14 + - libnghttp2 >=1.68.1,<2.0a0 + - libssh2 >=1.11.1,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - openssl >=3.5.6,<4.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: curl license_family: MIT - purls: - - pkg:pypi/isoduration?source=hash-mapping - size: 19832 - timestamp: 1733493720346 -- pypi: https://files.pythonhosted.org/packages/80/e4/88778c6a23b65224e5088e68fd0924e5bde2196a26e76edb3ea3543fed6a/jax-0.9.1-py3-none-any.whl - name: jax - version: 0.9.1 - sha256: d11cb53d362912253013e8c4d6926cb9f3a4b59ab5b25a7dc08123567067d088 - requires_dist: - - jaxlib<=0.9.1,>=0.9.1 - - ml-dtypes>=0.5.0 - - numpy>=2.0 - - opt-einsum - - scipy>=1.13 - - jaxlib==0.9.1 ; extra == 'minimum-jaxlib' - - jaxlib==0.9.0 ; extra == 'ci' - - jaxlib<=0.9.1,>=0.9.1 ; extra == 'tpu' - - libtpu==0.0.35.* ; extra == 'tpu' - - requests ; extra == 'tpu' - - jaxlib<=0.9.1,>=0.9.1 ; extra == 'cuda' - - jax-cuda12-plugin[with-cuda]<=0.9.1,>=0.9.1 ; extra == 'cuda' - - jaxlib<=0.9.1,>=0.9.1 ; extra == 'cuda12' - - jax-cuda12-plugin[with-cuda]<=0.9.1,>=0.9.1 ; extra == 'cuda12' - - jaxlib<=0.9.1,>=0.9.1 ; extra == 'cuda13' - - jax-cuda13-plugin[with-cuda]<=0.9.1,>=0.9.1 ; extra == 'cuda13' - - jaxlib<=0.9.1,>=0.9.1 ; extra == 'cuda12-local' - - jax-cuda12-plugin<=0.9.1,>=0.9.1 ; extra == 'cuda12-local' - - jaxlib<=0.9.1,>=0.9.1 ; extra == 'cuda13-local' - - jax-cuda13-plugin<=0.9.1,>=0.9.1 ; extra == 'cuda13-local' - - jaxlib<=0.9.1,>=0.9.1 ; extra == 'rocm' - - jax-rocm7-plugin<=0.9.1,>=0.9.1 ; extra == 'rocm' - - kubernetes ; extra == 'k8s' - - xprof ; extra == 'xprof' - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/a7/2c/8ddb471091b46de99bba7eaa7f4e3983f9c8e74e310e585ff08915ce8b7a/jax_cuda12_pjrt-0.9.1-py3-none-manylinux_2_27_x86_64.whl - name: jax-cuda12-pjrt - version: 0.9.1 - sha256: 6447fe3d661b1d824ae7329914c4ac05fe54aeab68c7a7ca23c4f5306dec2e1f -- pypi: https://files.pythonhosted.org/packages/17/e9/3632d7eddb8f282b50bf7c095bba9de91aae0de9baea56d1699d982fe5f8/jax_cuda12_plugin-0.9.1-cp314-cp314-manylinux_2_27_x86_64.whl - name: jax-cuda12-plugin - version: 0.9.1 - sha256: 55888255c325f98af961cf5f665ca8223d0e36363eb544fc0286277be2324e8f - requires_dist: - - jax-cuda12-pjrt==0.9.1 - - nvidia-cublas-cu12>=12.1.3.1 ; sys_platform == 'linux' and extra == 'with-cuda' - - nvidia-cuda-cupti-cu12>=12.1.105 ; sys_platform == 'linux' and extra == 'with-cuda' - - nvidia-cuda-nvcc-cu12>=12.6.85 ; sys_platform == 'linux' and extra == 'with-cuda' - - nvidia-cuda-runtime-cu12>=12.1.105 ; sys_platform == 'linux' and extra == 'with-cuda' - - nvidia-cudnn-cu12>=9.8,<10.0 ; sys_platform == 'linux' and extra == 'with-cuda' - - nvidia-cufft-cu12>=11.0.2.54 ; sys_platform == 'linux' and extra == 'with-cuda' - - nvidia-cusolver-cu12>=11.4.5.107 ; sys_platform == 'linux' and extra == 'with-cuda' - - nvidia-cusparse-cu12>=12.1.0.106 ; sys_platform == 'linux' and extra == 'with-cuda' - - nvidia-nccl-cu12>=2.18.1 ; sys_platform == 'linux' and extra == 'with-cuda' - - nvidia-nvjitlink-cu12>=12.1.105 ; sys_platform == 'linux' and extra == 'with-cuda' - - nvidia-cuda-nvrtc-cu12>=12.1.55 ; sys_platform == 'linux' and extra == 'with-cuda' - - nvidia-nvshmem-cu12>=3.2.5 ; sys_platform == 'linux' and extra == 'with-cuda' - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/54/0d/a8e27c1c434e489883c1182bd52de27775b8a78013de62e6eabf80991df5/jaxlib-0.9.1-cp314-cp314-win_amd64.whl - name: jaxlib - version: 0.9.1 - sha256: 61160d686e6a4703ef30a6a3aa199c934e6359f42d0aa1c0f9c475d3953b9459 - requires_dist: - - scipy>=1.13 - - numpy>=2.0 - - ml-dtypes>=0.5.0 - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/76/fe/67d2c414b0860d42f4a20b1fadbe7aeffb1b3d885efebd7aedf22a4bc2a2/jaxlib-0.9.1-cp314-cp314-manylinux_2_27_x86_64.whl - name: jaxlib - version: 0.9.1 - sha256: 2287a1c891b152c52eb9b73925f57cde01be35d2bab4dad9673d3c83c5982ca8 - requires_dist: - - scipy>=1.13 - - numpy>=2.0 - - ml-dtypes>=0.5.0 - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/a4/b0/f2c9caa6f545d4ecc1eab528c68c9191e40087f1bc79a6da2e29c6416510/jaxlib-0.9.1-cp314-cp314-macosx_11_0_arm64.whl - name: jaxlib - version: 0.9.1 - sha256: 3071bf493f6f48207c56b1e9a5bf895e2acebc5bd40f6f35458e76eb8bf210c7 - requires_dist: - - scipy>=1.13 - - numpy>=2.0 - - ml-dtypes>=0.5.0 - requires_python: '>=3.11' -- conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda - sha256: 92c4d217e2dc68983f724aa983cca5464dcb929c566627b26a2511159667dba8 - md5: a4f4c5dc9b80bc50e0d3dc4e6e8f1bd9 + purls: [] + run_exports: + weak: + - libcurl >=8.20.0,<9.0a0 + size: 468706 + timestamp: 1777461492876 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda + sha256: aa8e8c4be9a2e81610ddf574e05b64ee131fab5e0e3693210c9d6d2fba32c680 + md5: 6c77a605a7a689d17d4819c0f8ac9a00 depends: - - parso >=0.8.3,<0.9.0 - - python >=3.9 - license: Apache-2.0 AND MIT - purls: - - pkg:pypi/jedi?source=hash-mapping - size: 843646 - timestamp: 1733300981994 -- conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - sha256: fc9ca7348a4f25fed2079f2153ecdcf5f9cf2a0bc36c4172420ca09e1849df7b - md5: 04558c96691bed63104678757beb4f8d + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - libdeflate >=1.25,<1.26.0a0 + size: 73490 + timestamp: 1761979956660 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + sha256: d789471216e7aba3c184cd054ed61ce3f6dac6f87a50ec69291b9297f8c18724 + md5: c277e0a4d549b03ac1e9d6cbbe3d017b depends: - - markupsafe >=2.0 - - python >=3.10 - - python - license: BSD-3-Clause + - ncurses + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - ncurses >=6.5,<7.0a0 + license: BSD-2-Clause license_family: BSD - purls: - - pkg:pypi/jinja2?source=compressed-mapping - size: 120685 - timestamp: 1764517220861 -- pypi: https://files.pythonhosted.org/packages/7b/91/984aca2ec129e2757d1e4e3c81c3fcda9d0f85b74670a094cc443d9ee949/joblib-1.5.3-py3-none-any.whl - name: joblib - version: 1.5.3 - sha256: 5fc3c5039fc5ca8c0276333a188bbd59d6b7ab37fe6632daa76bc7f9ec18e713 - requires_python: '>=3.9' -- conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.13.0-pyhd8ed1ab_0.conda - sha256: ba03ca5a6db38d9f48bd30172e8c512dea7a686a5c7701c6fcdb7b3023dae2ad - md5: 8d5f66ebf832c4ce28d5c37a0e76605c - depends: - - python >=3.10 - license: Apache-2.0 - license_family: APACHE - purls: - - pkg:pypi/json5?source=hash-mapping - size: 34017 - timestamp: 1767325114901 -- conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.0.0-pyhcf101f3_3.conda - sha256: 1a1328476d14dfa8b84dbacb7f7cd7051c175498406dc513ca6c679dc44f3981 - md5: cd2214824e36b0180141d422aba01938 + purls: [] + run_exports: + weak: + - libedit >=3.1.20250104,<3.2.0a0 + size: 134676 + timestamp: 1738479519902 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda + sha256: 1cd6048169fa0395af74ed5d8f1716e22c19a81a8a36f934c110ca3ad4dd27b4 + md5: 172bf1cd1ff8629f2b1179945ed45055 depends: - - python >=3.10 - - python - license: BSD-3-Clause + - libgcc-ng >=12 + license: BSD-2-Clause license_family: BSD - purls: - - pkg:pypi/jsonpointer?source=hash-mapping - size: 13967 - timestamp: 1765026384757 -- conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda - sha256: db973a37d75db8e19b5f44bbbdaead0c68dde745407f281e2a7fe4db74ec51d7 - md5: ada41c863af263cc4c5fcbaff7c3e4dc + purls: [] + run_exports: + weak: + - libev >=4.33,<4.34.0a0 + size: 112766 + timestamp: 1702146165126 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_1.conda + sha256: 16feffd9ddbbe5b718515d38ee376c685ba95491cd901244e24671d20b952a77 + md5: b24d3c612f71e7aa74158d92106318b2 depends: - - attrs >=22.2.0 - - jsonschema-specifications >=2023.3.6 - - python >=3.10 - - referencing >=0.28.4 - - rpds-py >=0.25.0 - - python + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - expat 2.8.1.* license: MIT license_family: MIT - purls: - - pkg:pypi/jsonschema?source=compressed-mapping - size: 82356 - timestamp: 1767839954256 -- conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda - sha256: 0a4f3b132f0faca10c89fdf3b60e15abb62ded6fa80aebfc007d05965192aa04 - md5: 439cd0f567d697b20a8f45cb70a1005a + purls: [] + run_exports: {} + size: 77856 + timestamp: 1781203599810 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda + sha256: 31f19b6a88ce40ebc0d5a992c131f57d919f73c0b92cd1617a5bec83f6e961e6 + md5: a360c33a5abe61c07959e449fa1453eb depends: - - python >=3.10 - - referencing >=0.31.0 - - python + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 license: MIT license_family: MIT - purls: - - pkg:pypi/jsonschema-specifications?source=hash-mapping - size: 19236 - timestamp: 1757335715225 -- conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.26.0-hcf101f3_0.conda - sha256: 6886fc61e4e4edd38fd38729976b134e8bd2143f7fce56cc80d7ac7bac99bce1 - md5: 8368d58342d0825f0843dc6acdd0c483 + purls: [] + run_exports: + weak: + - libffi >=3.5.2,<3.6.0a0 + size: 58592 + timestamp: 1769456073053 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_0.conda + sha256: 38f014a7129e644636e46064ecd6b1945e729c2140e21d75bb476af39e692db2 + md5: e289f3d17880e44b633ba911d57a321b depends: - - jsonschema >=4.26.0,<4.26.1.0a0 - - fqdn - - idna - - isoduration - - jsonpointer >1.13 - - rfc3339-validator - - rfc3986-validator >0.1.0 - - rfc3987-syntax >=1.1.0 - - uri-template - - webcolors >=24.6.0 - license: MIT - license_family: MIT + - libfreetype6 >=2.14.3 + license: GPL-2.0-only OR FTL purls: [] - size: 4740 - timestamp: 1767839954258 -- pypi: https://files.pythonhosted.org/packages/7c/25/6fe2dfc3d830ec614c5f83f88fc7472c4ed892b7f7f496367d31de4110c4/jupyter_book-2.1.2-py3-none-any.whl - name: jupyter-book - version: 2.1.2 - sha256: 1e92850680782ca777452780f9dee0550b52af338e6fe8c115961142ebf30a0e - requires_dist: - - ipykernel - - jupyter-core - - jupyter-server - - platformdirs>=4.2.2 - - nodeenv>=1.9.1 - - markdown ; extra == 'docs' - - pandas ; extra == 'docs' - requires_python: '>=3.9' -- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.3.0-pyhcf101f3_0.conda - sha256: 897ad2e2c2335ef3c2826d7805e16002a1fd0d509b4ae0bc66617f0e0ff07bc2 - md5: 62b7c96c6cd77f8173cc5cada6a9acaa + run_exports: {} + size: 8049 + timestamp: 1774298163029 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.3-h73754d4_0.conda + sha256: 16f020f96da79db1863fcdd8f2b8f4f7d52f177dd4c58601e38e9182e91adf1d + md5: fb16b4b69e3f1dcfe79d80db8fd0c55d depends: - - importlib-metadata >=4.8.3 - - jupyter_server >=1.1.2 - - python >=3.10 - - python - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/jupyter-lsp?source=hash-mapping - size: 60377 - timestamp: 1756388269267 -- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.8.0-pyhcf101f3_0.conda - sha256: e402bd119720862a33229624ec23645916a7d47f30e1711a4af9e005162b84f3 - md5: 8a3d6d0523f66cf004e563a50d9392b3 - depends: - - jupyter_core >=5.1 - - python >=3.10 - - python-dateutil >=2.8.2 - - pyzmq >=25.0 - - tornado >=6.4.1 - - traitlets >=5.3 - - python - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/jupyter-client?source=compressed-mapping - size: 112785 - timestamp: 1767954655912 -- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyh6dadd2b_0.conda - sha256: ed709a6c25b731e01563521ef338b93986cd14b5bc17f35e9382000864872ccc - md5: a8db462b01221e9f5135be466faeb3e0 - depends: - - __win - - pywin32 - - platformdirs >=2.5 - - python >=3.10 - - traitlets >=5.3 - - python + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libpng >=1.6.55,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 constrains: - - pywin32 >=300 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/jupyter-core?source=hash-mapping - size: 64679 - timestamp: 1760643889625 -- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - sha256: 1d34b80e5bfcd5323f104dbf99a2aafc0e5d823019d626d0dce5d3d356a2a52a - md5: b38fe4e78ee75def7e599843ef4c1ab0 + - freetype >=2.14.3 + license: GPL-2.0-only OR FTL + purls: [] + run_exports: {} + size: 384575 + timestamp: 1774298162622 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_19.conda + sha256: 8e0a3b5e41272e5678499b5dfc4cddb673f9e935de01eb0767ce857001229f46 + md5: 57736f29cc2b0ec0b6c2952d3f101b6a depends: - - __unix - - python - - platformdirs >=2.5 - - python >=3.10 - - traitlets >=5.3 - - python + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex >=4.5 constrains: - - pywin32 >=300 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/jupyter-core?source=hash-mapping - size: 65503 - timestamp: 1760643864586 -- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.0-pyhe01879c_0.conda - sha256: e9964aaaf6d24a685cd5ce9d75731b643ed7f010fb979574a6580cd2f974c6cd - md5: 31e11c30bbee1682a55627f953c6725a - depends: - - jsonschema-with-format-nongpl >=4.18.0 - - packaging - - python >=3.9 - - python-json-logger >=2.0.4 - - pyyaml >=5.3 - - referencing - - rfc3339-validator - - rfc3986-validator >=0.1.1 - - traitlets >=5.3 - - python - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/jupyter-events?source=hash-mapping - size: 24306 - timestamp: 1770937604863 -- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.17.0-pyhcf101f3_0.conda - sha256: 74c4e642be97c538dae1895f7052599dfd740d8bd251f727bce6453ce8d6cd9a - md5: d79a87dcfa726bcea8e61275feed6f83 - depends: - - anyio >=3.1.0 - - argon2-cffi >=21.1 - - jinja2 >=3.0.3 - - jupyter_client >=7.4.4 - - jupyter_core >=4.12,!=5.0.* - - jupyter_events >=0.11.0 - - jupyter_server_terminals >=0.4.4 - - nbconvert-core >=6.4.4 - - nbformat >=5.3.0 - - overrides >=5.0 - - packaging >=22.0 - - prometheus_client >=0.9 - - python >=3.10 - - pyzmq >=24 - - send2trash >=1.8.2 - - terminado >=0.8.3 - - tornado >=6.2.0 - - traitlets >=5.6.0 - - websocket-client >=1.7 - - python - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/jupyter-server?source=hash-mapping - size: 347094 - timestamp: 1755870522134 -- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda - sha256: 5eda79ed9f53f590031d29346abd183051263227dd9ee667b5ca1133ce297654 - md5: 7b8bace4943e0dc345fc45938826f2b8 - depends: - - python >=3.10 - - terminado >=0.8.3 - - python - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/jupyter-server-terminals?source=hash-mapping - size: 22052 - timestamp: 1768574057200 -- conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.5.6-pyhd8ed1ab_0.conda - sha256: 436a70259a9b4e13ce8b15faa8b37342835954d77a0a74d21dd24547e0871088 - md5: bcbb401d6fa84e0cee34d4926b0e9e93 + - libgcc-ng ==15.2.0=*_19 + - libgomp 15.2.0 he0feb66_19 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + run_exports: {} + size: 1041084 + timestamp: 1778269013026 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_19.conda + sha256: 9dcf54adfaa5e861123c2da4f2f0451a685464ea7e5a41ad91cf67b31d658d98 + md5: 331ee9b72b9dff570d56b1302c5ab37d depends: - - async-lru >=1.0.0 - - httpx >=0.25.0,<1 - - ipykernel >=6.5.0,!=6.30.0 - - jinja2 >=3.0.3 - - jupyter-lsp >=2.0.0 - - jupyter_core - - jupyter_server >=2.4.0,<3 - - jupyterlab_server >=2.28.0,<3 - - notebook-shim >=0.2 - - packaging - - python >=3.10 - - setuptools >=41.1.0 - - tomli >=1.2.2 - - tornado >=6.2.0 - - traitlets - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/jupyterlab?source=compressed-mapping - size: 8245973 - timestamp: 1773240966438 -- conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_2.conda - sha256: dc24b900742fdaf1e077d9a3458fd865711de80bca95fe3c6d46610c532c6ef0 - md5: fd312693df06da3578383232528c468d + - libgcc 15.2.0 he0feb66_19 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + run_exports: + strong: + - libgcc + size: 27694 + timestamp: 1778269016987 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_19.conda + sha256: 561a42758ef25b9ce308c4e2cf56daee4f06138385a17e29a492cd928e00be6f + md5: 42bf7eca1a951735fa06c0e3c0d5c8e6 depends: - - pygments >=2.4.1,<3 - - python >=3.9 + - libgfortran5 15.2.0 h68bc16d_19 constrains: - - jupyterlab >=4.0.8,<5.0.0 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/jupyterlab-pygments?source=hash-mapping - size: 18711 - timestamp: 1733328194037 -- conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.28.0-pyhcf101f3_0.conda - sha256: 381d2d6a259a3be5f38a69463e0f6c5dcf1844ae113058007b51c3bef13a7cee - md5: a63877cb23de826b1620d3adfccc4014 + - libgfortran-ng ==15.2.0=*_19 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + run_exports: {} + size: 27655 + timestamp: 1778269042954 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_19.conda + sha256: 057978bb69fea29ed715a9b98adf71015c31baecc4aeb2bfc20d4fd5d83579d4 + md5: 85072b0ad177c966294f129b7c04a2d5 depends: - - babel >=2.10 - - jinja2 >=3.0.3 - - json5 >=0.9.0 - - jsonschema >=4.18 - - jupyter_server >=1.21,<3 - - packaging >=21.3 - - python >=3.10 - - requests >=2.31 - - python - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/jupyterlab-server?source=hash-mapping - size: 51621 - timestamp: 1761145478692 -- pypi: https://files.pythonhosted.org/packages/4b/97/f6de8d4af54d6401d6581a686cce3e3e2371a79ba459a449104e026c08bc/kaleido-1.2.0-py3-none-any.whl - name: kaleido - version: 1.2.0 - sha256: c27ed82b51df6b923d0e656feac221343a0dbcd2fb9bc7e6b1db97f61e9a1513 - requires_dist: - - choreographer>=1.1.1 - - logistro>=1.0.8 - - orjson>=3.10.15 - - packaging - - pytest-timeout>=2.4.0 - requires_python: '>=3.8' -- conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-4.18.0-he073ed8_9.conda - sha256: 41557eeadf641de6aeae49486cef30d02a6912d8da98585d687894afd65b356a - md5: 86d9cba083cd041bfbf242a01a7a1999 + - __glibc >=2.17,<3.0.a0 + - libgcc >=15.2.0 constrains: - - sysroot_linux-64 ==2.28 - license: LGPL-2.0-or-later AND LGPL-2.0-or-later WITH exceptions AND GPL-2.0-or-later + - libgfortran 15.2.0 + license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 1278712 - timestamp: 1765578681495 -- conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda - sha256: 0960d06048a7185d3542d850986d807c6e37ca2e644342dd0c72feefcf26c2a4 - md5: b38117a3c920364aff79f870c984b4a3 + run_exports: {} + size: 2483673 + timestamp: 1778269025089 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.88.1-h0d30a3d_2.conda + sha256: 33eb5d5310a5c2c0a4707a0afa644801c2e08c8f70c45e1f62f354116dfe0970 + md5: 17d484ab9c8179c6a6e5b7dbb5065afc depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=13 + - libgcc >=14 + - libffi >=3.5.2,<3.6.0a0 + - pcre2 >=10.47,<10.48.0a0 + - libzlib >=1.3.2,<2.0a0 + - libiconv >=1.18,<2.0a0 + constrains: + - glib >2.66 license: LGPL-2.1-or-later purls: [] - size: 134088 - timestamp: 1754905959823 -- conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.5.0-py314h97ea11e_0.conda - sha256: e3488ea4a336f29e57de8f282bf40c0505cfc482e03004615e694b48e7d9c79f - md5: 7397e418cab519b8d789936cf2dde6f6 + run_exports: + weak: + - libglib >=2.88.1,<3.0a0 + size: 4754097 + timestamp: 1778508800134 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda + sha256: 5abe4ab9d93f6c9757d654f1969ae2267d4505315c1f2f8fe705fd60af084f1b + md5: faac990cb7aedc7f3a2224f2c9b0c26c depends: - - python - - libstdcxx >=14 + - __glibc >=2.17,<3.0.a0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + run_exports: + strong: + - _openmp_mutex >=4.5 + size: 603817 + timestamp: 1778268942614 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda + sha256: c467851a7312765447155e071752d7bf9bf44d610a5687e32706f480aad2833f + md5: 915f5995e94f60e9a4826e0b0920ee88 + depends: + - __glibc >=2.17,<3.0.a0 - libgcc >=14 + license: LGPL-2.1-only + purls: [] + run_exports: + weak: + - libiconv >=1.18,<2.0a0 + size: 790176 + timestamp: 1754908768807 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libidn2-2.3.8-hfac485b_1.conda + sha256: cc38c900b9a20fe75e61cbb594e749c57a06d96510722f5ddfa309682062b065 + md5: 842a81de672ddcf476337c8bde3cad33 + depends: - __glibc >=2.17,<3.0.a0 - - python_abi 3.14.* *_cp314 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/kiwisolver?source=compressed-mapping - size: 77363 - timestamp: 1773067048780 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/kiwisolver-1.5.0-py314hf8a3a22_0.conda - sha256: 840de1b0ba2fa646475bc53ba0f723c8a13e66139633a070831b8279deaa7c64 - md5: eb1465d8a644ef290d18fb86af6e9bc4 + - libgcc >=14 + - libunistring >=0,<1.0a0 + license: LGPL-2.0-only + license_family: LGPL + purls: [] + run_exports: + weak: + - libidn2 >=2,<3.0a0 + size: 139036 + timestamp: 1760385590993 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.4.1-hb03c661_0.conda + sha256: 10056646c28115b174de81a44e23e3a0a3b95b5347d2e6c45cc6d49d35294256 + md5: 6178c6f2fb254558238ef4e6c56fb782 depends: - - python - - python 3.14.* *_cp314 - - libcxx >=19 - - __osx >=11.0 - - python_abi 3.14.* *_cp314 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/kiwisolver?source=compressed-mapping - size: 69284 - timestamp: 1773067285911 -- conda: https://conda.anaconda.org/conda-forge/win-64/kiwisolver-1.5.0-py314hf309875_0.conda - sha256: 37cbc49fd7255532d09fb3bc9cc699554693e632fa90678a9b3d0ed12557d0d7 - md5: 0508c8dabeab91311e5c59b5e3f6d278 + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + run_exports: + weak: + - libjpeg-turbo >=3.1.4.1,<4.0a0 + size: 633831 + timestamp: 1775962768273 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-8_h47877c9_openblas.conda + build_number: 8 + sha256: 168e327d737059553e15cc6ec36d76b9bbb3931c2a7721555fd68b4c9348b247 + md5: 809be8ba8712c77bc7d44c2d99390dc4 depends: - - python - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - - ucrt >=10.0.20348.0 - - python_abi 3.14.* *_cp314 + - libblas 3.11.0 8_h4a7cf45_openblas + constrains: + - blas 2.308 openblas + - libcblas 3.11.0 8*_openblas + - liblapacke 3.11.0 8*_openblas license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/kiwisolver?source=compressed-mapping - size: 73330 - timestamp: 1773067062280 -- conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda - sha256: 3e307628ca3527448dd1cb14ad7bb9d04d1d28c7d4c5f97ba196ae984571dd25 - md5: fb53fb07ce46a575c5d004bbc96032c2 + purls: [] + run_exports: + weak: + - liblapack >=3.11.0,<3.12.0a0 + size: 18790 + timestamp: 1779859115086 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda + sha256: ec30e52a3c1bf7d0425380a189d209a52baa03f22fb66dd3eb587acaa765bd6d + md5: b88d90cad08e6bc8ad540cb310a761fb depends: - __glibc >=2.17,<3.0.a0 - - keyutils >=1.6.3,<2.0a0 - - libedit >=3.1.20250104,<3.2.0a0 - - libedit >=3.1.20250104,<4.0a0 + - libgcc >=14 + constrains: + - xz 5.8.3.* + license: 0BSD + purls: [] + run_exports: + weak: + - liblzma >=5.8.3,<6.0a0 + size: 113478 + timestamp: 1775825492909 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libmicrohttpd-1.0.5-hc2fc477_0.conda + sha256: 480c485ee8c662124b1248e88135cfc8e8ece4b21bc44b89eb5b6413831f3614 + md5: baed2ad77c2d3c4929737b6e97d65d99 + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - gnutls >=3.8.13,<3.9.0a0 + license: LGPL-2.0-or-later + license_family: LGPL + purls: [] + run_exports: + weak: + - libmicrohttpd >=1.0.5,<1.1.0a0 + size: 287897 + timestamp: 1779091106723 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda + sha256: fe171ed5cf5959993d43ff72de7596e8ac2853e9021dec0344e583734f1e0843 + md5: 2c21e66f50753a083cbe6b80f38268fa + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: BSD-2-Clause + license_family: BSD + purls: [] + run_exports: {} + size: 92400 + timestamp: 1769482286018 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h877daf1_0.conda + sha256: 663444d77a42f2265f54fb8b48c5450bfff4388d9c0f8253dd7855f0d993153f + md5: 2a45e7f8af083626f009645a6481f12d + depends: + - __glibc >=2.17,<3.0.a0 + - c-ares >=1.34.6,<2.0a0 + - libev >=4.33,<4.34.0a0 + - libev >=4.33,<5.0a0 - libgcc >=14 - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 - openssl >=3.5.5,<4.0a0 license: MIT license_family: MIT purls: [] - size: 1386730 - timestamp: 1769769569681 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-h385eeb1_0.conda - sha256: c0a0bf028fe7f3defcdcaa464e536cf1b202d07451e18ad83fdd169d15bef6ed - md5: e446e1822f4da8e5080a9de93474184d + run_exports: + weak: + - libnghttp2 >=1.68.1,<2.0a0 + size: 663344 + timestamp: 1773854035739 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libnvptxcompiler-dev-12.9.86-ha770c72_2.conda + sha256: 1e7a7b34f8639a5feb75ba864127059e4d83edfe1a516547f0dbb9941e7b8f8b + md5: 3fd926c321c6dbf386aa14bd8b125bfb depends: - - __osx >=11.0 - - libcxx >=19 - - libedit >=3.1.20250104,<3.2.0a0 - - libedit >=3.1.20250104,<4.0a0 - - openssl >=3.5.5,<4.0a0 - license: MIT - license_family: MIT + - cuda-version >=12.9,<12.10.0a0 + - libnvptxcompiler-dev_linux-64 12.9.86 ha770c72_2 + license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 1160828 - timestamp: 1769770119811 -- conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.22.2-h0ea6238_0.conda - sha256: eb60f1ad8b597bcf95dee11bc11fe71a8325bc1204cf51d2bb1f2120ffd77761 - md5: 4432f52dc0c8eb6a7a6abc00a037d93c + run_exports: {} + size: 27046 + timestamp: 1753975516342 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libnvptxcompiler-dev-13.3.33-ha770c72_0.conda + sha256: d5741cda76a98e57cc1b6bcf514586159952f8e1634b1ef9fa49ad97865e6a6a + md5: 5a54d594e6f068092a6cb9e134b8d38d depends: - - openssl >=3.5.5,<4.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: MIT - license_family: MIT + - cuda-version >=13.3,<13.4.0a0 + - libnvptxcompiler-dev_linux-64 13.3.33 ha770c72_0 + license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 751055 - timestamp: 1769769688841 -- conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda - sha256: 49570840fb15f5df5d4b4464db8ee43a6d643031a2bc70ef52120a52e3809699 - md5: 9b965c999135d43a3d0f7bd7d024e26a + run_exports: {} + size: 28446 + timestamp: 1779905221482 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.33-pthreads_h94d23a6_0.conda + sha256: 3d9aa85648e5e18a6d66db98b8c4317cc426721ad7a220aa86330d1ccedc8903 + md5: 2d3278b721e40468295ca755c3b84070 depends: - - python >=3.10 - license: MIT - license_family: MIT - purls: - - pkg:pypi/lark?source=compressed-mapping - size: 94312 - timestamp: 1761596921009 -- conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.18-h0c24ade_0.conda - sha256: 836ec4b895352110335b9fdcfa83a8dcdbe6c5fb7c06c4929130600caea91c0a - md5: 6f2e2c8f58160147c4d1c6f4c14cbac4 + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libgfortran + - libgfortran5 >=14.3.0 + constrains: + - openblas >=0.3.33,<0.3.34.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - libopenblas >=0.3.33,<1.0a0 + size: 5931919 + timestamp: 1776993658641 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.58-h421ea60_0.conda + sha256: 377cfe037f3eeb3b1bf3ad333f724a64d32f315ee1958581fc671891d63d3f89 + md5: eba48a68a1a2b9d3c0d9511548db85db depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - - libjpeg-turbo >=3.1.2,<4.0a0 - - libtiff >=4.7.1,<4.8.0a0 - license: MIT - license_family: MIT + - libzlib >=1.3.2,<2.0a0 + license: zlib-acknowledgement purls: [] - size: 249959 - timestamp: 1768184673131 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.18-hdfa7624_0.conda - sha256: d768da024ab74a4b30642401877fa914a68bdc238667f16b1ec2e0e98b2451a6 - md5: 6631a7bd2335bb9699b1dbc234b19784 + run_exports: + weak: + - libpng >=1.6.58,<1.7.0a0 + size: 317729 + timestamp: 1776315175087 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libraqm-0.10.5-h75b3fb1_0.conda + sha256: 36870c7e6362386c687f2f40d98de28f53ef84582ff65792f2f53981ede82681 + md5: 6855be9eb1d891cd5afb5eb90501c74c depends: - - __osx >=11.0 - - libjpeg-turbo >=3.1.2,<4.0a0 - - libtiff >=4.7.1,<4.8.0a0 + - libgcc >=14 + - __glibc >=2.28,<3.0.a0 + - fribidi >=1.0.16,<2.0a0 + - harfbuzz >=14.2.1 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 license: MIT license_family: MIT purls: [] - size: 211756 - timestamp: 1768184994800 -- conda: https://conda.anaconda.org/conda-forge/win-64/lcms2-2.18-hf2c6c5f_0.conda - sha256: 7eeb18c5c86db146b62da66d9e8b0e753a52987f9134a494309588bbeceddf28 - md5: b6c68d6b829b044cd17a41e0a8a23ca1 + run_exports: + weak: + - libraqm >=0.10.5,<0.11.0a0 + size: 29594 + timestamp: 1780835041392 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-14.3.0-h8f1669f_19.conda + sha256: 8766de5423b0a510e2b1bdd1963d0554bdad2119f3e31d8fbd4189af434235ca + md5: 007796e5a595bbc7df4a5e1580d72e1a depends: - - libjpeg-turbo >=3.1.2,<4.0a0 - - libtiff >=4.7.1,<4.8.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: MIT - license_family: MIT + - __glibc >=2.17,<3.0.a0 + - libgcc >=14.3.0 + - libstdcxx >=14.3.0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL purls: [] - size: 522238 - timestamp: 1768184858107 -- conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda - sha256: 565941ac1f8b0d2f2e8f02827cbca648f4d18cd461afc31f15604cd291b5c5f3 - md5: 12bd9a3f089ee6c9266a37dab82afabd + run_exports: + weak: + - libsanitizer 14.3.0 + size: 7947790 + timestamp: 1778268494844 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-15.2.0-h90f66d4_19.conda + sha256: 7a58892a52739ce4c0f7109de9e91b4353104748eb04fc6441d88e8af444ba99 + md5: 67eef12ce33f7ff99900c212d7076fc2 depends: - __glibc >=2.17,<3.0.a0 - - zstd >=1.5.7,<1.6.0a0 - constrains: - - binutils_impl_linux-64 2.45.1 - license: GPL-3.0-only + - libgcc >=15.2.0 + - libstdcxx >=15.2.0 + license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 725507 - timestamp: 1770267139900 -- conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda - sha256: f84cb54782f7e9cea95e810ea8fef186e0652d0fa73d3009914fa2c1262594e1 - md5: a752488c68f2e7c456bcbd8f16eec275 + run_exports: + weak: + - libsanitizer 15.2.0 + size: 7930689 + timestamp: 1778269054623 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.22-h280c20c_1.conda + sha256: b677bbf1c339d894757c3dcfbb2f88649e499e4991d70ae09a1466da9a6c92d6 + md5: 965e4d531b588b2e42f66fd8e48b056c depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - - libstdcxx >=14 - license: Apache-2.0 - license_family: Apache + license: ISC purls: [] - size: 261513 - timestamp: 1773113328888 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.1.0-h1eee2c3_0.conda - sha256: 66e5ffd301a44da696f3efc2f25d6d94f42a9adc0db06c44ad753ab844148c51 - md5: 095e5749868adab9cae42d4b460e5443 + run_exports: + weak: + - libsodium >=1.0.22,<1.0.23.0a0 + size: 269272 + timestamp: 1779163468406 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.2-h0c1763c_0.conda + sha256: 1ab603b6ec93933e76027e1f23b21b22b858ba1b56f1e1695ef6fe5e80cb7358 + md5: 062b0ac602fb0adf250e3dfa86f221c4 depends: - - __osx >=11.0 - - libcxx >=19 - license: Apache-2.0 - license_family: Apache + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libzlib >=1.3.2,<2.0a0 + license: blessing purls: [] - size: 164222 - timestamp: 1773114244984 -- conda: https://conda.anaconda.org/conda-forge/win-64/lerc-4.1.0-hd936e49_0.conda - sha256: 45df58fca800b552b17c3914cc9ab0d55a82c5172d72b5c44a59c710c06c5473 - md5: 54b231d595bc1ff9bff668dd443ee012 + run_exports: + weak: + - libsqlite >=3.53.2,<4.0a0 + size: 957849 + timestamp: 1780574429573 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda + sha256: fa39bfd69228a13e553bd24601332b7cfeb30ca11a3ca50bb028108fe90a7661 + md5: eecce068c7e4eddeb169591baac20ac4 depends: - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: Apache-2.0 - license_family: Apache + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.0,<4.0a0 + license: BSD-3-Clause + license_family: BSD purls: [] - size: 172395 - timestamp: 1773113455582 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.8.6-gpl_hc2c16d8_100.conda - sha256: 69ea8da58658ad26cb64fb0bfccd8a3250339811f0b57c6b8a742e5e51bacf70 - md5: 981d372c31a23e1aa9965d4e74d085d5 + run_exports: + weak: + - libssh2 >=1.11.1,<2.0a0 + size: 304790 + timestamp: 1745608545575 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_19.conda + sha256: dff1058c76ec6b8759e41cefa2508162d00e4a5e6721aa68ec3fd10094e702dc + md5: 5794b3bdc38177caf969dabd3af08549 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc 15.2.0 he0feb66_19 + constrains: + - libstdcxx-ng ==15.2.0=*_19 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + run_exports: {} + size: 5852044 + timestamp: 1778269036376 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_19.conda + sha256: 0672b6b6e1791c92e8eccad58081a99d614fcf82bca5841f9dfa3c3e658f83b9 + md5: e5ce228e579726c07255dbf90dc62101 + depends: + - libstdcxx 15.2.0 h934c35e_19 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + run_exports: + strong: + - libstdcxx + size: 27776 + timestamp: 1778269074600 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libtasn1-4.21.0-hb03c661_0.conda + sha256: a3f0c33ef567eb2e3a22d7fea0717a294a5fea4964478aa06b467ce1c93bec38 + md5: 0ffe6217a3d09398155d32a2ddb41251 depends: - __glibc >=2.17,<3.0.a0 - - bzip2 >=1.0.8,<2.0a0 - libgcc >=14 - - liblzma >=5.8.2,<6.0a0 - - libxml2 - - libxml2-16 >=2.14.6 + license: LGPL-2.1-or-later + purls: [] + run_exports: + weak: + - libtasn1 >=4.21.0,<5.0a0 + size: 116738 + timestamp: 1768297813301 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda + sha256: e5f8c38625aa6d567809733ae04bb71c161a42e44a9fa8227abe61fa5c60ebe0 + md5: cd5a90476766d53e901500df9215e927 + depends: + - __glibc >=2.17,<3.0.a0 + - lerc >=4.0.0,<5.0a0 + - libdeflate >=1.25,<1.26.0a0 + - libgcc >=14 + - libjpeg-turbo >=3.1.0,<4.0a0 + - liblzma >=5.8.1,<6.0a0 + - libstdcxx >=14 + - libwebp-base >=1.6.0,<2.0a0 - libzlib >=1.3.1,<2.0a0 - - lz4-c >=1.10.0,<1.11.0a0 - - lzo >=2.10,<3.0a0 - - openssl >=3.5.5,<4.0a0 - zstd >=1.5.7,<1.6.0a0 - license: BSD-2-Clause - license_family: BSD + license: HPND purls: [] - size: 887139 - timestamp: 1773243188979 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-5_h4a7cf45_openblas.conda - build_number: 5 - sha256: 18c72545080b86739352482ba14ba2c4815e19e26a7417ca21a95b76ec8da24c - md5: c160954f7418d7b6e87eaf05a8913fa9 + run_exports: + weak: + - libtiff >=4.7.1,<4.8.0a0 + size: 435273 + timestamp: 1762022005702 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libunistring-0.9.10-h7f98852_0.tar.bz2 + sha256: e88c45505921db29c08df3439ddb7f771bbff35f95e7d3103bf365d5d6ce2a6d + md5: 7245a044b4a1980ed83196176b78b73a depends: - - libopenblas >=0.3.30,<0.3.31.0a0 - - libopenblas >=0.3.30,<1.0a0 - constrains: - - mkl <2026 - - liblapack 3.11.0 5*_openblas - - libcblas 3.11.0 5*_openblas - - blas 2.305 openblas - - liblapacke 3.11.0 5*_openblas - license: BSD-3-Clause - license_family: BSD + - libgcc-ng >=9.3.0 + license: GPL-3.0-only OR LGPL-3.0-only purls: [] - size: 18213 - timestamp: 1765818813880 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.11.0-5_h51639a9_openblas.conda - build_number: 5 - sha256: 620a6278f194dcabc7962277da6835b1e968e46ad0c8e757736255f5ddbfca8d - md5: bcc025e2bbaf8a92982d20863fe1fb69 + run_exports: + weak: + - libunistring >=0,<1.0a0 + size: 1433436 + timestamp: 1626955018689 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libunwind-1.8.3-h65a8314_0.conda + sha256: 71c8b9d5c72473752a0bb6e91b01dd209a03916cb71f36cc6a564e3a2a132d7a + md5: e179a69edd30d75c0144d7a380b88f28 depends: - - libopenblas >=0.3.30,<0.3.31.0a0 - - libopenblas >=0.3.30,<1.0a0 - constrains: - - libcblas 3.11.0 5*_openblas - - liblapack 3.11.0 5*_openblas - - liblapacke 3.11.0 5*_openblas - - blas 2.305 openblas - - mkl <2026 + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - libunwind >=1.8.3,<1.9.0a0 + size: 75995 + timestamp: 1757032240102 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.2-h5347b49_0.conda + sha256: 9b1bdce27a7e31f7d241aeecff67a1f3101d52a2b1e33ccc2cdf2613072bf81f + md5: 01bb81d12c957de066ea7362007df642 + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 license: BSD-3-Clause license_family: BSD purls: [] - size: 18546 - timestamp: 1765819094137 -- conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.11.0-5_hf2e6a31_mkl.conda - build_number: 5 - sha256: f0cb7b2697461a306341f7ff32d5b361bb84f3e94478464c1e27ee01fc8f276b - md5: f9decf88743af85c9c9e05556a4c47c0 + run_exports: + weak: + - libuuid >=2.42.2,<3.0a0 + size: 40017 + timestamp: 1781625522462 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda + sha256: 3aed21ab28eddffdaf7f804f49be7a7d701e8f0e46c856d801270b470820a37b + md5: aea31d2e5b1091feca96fcfe945c3cf9 depends: - - mkl >=2025.3.0,<2026.0a0 + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 constrains: - - liblapack 3.11.0 5*_mkl - - libcblas 3.11.0 5*_mkl - - blas 2.305 mkl - - liblapacke 3.11.0 5*_mkl + - libwebp 1.6.0 license: BSD-3-Clause license_family: BSD purls: [] - size: 67438 - timestamp: 1765819100043 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda - sha256: 318f36bd49ca8ad85e6478bd8506c88d82454cc008c1ac1c6bf00a3c42fa610e - md5: 72c8fd1af66bd67bf580645b426513ed + run_exports: + weak: + - libwebp-base >=1.6.0,<2.0a0 + size: 429011 + timestamp: 1752159441324 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda + sha256: 666c0c431b23c6cec6e492840b176dde533d48b7e6fb8883f5071223433776aa + md5: 92ed62436b625154323d40d5f2f11dd7 depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=14 + - libgcc >=13 + - pthread-stubs + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp license: MIT license_family: MIT purls: [] - size: 79965 - timestamp: 1764017188531 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.2.0-hc919400_1.conda - sha256: a7cb9e660531cf6fbd4148cff608c85738d0b76f0975c5fc3e7d5e92840b7229 - md5: 006e7ddd8a110771134fcc4e1e3a6ffa + run_exports: + weak: + - libxcb >=1.17.0,<2.0a0 + size: 395888 + timestamp: 1727278577118 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.3-hca6bf5a_0.conda + sha256: 3d44f737c5ae52d5af32682cc1530df433f401f8e58a7533926536244127572a + md5: e79d2c2f24b027aa8d5ab1b1ba3061e7 depends: - - __osx >=11.0 + - __glibc >=2.17,<3.0.a0 + - icu >=78.3,<79.0a0 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - libxml2 2.15.3 license: MIT license_family: MIT purls: [] - size: 79443 - timestamp: 1764017945924 -- conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlicommon-1.2.0-hfd05255_1.conda - sha256: 5097303c2fc8ebf9f9ea9731520aa5ce4847d0be41764edd7f6dee2100b82986 - md5: 444b0a45bbd1cb24f82eedb56721b9c4 + run_exports: {} + size: 559775 + timestamp: 1776376739004 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.3-h49c6c72_0.conda + sha256: 3bc5551720c58591f6ea1146f7d1539c734ed1c40e7b9f5cb8cb7e900c509aba + md5: 995d8c8bad2a3cc8db14675a153dec2b depends: - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 + - __glibc >=2.17,<3.0.a0 + - icu >=78.3,<79.0a0 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libxml2-16 2.15.3 hca6bf5a_0 + - libzlib >=1.3.2,<2.0a0 license: MIT license_family: MIT purls: [] - size: 82042 - timestamp: 1764017799966 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda - sha256: 12fff21d38f98bc446d82baa890e01fd82e3b750378fedc720ff93522ffb752b - md5: 366b40a69f0ad6072561c1d09301c886 + run_exports: + weak: + - libxml2 + - libxml2-16 >=2.15.3 + size: 46810 + timestamp: 1776376751152 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda + sha256: 55044c403570f0dc26e6364de4dc5368e5f3fc7ff103e867c487e2b5ab2bcda9 + md5: d87ff7921124eccd67248aa483c23fec depends: - __glibc >=2.17,<3.0.a0 - - libbrotlicommon 1.2.0 hb03c661_1 - - libgcc >=14 - license: MIT - license_family: MIT + constrains: + - zlib 1.3.2 *_2 + license: Zlib + license_family: Other purls: [] - size: 34632 - timestamp: 1764017199083 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.2.0-hc919400_1.conda - sha256: 2eae444039826db0454b19b52a3390f63bfe24f6b3e63089778dd5a5bf48b6bf - md5: 079e88933963f3f149054eec2c487bc2 + run_exports: + weak: + - libzlib >=1.3.2,<2.0a0 + size: 63629 + timestamp: 1774072609062 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda + sha256: 47326f811392a5fd3055f0f773036c392d26fdb32e4d8e7a8197eed951489346 + md5: 9de5350a85c4a20c685259b889aa6393 depends: - - __osx >=11.0 - - libbrotlicommon 1.2.0 hc919400_1 - license: MIT - license_family: MIT + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + license: BSD-2-Clause + license_family: BSD purls: [] - size: 29452 - timestamp: 1764017979099 -- conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlidec-1.2.0-hfd05255_1.conda - sha256: 3239ce545cf1c32af6fffb7fc7c75cb1ef5b6ea8221c66c85416bb2d46f5cccb - md5: 450e3ae947fc46b60f1d8f8f318b40d4 + run_exports: + weak: + - lz4-c >=1.10.0,<1.11.0a0 + size: 167055 + timestamp: 1733741040117 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-h280c20c_1002.conda + sha256: 5c6bbeec116e29f08e3dad3d0524e9bc5527098e12fc432c0e5ca53ea16337d4 + md5: 45161d96307e3a447cc3eb5896cf6f8c depends: - - libbrotlicommon 1.2.0 hfd05255_1 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: MIT - license_family: MIT + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + license: GPL-2.0-or-later + license_family: GPL purls: [] - size: 34449 - timestamp: 1764017851337 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda - sha256: a0c15c79997820bbd3fbc8ecf146f4fe0eca36cc60b62b63ac6cf78857f1dd0d - md5: 4ffbb341c8b616aa2494b6afb26a0c5f + run_exports: + weak: + - lzo >=2.10,<3.0a0 + size: 191060 + timestamp: 1753889274283 +- conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py314h67df5f8_1.conda + sha256: c279be85b59a62d5c52f5dd9a4cd43ebd08933809a8416c22c3131595607d4cf + md5: 9a17c4307d23318476d7fbf0fedc0cde depends: - __glibc >=2.17,<3.0.a0 - - libbrotlicommon 1.2.0 hb03c661_1 - libgcc >=14 - license: MIT - license_family: MIT - purls: [] - size: 298378 - timestamp: 1764017210931 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.2.0-hc919400_1.conda - sha256: 01436c32bb41f9cb4bcf07dda647ce4e5deb8307abfc3abdc8da5317db8189d1 - md5: b2b7c8288ca1a2d71ff97a8e6a1e8883 - depends: - - __osx >=11.0 - - libbrotlicommon 1.2.0 hc919400_1 - license: MIT - license_family: MIT - purls: [] - size: 290754 - timestamp: 1764018009077 -- conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlienc-1.2.0-hfd05255_1.conda - sha256: 3226df6b7df98734440739f75527d585d42ca2bfe912fbe8d1954c512f75341a - md5: ccd93cfa8e54fd9df4e83dbe55ff6e8c - depends: - - libbrotlicommon 1.2.0 hfd05255_1 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: MIT - license_family: MIT - purls: [] - size: 252903 - timestamp: 1764017901735 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-5_h0358290_openblas.conda - build_number: 5 - sha256: 0cbdcc67901e02dc17f1d19e1f9170610bd828100dc207de4d5b6b8ad1ae7ad8 - md5: 6636a2b6f1a87572df2970d3ebc87cc0 - depends: - - libblas 3.11.0 5_h4a7cf45_openblas + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 constrains: - - liblapacke 3.11.0 5*_openblas - - blas 2.305 openblas - - liblapack 3.11.0 5*_openblas + - jinja2 >=3.0.0 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/markupsafe?source=hash-mapping + run_exports: {} + size: 27424 + timestamp: 1772445227915 +- conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.11.0-py314h261f116_0.conda + sha256: d89de93d3cd4d4b2c3ce2f081df1b7ea83b8b3d8c4ba05aea1968ee43a4d9954 + md5: 6b2f4b994b97722933dacd51776d5c49 + depends: + - __glibc >=2.17,<3.0.a0 + - contourpy >=1.0.1 + - cycler >=0.10 + - fonttools >=4.22.0 + - freetype + - kiwisolver >=1.3.1 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libgcc >=14 + - libraqm >=0.10.5,<0.11.0a0 + - libstdcxx >=14 + - numpy >=1.23 + - numpy >=1.23,<3 + - packaging >=20.0 + - pillow >=8 + - pyparsing >=2.3.1 + - python >=3.14,<3.15.0a0 + - python-dateutil >=2.7 + - python_abi 3.14.* *_cp314 + - qhull >=2020.2,<2020.3.0a0 + - tk >=8.6.13,<8.7.0a0 + license: PSF-2.0 + license_family: PSF + purls: + - pkg:pypi/matplotlib?source=hash-mapping + run_exports: {} + size: 9034523 + timestamp: 1781626897073 +- conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.19.3-py314hef15ded_0.conda + sha256: 729c193d71291cfc24db8161199ed9f3508579f1b2b7eb250f25cbf903dd58d9 + md5: b2ace6799650355733a5eab297301940 + depends: + - python + - rich >=11.2.0 + - jinja2 + - textual >=0.34.0 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 + - elfutils >=0.194,<0.195.0a0 + - libunwind >=1.8.3,<1.9.0a0 + - python_abi 3.14.* *_cp314 + - lz4-c >=1.10.0,<1.11.0a0 + license: Apache-2.0 AND BSD-3-Clause + purls: + - pkg:pypi/memray?source=hash-mapping + run_exports: {} + size: 1849063 + timestamp: 1775683239172 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda + sha256: fc89f74bbe362fb29fa3c037697a89bec140b346a2469a90f7936d1d7ea4d8a3 + md5: fc21868a1a5aacc937e7a18747acb8a5 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: X11 AND BSD-3-Clause purls: [] - size: 18194 - timestamp: 1765818837135 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.11.0-5_hb0561ab_openblas.conda - build_number: 5 - sha256: 38809c361bbd165ecf83f7f05fae9b791e1baa11e4447367f38ae1327f402fc0 - md5: efd8bd15ca56e9d01748a3beab8404eb + run_exports: + weak: + - ncurses >=6.6,<7.0a0 + size: 918956 + timestamp: 1777422145199 +- conda: https://conda.anaconda.org/conda-forge/linux-64/nettle-3.10.1-h4a9d5aa_0.conda + sha256: 00b5a5e394d58cff5b08e0082699e773dd41995130bc14747740a16d9cacdd2c + md5: 618bf3007df69a0ca9306ed8d6b48b48 depends: - - libblas 3.11.0 5_h51639a9_openblas - constrains: - - liblapacke 3.11.0 5*_openblas - - liblapack 3.11.0 5*_openblas - - blas 2.305 openblas - license: BSD-3-Clause - license_family: BSD + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - gmp >=6.3.0,<7.0a0 + license: GPL-2.0-or-later OR LGPL-3.0-or-later purls: [] - size: 18548 - timestamp: 1765819108956 -- conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.11.0-5_h2a3cdd5_mkl.conda - build_number: 5 - sha256: 49dc59d8e58360920314b8d276dd80da7866a1484a9abae4ee2760bc68f3e68d - md5: b3fa8e8b55310ba8ef0060103afb02b5 + run_exports: + weak: + - nettle >=3.10.1,<3.11.0a0 + size: 1047686 + timestamp: 1748012178395 +- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.5.0-py314h2b28147_0.conda + sha256: bbc665584886c90daf3f33cfbf665f279cf91d4bd5323f0432c16d2bf4d525e7 + md5: bdb21d2b990f9d3aee10fd43aca851fe depends: - - libblas 3.11.0 5_hf2e6a31_mkl + - python + - libgcc >=14 + - libstdcxx >=14 + - __glibc >=2.17,<3.0.a0 + - libcblas >=3.9.0,<4.0a0 + - libblas >=3.9.0,<4.0a0 + - python_abi 3.14.* *_cp314 + - liblapack >=3.9.0,<4.0a0 constrains: - - liblapack 3.11.0 5*_mkl - - liblapacke 3.11.0 5*_mkl - - blas 2.305 mkl + - numpy-base <0a0 license: BSD-3-Clause license_family: BSD - purls: [] - size: 68079 - timestamp: 1765819124349 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.19.0-hcf29cc6_0.conda - sha256: a0390fd0536ebcd2244e243f5f00ab8e76ab62ed9aa214cd54470fe7496620f4 - md5: d50608c443a30c341c24277d28290f76 + purls: + - pkg:pypi/numpy?source=compressed-mapping + run_exports: + weak: + - numpy >=1.25,<3 + size: 9075918 + timestamp: 1782112541752 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda + sha256: 3900f9f2dbbf4129cf3ad6acf4e4b6f7101390b53843591c53b00f034343bc4d + md5: 11b3379b191f63139e29c0d19dee24cd depends: - __glibc >=2.17,<3.0.a0 - - krb5 >=1.22.2,<1.23.0a0 - libgcc >=14 - - libnghttp2 >=1.67.0,<2.0a0 - - libssh2 >=1.11.1,<2.0a0 + - libpng >=1.6.50,<1.7.0a0 + - libstdcxx >=14 + - libtiff >=4.7.1,<4.8.0a0 - libzlib >=1.3.1,<2.0a0 - - openssl >=3.5.5,<4.0a0 - - zstd >=1.5.7,<1.6.0a0 - license: curl - license_family: MIT + license: BSD-2-Clause + license_family: BSD purls: [] - size: 466704 - timestamp: 1773218522665 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.1-h55c6f16_0.conda - sha256: 3c8142cdd3109c250a926c492ec45bc954697b288e5d1154ada95272ffa21be8 - md5: 7a290d944bc0c481a55baf33fa289deb + run_exports: + weak: + - openjpeg >=2.5.4,<3.0a0 + size: 355400 + timestamp: 1758489294972 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.3-h35e630c_0.conda + sha256: d48f5c22b9897c01e4dff3680f1f57ceb02711ab9c62f74339b080419dfad34b + md5: 79dd2074b5cd5c5c6b2930514a11e22d depends: - - __osx >=11.0 - license: Apache-2.0 WITH LLVM-exception + - __glibc >=2.17,<3.0.a0 + - ca-certificates + - libgcc >=14 + license: Apache-2.0 license_family: Apache purls: [] - size: 570281 - timestamp: 1773203613980 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda - sha256: aa8e8c4be9a2e81610ddf574e05b64ee131fab5e0e3693210c9d6d2fba32c680 - md5: 6c77a605a7a689d17d4819c0f8ac9a00 + run_exports: + weak: + - openssl >=3.6.3,<4.0a0 + size: 3159683 + timestamp: 1781069855778 +- conda: https://conda.anaconda.org/conda-forge/linux-64/p11-kit-0.26.2-h3435931_0.conda + sha256: f63962d24d81d4fafa15112c03cd5db1fddadd520fdb2ad7ec71a1689e8e694f + md5: 312989f1b7318c3763fffdc78df8474e depends: - __glibc >=2.17,<3.0.a0 + - libffi >=3.5.2,<3.6.0a0 - libgcc >=14 + - libtasn1 >=4.21.0,<5.0a0 license: MIT license_family: MIT purls: [] - size: 73490 - timestamp: 1761979956660 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.25-hc11a715_0.conda - sha256: 5e0b6961be3304a5f027a8c00bd0967fc46ae162cffb7553ff45c70f51b8314c - md5: a6130c709305cd9828b4e1bd9ba0000c + run_exports: + weak: + - p11-kit >=0.26.2,<0.27.0a0 + size: 3831848 + timestamp: 1770417713801 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda + sha256: 5e6f7d161356fefd981948bea5139c5aa0436767751a6930cb1ca801ebb113ff + md5: 7a3bff861a6583f1889021facefc08b1 depends: - - __osx >=11.0 + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - libgcc >=14 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - pcre2 >=10.47,<10.48.0a0 + size: 1222481 + timestamp: 1763655398280 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.2.0-py314h8ec4b1a_0.conda + sha256: 123d8a7c16c88658b4f29e9f115a047598c941708dade74fbaff373a32dbec5e + md5: 76c4757c0ec9d11f969e8eb44899307b + depends: + - python + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libtiff >=4.7.1,<4.8.0a0 + - openjpeg >=2.5.4,<3.0a0 + - libxcb >=1.17.0,<2.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - zlib-ng >=2.3.3,<2.4.0a0 + - libjpeg-turbo >=3.1.2,<4.0a0 + - python_abi 3.14.* *_cp314 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - lcms2 >=2.18,<3.0a0 + - tk >=8.6.13,<8.7.0a0 + license: HPND + purls: + - pkg:pypi/pillow?source=hash-mapping + run_exports: {} + size: 1082797 + timestamp: 1775060059882 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda + sha256: 43d37bc9ca3b257c5dd7bf76a8426addbdec381f6786ff441dc90b1a49143b6a + md5: c01af13bdc553d1a8fbfff6e8db075f0 + depends: + - libgcc >=14 + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 license: MIT license_family: MIT purls: [] - size: 55420 - timestamp: 1761980066242 -- conda: https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.25-h51727cc_0.conda - sha256: 834e4881a18b690d5ec36f44852facd38e13afe599e369be62d29bd675f107ee - md5: e77030e67343e28b084fabd7db0ce43e + run_exports: + weak: + - pixman >=0.46.4,<1.0a0 + size: 450960 + timestamp: 1754665235234 +- conda: https://conda.anaconda.org/conda-forge/linux-64/prek-0.4.5-hb17b654_0.conda + sha256: 2928b1ae6f2fb6e980ad40a918323c1b20cfe7d1ae0b92d4d122066429df0156 + md5: 9275f4d52fbe8d5a89e2ad82fd0d738f depends: - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - __glibc >=2.17 license: MIT license_family: MIT purls: [] - size: 156818 - timestamp: 1761979842440 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - sha256: d789471216e7aba3c184cd054ed61ce3f6dac6f87a50ec69291b9297f8c18724 - md5: c277e0a4d549b03ac1e9d6cbbe3d017b + run_exports: {} + size: 6049503 + timestamp: 1781546640651 +- conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.2-py314h0f05182_0.conda + sha256: f15574ed6c8c8ed8c15a0c5a00102b1efe8b867c0bd286b498cd98d95bd69ae5 + md5: 4f225a966cfee267a79c5cb6382bd121 depends: - - ncurses + - python + - libgcc >=14 - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - ncurses >=6.5,<7.0a0 - license: BSD-2-Clause + - python_abi 3.14.* *_cp314 + license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/psutil?source=hash-mapping + run_exports: {} + size: 231303 + timestamp: 1769678156552 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda + sha256: 9c88f8c64590e9567c6c80823f0328e58d3b1efb0e1c539c0315ceca764e0973 + md5: b3c17d95b5a10c6e64a21fa17573e70e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT purls: [] - size: 134676 - timestamp: 1738479519902 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda - sha256: 66aa216a403de0bb0c1340a88d1a06adaff66bae2cfd196731aa24db9859d631 - md5: 44083d2d2c2025afca315c7a172eab2b + run_exports: {} + size: 8252 + timestamp: 1726802366959 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.6-habeac84_100_cp314.conda + build_number: 100 + sha256: 6d28ac2b061179deb434d3d57afa98ffd20ec3c5d44ab8048a1ca33424b22d38 + md5: 0b9b2f83b5b600e1ac38becde8d0dd44 depends: - - ncurses - - __osx >=11.0 - - ncurses >=6.5,<7.0a0 - license: BSD-2-Clause - license_family: BSD + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-64 >=2.36.1 + - libexpat >=2.8.1,<3.0a0 + - libffi >=3.5.2,<3.6.0a0 + - libgcc >=14 + - liblzma >=5.8.3,<6.0a0 + - libmpdec >=4.0.0,<5.0a0 + - libsqlite >=3.53.2,<4.0a0 + - libuuid >=2.42.1,<3.0a0 + - libzlib >=1.3.2,<2.0a0 + - ncurses >=6.6,<7.0a0 + - openssl >=3.5.7,<4.0a0 + - python_abi 3.14.* *_cp314 + - readline >=8.3,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - zstd >=1.5.7,<1.6.0a0 + license: Python-2.0 purls: [] - size: 107691 - timestamp: 1738479560845 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda - sha256: 1cd6048169fa0395af74ed5d8f1716e22c19a81a8a36f934c110ca3ad4dd27b4 - md5: 172bf1cd1ff8629f2b1179945ed45055 + run_exports: + weak: + - python_abi 3.14.* *_cp314 + noarch: + - python + size: 36717183 + timestamp: 1781255094700 + python_site_packages_path: lib/python3.14/site-packages +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py314h67df5f8_1.conda + sha256: b318fb070c7a1f89980ef124b80a0b5ccf3928143708a85e0053cde0169c699d + md5: 2035f68f96be30dc60a5dfd7452c7941 depends: - - libgcc-ng >=12 - license: BSD-2-Clause + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + - yaml >=0.2.5,<0.3.0a0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pyyaml?source=hash-mapping + run_exports: {} + size: 202391 + timestamp: 1770223462836 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_3.conda + noarch: python + sha256: 970b2a1d12983d8d1cc05d914ad88a0b6ef1fa14038c9649aa834dd6ebee65d7 + md5: acd216255e1370e9aeab5351b831f07c + depends: + - python + - libgcc >=14 + - libstdcxx >=14 + - __glibc >=2.17,<3.0.a0 + - _python_abi3_support 1.* + - cpython >=3.12 + - zeromq >=4.3.5,<4.4.0a0 + license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/pyzmq?source=hash-mapping + run_exports: {} + size: 210896 + timestamp: 1779483879367 +- conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda + sha256: 776363493bad83308ba30bcb88c2552632581b143e8ee25b1982c8c743e73abc + md5: 353823361b1d27eb3960efb076dfcaf6 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: LicenseRef-Qhull purls: [] - size: 112766 - timestamp: 1702146165126 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda - sha256: d78f1d3bea8c031d2f032b760f36676d87929b18146351c4464c66b0869df3f5 - md5: e7f7ce06ec24cfcfb9e36d28cf82ba57 + run_exports: + weak: + - qhull >=2020.2,<2020.3.0a0 + size: 552937 + timestamp: 1720813982144 +- conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + sha256: 12ffde5a6f958e285aa22c191ca01bbd3d6e710aa852e00618fa6ddc59149002 + md5: d7d95fc8287ea7bf33e0e7116d2b95ec + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - ncurses >=6.5,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + run_exports: + weak: + - readline >=8.3,<9.0a0 + size: 345073 + timestamp: 1765813471974 +- conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-2026.5.1-py314h1bee95f_0.conda + sha256: 79d753848377c415578f42285f5f87be711503b887c99e8890fd51d3fae1d6a5 + md5: fb5b4fc759b225d4f32730cc8380ec8e depends: + - python - __glibc >=2.17,<3.0.a0 - libgcc >=14 + - python_abi 3.14.* *_cp314 constrains: - - expat 2.7.4.* + - __glibc >=2.17 license: MIT license_family: MIT + purls: + - pkg:pypi/rpds-py?source=compressed-mapping + run_exports: {} + size: 309696 + timestamp: 1779976994059 +- conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.7.4-h92489ea_1.conda + sha256: de0bb8c7526684c9927cc687d4d07abe09d023a3ec950cfcd61089b495e2e616 + md5: a20feedf58ce5441b115cebf284a9a75 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - openssl >=3.5.7,<4.0a0 + license: Apache-2.0 + license_family: Apache purls: [] - size: 76798 - timestamp: 1771259418166 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda - sha256: 03887d8080d6a8fe02d75b80929271b39697ecca7628f0657d7afaea87761edf - md5: a92e310ae8dfc206ff449f362fc4217f + run_exports: + weak: + - s2n >=1.7.4,<1.7.5.0a0 + size: 392550 + timestamp: 1781634128636 +- conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.9.0-np2py314hf09ca88_0.conda + sha256: 6a01f4403db746acd676e34e80e3a14d041f2261d658402ca13dae6407c35d44 + md5: 30883954413aad9e3ac42134bef91ffe depends: - - __osx >=11.0 + - python + - numpy >=1.24.1 + - scipy >=1.10.0 + - joblib >=1.4.0 + - threadpoolctl >=3.5.0 + - narwhals >=2.0.1 + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex >=4.5 + - numpy >=1.23,<3 + - python_abi 3.14.* *_cp314 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/scikit-learn?source=hash-mapping + run_exports: {} + size: 10311253 + timestamp: 1780401051520 +- conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.18.0-py314hf07bd8e_0.conda + sha256: 85503102237f8515ab92319fc14609e894ac9e95e3a1398b0c49db1f9ee50877 + md5: 62c390c1f8f51240f1ebc7ba782669ad + depends: + - __glibc >=2.17,<3.0.a0 + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libgcc >=14 + - libgfortran + - libgfortran5 >=14.3.0 + - liblapack >=3.9.0,<4.0a0 + - libstdcxx >=14 + - numpy <2.7 + - numpy >=1.23,<3 + - numpy >=2.0.0 + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/scipy?source=compressed-mapping + run_exports: {} + size: 17260022 + timestamp: 1781912924009 +- conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda + sha256: cafeec44494f842ffeca27e9c8b0c27ed714f93ac77ddadc6aaf726b5554ebac + md5: cffd3bdd58090148f4cfcd831f4b26ab + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libzlib >=1.3.1,<2.0a0 constrains: - - expat 2.7.4.* + - xorg-libx11 >=1.8.12,<2.0a0 + license: TCL + license_family: BSD + purls: [] + run_exports: + weak: + - tk >=8.6.13,<8.7.0a0 + size: 3301196 + timestamp: 1769460227866 +- conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.7-py314h5bd0f2a_0.conda + sha256: bbb7056f7c5fd606df16ed73ee68687050de2c02fd69a3f69a1cb533a7ed2ae8 + md5: 4a8e5889712641aabdf6695e292857fe + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/tornado?source=hash-mapping + run_exports: {} + size: 918368 + timestamp: 1781006801436 +- conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-17.0.1-py314h5bd0f2a_0.conda + sha256: ff1c1d7c23b91c9b0eb93a3e1380f4e2ac6c37ea2bba4f932a5484e9a55bba30 + md5: 494fdf358c152f9fdd0673c128c2f3dd + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/unicodedata2?source=hash-mapping + run_exports: {} + size: 409562 + timestamp: 1770909102180 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda + sha256: c12396aabb21244c212e488bbdc4abcdef0b7404b15761d9329f5a4a39113c4b + md5: fb901ff28063514abb6046c9ec2c4a45 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 license: MIT license_family: MIT purls: [] - size: 68199 - timestamp: 1771260020767 -- conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.7.4-hac47afa_0.conda - sha256: b31f6fb629c4e17885aaf2082fb30384156d16b48b264e454de4a06a313b533d - md5: 1c1ced969021592407f16ada4573586d + run_exports: + weak: + - xorg-libice >=1.1.2,<2.0a0 + size: 58628 + timestamp: 1734227592886 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-he73a12e_0.conda + sha256: 277841c43a39f738927145930ff963c5ce4c4dacf66637a3d95d802a64173250 + md5: 1c74ff8c35dcadf952a16f752ca5aa49 depends: - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - constrains: - - expat 2.7.4.* + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libuuid >=2.38.1,<3.0a0 + - xorg-libice >=1.1.2,<2.0a0 license: MIT license_family: MIT purls: [] - size: 70323 - timestamp: 1771259521393 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - sha256: 31f19b6a88ce40ebc0d5a992c131f57d919f73c0b92cd1617a5bec83f6e961e6 - md5: a360c33a5abe61c07959e449fa1453eb + run_exports: + weak: + - xorg-libsm >=1.2.6,<2.0a0 + size: 27590 + timestamp: 1741896361728 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.13-he1eb515_0.conda + sha256: 516d4060139dbb4de49a4dcdc6317a9353fb39ebd47789c14e6fe52de0deee42 + md5: 861fb6ccbc677bb9a9fb2468430b9c6a depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 + - libxcb >=1.17.0,<2.0a0 license: MIT license_family: MIT purls: [] - size: 58592 - timestamp: 1769456073053 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda - sha256: 6686a26466a527585e6a75cc2a242bf4a3d97d6d6c86424a441677917f28bec7 - md5: 43c04d9cb46ef176bb2a4c77e324d599 + run_exports: + weak: + - xorg-libx11 >=1.8.13,<2.0a0 + size: 839652 + timestamp: 1770819209719 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda + sha256: 6bc6ab7a90a5d8ac94c7e300cc10beb0500eeba4b99822768ca2f2ef356f731b + md5: b2895afaf55bf96a8c8282a2e47a5de0 depends: - - __osx >=11.0 + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 license: MIT license_family: MIT purls: [] - size: 40979 - timestamp: 1769456747661 -- conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h3d046cb_0.conda - sha256: 59d01f2dfa8b77491b5888a5ab88ff4e1574c9359f7e229da254cdfe27ddc190 - md5: 720b39f5ec0610457b725eb3f396219a + run_exports: + weak: + - xorg-libxau >=1.0.12,<2.0a0 + size: 15321 + timestamp: 1762976464266 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda + sha256: 25d255fb2eef929d21ff660a0c687d38a6d2ccfbcbf0cc6aa738b12af6e9d142 + md5: 1dafce8548e38671bea82e3f5c6ce22f depends: - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 license: MIT license_family: MIT purls: [] - size: 45831 - timestamp: 1769456418774 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.2-ha770c72_0.conda - sha256: 2e1bfe1e856eb707d258f669ef6851af583ceaffab5e64821b503b0f7cd09e9e - md5: 26c746d14402a3b6c684d045b23b9437 + run_exports: + weak: + - xorg-libxdmcp >=1.1.5,<2.0a0 + size: 20591 + timestamp: 1762976546182 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.7-hb03c661_0.conda + sha256: 79c60fc6acfd3d713d6340d3b4e296836a0f8c51602327b32794625826bd052f + md5: 34e54f03dfea3e7a2dcf1453a85f1085 depends: - - libfreetype6 >=2.14.2 - license: GPL-2.0-only OR FTL + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - xorg-libx11 >=1.8.12,<2.0a0 + license: MIT + license_family: MIT purls: [] - size: 8035 - timestamp: 1772757210108 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype-2.14.2-hce30654_0.conda - sha256: 6061ef5321b8e697d5577d8dfe7a4c75bfe3e706c956d0d84bfec6bea3ed9f77 - md5: a3a53232936b55ffea76806aefe19e8b + run_exports: + weak: + - xorg-libxext >=1.3.7,<2.0a0 + size: 50326 + timestamp: 1769445253162 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb9d3cd8_0.conda + sha256: 044c7b3153c224c6cedd4484dd91b389d2d7fd9c776ad0f4a34f099b3389f4a1 + md5: 96d57aba173e878a2089d5638016dc5e depends: - - libfreetype6 >=2.14.2 - license: GPL-2.0-only OR FTL + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + license: MIT + license_family: MIT purls: [] - size: 8076 - timestamp: 1772756349852 -- conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype-2.14.2-h57928b3_0.conda - sha256: 427c3072b311e65bd3eae3fcb78f6847b15b2dbb173a8546424de56550b2abfb - md5: 153d52fd0e4ba2a5bd5bb4f4afa41417 + run_exports: + weak: + - xorg-libxrender >=0.9.12,<0.10.0a0 + size: 33005 + timestamp: 1734229037766 +- conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda + sha256: 6d9ea2f731e284e9316d95fa61869fe7bbba33df7929f82693c121022810f4ad + md5: a77f85f77be52ff59391544bfe73390a depends: - - libfreetype6 >=2.14.2 - license: GPL-2.0-only OR FTL + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + license: MIT + license_family: MIT purls: [] - size: 8404 - timestamp: 1772756167212 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.2-h73754d4_0.conda - sha256: aba65b94bdbed52de17ec3d0c6f2ebac2ef77071ad22d6900d1614d0dd702a0c - md5: 8eaba3d1a4d7525c6814e861614457fd + run_exports: + weak: + - yaml >=0.2.5,<0.3.0a0 + size: 85189 + timestamp: 1753484064210 +- conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h09e67af_11.conda + sha256: dc9f28dedcb5f35a127fad2d847674d2833369dd616d294e423b8997df31d8a8 + md5: 96b08867e21d4694fa5c2c226e6581b0 depends: - - __glibc >=2.17,<3.0.a0 - libgcc >=14 - - libpng >=1.6.55,<1.7.0a0 - - libzlib >=1.3.1,<2.0a0 - constrains: - - freetype >=2.14.2 - license: GPL-2.0-only OR FTL + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 + - krb5 >=1.22.2,<1.23.0a0 + - libsodium >=1.0.22,<1.0.23.0a0 + license: MPL-2.0 + license_family: MOZILLA purls: [] - size: 386316 - timestamp: 1772757193822 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype6-2.14.2-hdfa99f5_0.conda - sha256: 24dd0e0bee56e87935f885929f67659f1d3b8a01e7546568de2919cffd9e2e36 - md5: e726e134a392ae5d7bafa6cc4a3d5725 + run_exports: + weak: + - zeromq >=4.3.5,<4.4.0a0 + size: 311184 + timestamp: 1779123989774 +- conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda + sha256: ea4e50c465d70236408cb0bfe0115609fd14db1adcd8bd30d8918e0291f8a75f + md5: 2aadb0d17215603a82a2a6b0afd9a4cb depends: - - __osx >=11.0 - - libpng >=1.6.55,<1.7.0a0 - - libzlib >=1.3.1,<2.0a0 - constrains: - - freetype >=2.14.2 - license: GPL-2.0-only OR FTL + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: Zlib + license_family: Other purls: [] - size: 338032 - timestamp: 1772756347899 -- conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype6-2.14.2-hdbac1cb_0.conda - sha256: 1e80e01e5662bd3a0c0e094fbeaec449dbb2288949ca55ca80345e7812904e67 - md5: c21a474a38982cdb56b3454cf4f78389 + run_exports: + weak: + - zlib-ng >=2.3.3,<2.4.0a0 + size: 122618 + timestamp: 1770167931827 +- conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + sha256: 68f0206ca6e98fea941e5717cec780ed2873ffabc0e1ed34428c061e2c6268c7 + md5: 4a13eeac0b5c8e5b8ab496e6c4ddd829 depends: - - libpng >=1.6.55,<1.7.0a0 + - __glibc >=2.17,<3.0.a0 - libzlib >=1.3.1,<2.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - constrains: - - freetype >=2.14.2 - license: GPL-2.0-only OR FTL + license: BSD-3-Clause + license_family: BSD purls: [] - size: 340155 - timestamp: 1772756166648 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda - sha256: faf7d2017b4d718951e3a59d081eb09759152f93038479b768e3d612688f83f5 - md5: 0aa00f03f9e39fb9876085dee11a85d4 - depends: - - __glibc >=2.17,<3.0.a0 - - _openmp_mutex >=4.5 - constrains: - - libgcc-ng ==15.2.0=*_18 - - libgomp 15.2.0 he0feb66_18 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 1041788 - timestamp: 1771378212382 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgcc-15.2.0-hcbb3090_18.conda - sha256: 1d9c4f35586adb71bcd23e31b68b7f3e4c4ab89914c26bed5f2859290be5560e - md5: 92df6107310b1fff92c4cc84f0de247b + run_exports: + weak: + - zstd >=1.5.7,<1.6.0a0 + size: 601375 + timestamp: 1764777111296 +- conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + sha256: a3967b937b9abf0f2a99f3173fa4630293979bd1644709d89580e7c62a544661 + md5: aaa2a381ccc56eac91d63b6c1240312f depends: - - _openmp_mutex - constrains: - - libgcc-ng ==15.2.0=*_18 - - libgomp 15.2.0 18 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL + - cpython + - python-gil + license: MIT + license_family: MIT purls: [] - size: 401974 - timestamp: 1771378877463 -- conda: https://conda.anaconda.org/conda-forge/win-64/libgcc-15.2.0-h8ee18e1_18.conda - sha256: da2c96563c76b8c601746f03e03ac75d2b4640fa2ee017cb23d6c9fc31f1b2c6 - md5: b085746891cca3bd2704a450a7b4b5ce + run_exports: {} + size: 8191 + timestamp: 1744137672556 +- conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.14.0-pyhcf101f3_0.conda + sha256: dc9c18c3766f82d88dbe6b25d25580e14fcc94d3c84524f610b713c2a72dd038 + md5: e679dcf15f30bf6e3f1bb3ba69bcf29c depends: - - _openmp_mutex >=4.5 - - libwinpthread >=12.0.0.r4.gg4f2fc60ca + - exceptiongroup >=1.0.2 + - idna >=2.8 + - python >=3.10 + - typing_extensions >=4.5 + - python constrains: - - libgcc-ng ==15.2.0=*_18 - - msys2-conda-epoch <0.0a0 - - libgomp 15.2.0 h8ee18e1_18 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 820022 - timestamp: 1771382190160 -- conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-14.3.0-hf649bbc_118.conda - sha256: 1abc6a81ee66e8ac9ac09a26e2d6ad7bba23f0a0cc3a6118654f036f9c0e1854 - md5: 06901733131833f5edd68cf3d9679798 - depends: - - __unix - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 3084533 - timestamp: 1771377786730 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda - sha256: e318a711400f536c81123e753d4c797a821021fb38970cebfb3f454126016893 - md5: d5e96b1ed75ca01906b3d2469b4ce493 + - trio >=0.32.0 + - uvloop >=0.22.1 + - winloop >=0.2.3 + license: MIT + license_family: MIT + purls: + - pkg:pypi/anyio?source=compressed-mapping + run_exports: {} + size: 161074 + timestamp: 1781616881402 +- conda: https://conda.anaconda.org/conda-forge/noarch/appnope-0.1.4-pyhd8ed1ab_1.conda + sha256: 8f032b140ea4159806e4969a68b4a3c0a7cab1ad936eb958a2b5ffe5335e19bf + md5: 54898d0f524c9dee622d44bbb081a8ab depends: - - libgcc 15.2.0 he0feb66_18 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 27526 - timestamp: 1771378224552 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_18.conda - sha256: d2c9fad338fd85e4487424865da8e74006ab2e2475bd788f624d7a39b2a72aee - md5: 9063115da5bc35fdc3e1002e69b9ef6e + - python >=3.9 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/appnope?source=hash-mapping + run_exports: {} + size: 10076 + timestamp: 1733332433806 +- conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda + sha256: bea62005badcb98b1ae1796ec5d70ea0fc9539e7d59708ac4e7d41e2f4bb0bad + md5: 8ac12aff0860280ee0cff7fa2cf63f3b depends: - - libgfortran5 15.2.0 h68bc16d_18 + - argon2-cffi-bindings + - python >=3.9 + - typing-extensions constrains: - - libgfortran-ng ==15.2.0=*_18 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 27523 - timestamp: 1771378269450 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-h07b0088_18.conda - sha256: 63f89087c3f0c8621c5c89ecceec1e56e5e1c84f65fc9c5feca33a07c570a836 - md5: 26981599908ed2205366e8fc91b37fc6 + - argon2_cffi ==999 + license: MIT + license_family: MIT + purls: + - pkg:pypi/argon2-cffi?source=hash-mapping + run_exports: {} + size: 18715 + timestamp: 1749017288144 +- conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda + sha256: 792da8131b1b53ff667bd6fc617ea9087b570305ccb9913deb36b8e12b3b5141 + md5: 85c4f19f377424eafc4ed7911b291642 depends: - - libgfortran5 15.2.0 hdae7583_18 - constrains: - - libgfortran-ng ==15.2.0=*_18 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 138973 - timestamp: 1771379054939 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_18.conda - sha256: 539b57cf50ec85509a94ba9949b7e30717839e4d694bc94f30d41c9d34de2d12 - md5: 646855f357199a12f02a87382d429b75 + - python >=3.10 + - python-dateutil >=2.7.0 + - python-tzdata + - python + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/arrow?source=hash-mapping + run_exports: {} + size: 113854 + timestamp: 1760831179410 +- conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda + sha256: ee4da0f3fe9d59439798ee399ef3e482791e48784873d546e706d0935f9ff010 + md5: 9673a61a297b00016442e022d689faa6 depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=15.2.0 + - python >=3.10 constrains: - - libgfortran 15.2.0 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 2482475 - timestamp: 1771378241063 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-hdae7583_18.conda - sha256: 91033978ba25e6a60fb86843cf7e1f7dc8ad513f9689f991c9ddabfaf0361e7e - md5: c4a6f7989cffb0544bfd9207b6789971 + - astroid >=2,<5 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/asttokens?source=hash-mapping + run_exports: {} + size: 28797 + timestamp: 1763410017955 +- conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.3.0-pyhcf101f3_0.conda + sha256: ea8486637cfb89dc26dc9559921640cd1d5fd37e5e02c33d85c94572139f2efe + md5: b85e84cb64c762569cc1a760c2327e0a depends: - - libgcc >=15.2.0 - constrains: - - libgfortran 15.2.0 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 598634 - timestamp: 1771378886363 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda - sha256: 21337ab58e5e0649d869ab168d4e609b033509de22521de1bfed0c031bfc5110 - md5: 239c5e9546c38a1e884d69effcf4c882 + - python >=3.10 + - typing_extensions >=4.0.0 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/async-lru?source=hash-mapping + run_exports: {} + size: 22949 + timestamp: 1773926359134 +- conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda + sha256: 1b6124230bb4e571b1b9401537ecff575b7b109cc3a21ee019f65e083b8399ab + md5: c6b0543676ecb1fb2d7643941fe375f2 depends: - - __glibc >=2.17,<3.0.a0 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 603262 - timestamp: 1771378117851 -- conda: https://conda.anaconda.org/conda-forge/win-64/libgomp-15.2.0-h8ee18e1_18.conda - sha256: 94981bc2e42374c737750895c6fdcfc43b7126c4fc788cad0ecc7281745931da - md5: 939fb173e2a4d4e980ef689e99b35223 + - python >=3.10 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/attrs?source=hash-mapping + run_exports: {} + size: 64927 + timestamp: 1773935801332 +- conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda + sha256: a14a9ad02101aab25570543a59c5193043b73dc311a25650134ed9e6cb691770 + md5: f1976ce927373500cc19d3c0b2c85177 depends: - - libwinpthread >=12.0.0.r4.gg4f2fc60ca + - python >=3.10 + - python constrains: - - msys2-conda-epoch <0.0a0 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 663864 - timestamp: 1771382118742 -- conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.12.2-default_h4379cf1_1000.conda - sha256: 8cdf11333a81085468d9aa536ebb155abd74adc293576f6013fc0c85a7a90da3 - md5: 3b576f6860f838f950c570f4433b086e - depends: - - libwinpthread >=12.0.0.r4.gg4f2fc60ca - - libxml2 - - libxml2-16 >=2.14.6 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 + - pytz >=2015.7 license: BSD-3-Clause license_family: BSD - purls: [] - size: 2411241 - timestamp: 1765104337762 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda - sha256: c467851a7312765447155e071752d7bf9bf44d610a5687e32706f480aad2833f - md5: 915f5995e94f60e9a4826e0b0920ee88 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - license: LGPL-2.1-only - purls: [] - size: 790176 - timestamp: 1754908768807 -- conda: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.18-hc1393d2_2.conda - sha256: 0dcdb1a5f01863ac4e8ba006a8b0dc1a02d2221ec3319b5915a1863254d7efa7 - md5: 64571d1dd6cdcfa25d0664a5950fdaa2 + purls: + - pkg:pypi/babel?source=hash-mapping + run_exports: {} + size: 7684321 + timestamp: 1772555330347 +- conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.6.0-py314h680f03e_0.conda + noarch: generic + sha256: 709cac7434d1c5a8828105036212a2a36022a07d807e89e2e99cac939c2d2526 + md5: 40d89d8546ad6e139e73ec8f6d56068b depends: - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: LGPL-2.1-only - purls: [] - size: 696926 - timestamp: 1754909290005 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libidn2-2.3.8-hfac485b_1.conda - sha256: cc38c900b9a20fe75e61cbb594e749c57a06d96510722f5ddfa309682062b065 - md5: 842a81de672ddcf476337c8bde3cad33 + - python >=3.14 + license: BSD-3-Clause AND MIT AND EPL-2.0 + purls: + - pkg:pypi/backports-zstd?source=compressed-mapping + run_exports: {} + size: 7526 + timestamp: 1781450817767 +- conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.15.0-pyha770c72_0.conda + sha256: aed4b9dcf68ec2a75e5645fed14d77fd884d38d2e52bfa6ef4b278d90cd88781 + md5: 3b261da3fe9b4168738712832410b022 depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libunistring >=0,<1.0a0 - license: LGPL-2.0-only - license_family: LGPL - purls: [] - size: 139036 - timestamp: 1760385590993 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.2-hb03c661_0.conda - sha256: cc9aba923eea0af8e30e0f94f2ad7156e2984d80d1e8e7fe6be5a1f257f0eb32 - md5: 8397539e3a0bbd1695584fb4f927485a + - python >=3.10 + - soupsieve >=1.2 + - typing-extensions + license: MIT + license_family: MIT + purls: + - pkg:pypi/beautifulsoup4?source=compressed-mapping + run_exports: {} + size: 92704 + timestamp: 1780853175566 +- conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.4.0-pyhcf101f3_0.conda + sha256: 0c786f3e571bd58ac73d730d06314716663884d848ae320de0b438fae5e0bea9 + md5: 93009c29cdd6f2500468f2502fff9209 depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 + - python >=3.10 + - webencodings + - python constrains: - - jpeg <0.0.0a - license: IJG AND BSD-3-Clause AND Zlib + - tinycss2 >=1.1.0,<1.5 + license: Apache-2.0 AND MIT + purls: + - pkg:pypi/bleach?source=compressed-mapping + run_exports: {} + size: 142246 + timestamp: 1780675823953 +- conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.4.0-hac0b51c_0.conda + sha256: ede77e412304cd080e23967352a7904932207d0167ecdccd6a9e210530942be6 + md5: 5f710eab1f3c4e773c75686f5e8e6481 + depends: + - bleach ==6.4.0 pyhcf101f3_0 + - tinycss2 + license: Apache-2.0 AND MIT purls: [] - size: 633710 - timestamp: 1762094827865 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.1.2-hc919400_0.conda - sha256: 6c061c56058bb10374daaef50e81b39cf43e8aee21f0037022c0c39c4f31872f - md5: f0695fbecf1006f27f4395d64bd0c4b8 + run_exports: {} + size: 4406 + timestamp: 1780675823953 +- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-h4c7d964_0.conda + sha256: 7f458e4a82514d7bebbfef23d92817794a16aaf1c748a15f04870d4fb49aeab2 + md5: b9696b2cf00dfeec138c70cee38ed192 depends: - - __osx >=11.0 - constrains: - - jpeg <0.0.0a - license: IJG AND BSD-3-Clause AND Zlib + - __win + license: ISC purls: [] - size: 551197 - timestamp: 1762095054358 -- conda: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.1.2-hfd05255_0.conda - sha256: 795e2d4feb2f7fc4a2c6e921871575feb32b8082b5760726791f080d1e2c2597 - md5: 56a686f92ac0273c0f6af58858a3f013 + run_exports: {} + size: 129352 + timestamp: 1781709016515 +- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda + sha256: f8e3c730fa14ee3f170493779f06522c4acf89169f43db4f039727709b6419cf + md5: a9965dd99f683c5f444428f896635716 depends: - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - constrains: - - jpeg <0.0.0a - license: IJG AND BSD-3-Clause AND Zlib + - __unix + license: ISC purls: [] - size: 841783 - timestamp: 1762094814336 -- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-5_h47877c9_openblas.conda - build_number: 5 - sha256: c723b6599fcd4c6c75dee728359ef418307280fa3e2ee376e14e85e5bbdda053 - md5: b38076eb5c8e40d0106beda6f95d7609 + run_exports: {} + size: 128866 + timestamp: 1781708962055 +- conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 + noarch: python + sha256: 561e6660f26c35d137ee150187d89767c988413c978e1b712d53f27ddf70ea17 + md5: 9b347a7ec10940d3f7941ff6c460b551 depends: - - libblas 3.11.0 5_h4a7cf45_openblas - constrains: - - blas 2.305 openblas - - liblapacke 3.11.0 5*_openblas - - libcblas 3.11.0 5*_openblas + - cached_property >=1.5.2,<1.5.3.0a0 license: BSD-3-Clause license_family: BSD purls: [] - size: 18200 - timestamp: 1765818857876 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.11.0-5_hd9741b5_openblas.conda - build_number: 5 - sha256: 735a6e6f7d7da6f718b6690b7c0a8ae4815afb89138aa5793abe78128e951dbb - md5: ca9d752201b7fa1225bca036ee300f2b + run_exports: {} + size: 4134 + timestamp: 1615209571450 +- conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 + sha256: 6dbf7a5070cc43d90a1e4c2ec0c541c69d8e30a0e25f50ce9f6e4a432e42c5d7 + md5: 576d629e47797577ab0f1b351297ef4a depends: - - libblas 3.11.0 5_h51639a9_openblas - constrains: - - libcblas 3.11.0 5*_openblas - - blas 2.305 openblas - - liblapacke 3.11.0 5*_openblas + - python >=3.6 license: BSD-3-Clause license_family: BSD - purls: [] - size: 18551 - timestamp: 1765819121855 -- conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.11.0-5_hf9ab0e9_mkl.conda - build_number: 5 - sha256: a2d33f5cc2b8a9042f2af6981c6733ab1a661463823eaa56595a9c58c0ab77e1 - md5: e62c42a4196dee97d20400612afcb2b1 + purls: + - pkg:pypi/cached-property?source=hash-mapping + run_exports: {} + size: 11065 + timestamp: 1615209567874 +- conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.6.17-pyhd8ed1ab_0.conda + sha256: 6c13620e458ba43278379d0cdacc30c497336bddfda81681fd50d114a65c702f + md5: c13824fedced67005d3832c152fe9c2f depends: - - libblas 3.11.0 5_hf2e6a31_mkl - constrains: - - libcblas 3.11.0 5*_mkl - - blas 2.305 mkl - - liblapacke 3.11.0 5*_mkl - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 80225 - timestamp: 1765819148014 -- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda - sha256: 755c55ebab181d678c12e49cced893598f2bab22d582fbbf4d8b83c18be207eb - md5: c7c83eecbb72d88b940c249af56c8b17 + - python >=3.10 + license: ISC + purls: + - pkg:pypi/certifi?source=compressed-mapping + run_exports: {} + size: 133877 + timestamp: 1781719949728 +- conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda + sha256: 3f9483d62ce24ecd063f8a5a714448445dc8d9e201147c46699fc0033e824457 + md5: a9167b9571f3baa9d448faa2139d1089 depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - constrains: - - xz 5.8.2.* - license: 0BSD - purls: [] - size: 113207 - timestamp: 1768752626120 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda - sha256: 7bfc7ffb2d6a9629357a70d4eadeadb6f88fa26ebc28f606b1c1e5e5ed99dc7e - md5: 009f0d956d7bfb00de86901d16e486c7 + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/charset-normalizer?source=hash-mapping + run_exports: {} + size: 58872 + timestamp: 1775127203018 +- conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + sha256: ab29d57dc70786c1269633ba3dff20288b81664d3ff8d21af995742e2bb03287 + md5: 962b9857ee8e7018c22f2776ffa0b2d7 depends: - - __osx >=11.0 - constrains: - - xz 5.8.2.* - license: 0BSD - purls: [] - size: 92242 - timestamp: 1768752982486 -- conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.2-hfd05255_0.conda - sha256: f25bf293f550c8ed2e0c7145eb404324611cfccff37660869d97abf526eb957c - md5: ba0bfd4c3cf73f299ffe46ff0eaeb8e3 + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/colorama?source=hash-mapping + run_exports: {} + size: 27011 + timestamp: 1733218222191 +- conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda + sha256: 576a44729314ad9e4e5ebe055fbf48beb8116b60e58f9070278985b2b634f212 + md5: 2da13f2b299d8e1995bafbbe9689a2f7 depends: - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - constrains: - - xz 5.8.2.* - license: 0BSD - purls: [] - size: 106169 - timestamp: 1768752763559 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libmicrohttpd-1.0.2-hc2fc477_0.conda - sha256: 6b21e0f3d1577bbe10f27003212f0b8c9a881d99faa01a83476311730aed5c9d - md5: a02cb80c806b7b768e1d60170f63375d + - python >=3.9 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/comm?source=hash-mapping + run_exports: {} + size: 14690 + timestamp: 1753453984907 +- conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.6-py314hd8ed1ab_100.conda + noarch: generic + sha256: 7a548856ef5307890a8cadfc196655117658f8c24589ce175caa4c1c2ded9d13 + md5: b28fe35fd43d5f425c0dccbe5b5039fd depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - gnutls >=3.8.9,<3.9.0a0 - license: LGPL-2.0-or-later - license_family: LGPL + - python >=3.14,<3.15.0a0 + - python_abi * *_cp314 + license: Python-2.0 purls: [] - size: 286166 - timestamp: 1752566614604 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - sha256: fe171ed5cf5959993d43ff72de7596e8ac2853e9021dec0344e583734f1e0843 - md5: 2c21e66f50753a083cbe6b80f38268fa + run_exports: {} + size: 49333 + timestamp: 1781254618863 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-64-12.9.27-ha770c72_0.conda + sha256: 2ee3b9564ca326226e5cda41d11b251482df8e7c757e333d28ec75213c75d126 + md5: 87ff6381e33b76e5b9b179a2cdd005ec depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - license: BSD-2-Clause - license_family: BSD + - cuda-version >=12.9,<12.10.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 92400 - timestamp: 1769482286018 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda - sha256: 1089c7f15d5b62c622625ec6700732ece83be8b705da8c6607f4dabb0c4bd6d2 - md5: 57c4be259f5e0b99a5983799a228ae55 + run_exports: {} + size: 1150650 + timestamp: 1746189825236 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-64-13.3.3.3.1-ha770c72_0.conda + sha256: 66d95390d49b989f550ede42dfb3f6e82b6b729493f0843e13cd041a91682730 + md5: 56501e8a53d75afef7a2e3ca723d7569 depends: - - __osx >=11.0 - license: BSD-2-Clause - license_family: BSD + - cuda-version >=13.3,<13.4.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 73690 - timestamp: 1769482560514 -- conda: https://conda.anaconda.org/conda-forge/win-64/libmpdec-4.0.0-hfd05255_1.conda - sha256: 40dcd0b9522a6e0af72a9db0ced619176e7cfdb114855c7a64f278e73f8a7514 - md5: e4a9fc2bba3b022dad998c78856afe47 + run_exports: {} + size: 1472271 + timestamp: 1779895496841 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-crt-dev_linux-64-12.9.86-ha770c72_2.conda + sha256: e6257534c4b4b6b8a1192f84191c34906ab9968c92680fa09f639e7846a87304 + md5: 79d280de61e18010df5997daea4743df depends: - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: BSD-2-Clause - license_family: BSD + - cuda-version >=12.9,<12.10.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 89411 - timestamp: 1769482314283 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.67.0-had1ee68_0.conda - sha256: a4a7dab8db4dc81c736e9a9b42bdfd97b087816e029e221380511960ac46c690 - md5: b499ce4b026493a13774bcf0f4c33849 + run_exports: {} + size: 94239 + timestamp: 1753975242354 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-crt-dev_linux-64-13.3.33-ha770c72_0.conda + sha256: bd3381629964d1d00245ae9e4a7918c35e4967d216a34aad013f0ce387065b05 + md5: 0c95fd4e823baffe0f8885f4eef00ce7 depends: - - __glibc >=2.17,<3.0.a0 - - c-ares >=1.34.5,<2.0a0 - - libev >=4.33,<4.34.0a0 - - libev >=4.33,<5.0a0 - - libgcc >=14 - - libstdcxx >=14 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.5.2,<4.0a0 - license: MIT - license_family: MIT + - cuda-version >=13.3,<13.4.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 666600 - timestamp: 1756834976695 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libnvptxcompiler-dev-12.9.86-ha770c72_2.conda - sha256: 1e7a7b34f8639a5feb75ba864127059e4d83edfe1a516547f0dbb9941e7b8f8b - md5: 3fd926c321c6dbf386aa14bd8b125bfb + run_exports: {} + size: 116655 + timestamp: 1779905079263 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-dev_linux-64-12.9.79-h3f2d84a_0.conda + sha256: ffe86ed0144315b276f18020d836c8ef05bf971054cf7c3eb167af92494080d5 + md5: 86e40eb67d83f1a58bdafdd44e5a77c6 depends: + - cuda-cccl_linux-64 + - cuda-cudart-static_linux-64 + - cuda-cudart_linux-64 - cuda-version >=12.9,<12.10.0a0 - - libnvptxcompiler-dev_linux-64 12.9.86 ha770c72_2 license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 27046 - timestamp: 1753975516342 -- conda: https://conda.anaconda.org/conda-forge/noarch/libnvptxcompiler-dev_linux-64-12.9.86-ha770c72_2.conda - sha256: 17952c32eac197a59c119fdf3fb6f08c6a29c225a80bae141ac904ad212b87dd - md5: a66a909acf08924aced622903832a937 + run_exports: + weak: + - cuda-cudart >=12.9.79,<13.0a0 + size: 389140 + timestamp: 1749218427266 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-dev_linux-64-13.3.29-h376f20c_0.conda + sha256: d95f1b404119e3f72edb7ac5dbd4443e2d7d040f7d68c3905c0dd7ad78f11311 + md5: 4165013e8d24dd61774458e6f2e36c32 depends: - - cuda-version >=12.9,<12.10.0a0 + - cuda-cccl_linux-64 + - cuda-cudart-static_linux-64 + - cuda-cudart_linux-64 + - cuda-version >=13.3,<13.4.0a0 license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 14422867 - timestamp: 1753975387297 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_4.conda - sha256: 199d79c237afb0d4780ccd2fbf829cea80743df60df4705202558675e07dd2c5 - md5: be43915efc66345cccb3c310b6ed0374 + run_exports: + weak: + - cuda-cudart >=13.3.29,<14.0a0 + size: 405020 + timestamp: 1779898430134 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-static_linux-64-12.9.79-h3f2d84a_0.conda + sha256: d435f8a19b59b52ce460ee3a6bfd877288a0d1d645119a6ba60f1c3627dc5032 + md5: b87bf315d81218dd63eb46cc1eaef775 depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libgfortran - - libgfortran5 >=14.3.0 - constrains: - - openblas >=0.3.30,<0.3.31.0a0 - license: BSD-3-Clause - license_family: BSD + - cuda-version >=12.9,<12.10.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 5927939 - timestamp: 1763114673331 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.30-openmp_ha158390_4.conda - sha256: ebbbc089b70bcde87c4121a083c724330f02a690fb9d7c6cd18c30f1b12504fa - md5: a6f6d3a31bb29e48d37ce65de54e2df0 + run_exports: {} + size: 1148889 + timestamp: 1749218381225 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-static_linux-64-13.3.29-h376f20c_0.conda + sha256: fa920f2c2154ea2ace2d55457e43af8e7bfc2c94fa5ec7276792ad411d1011d1 + md5: 7d4fe2a79d971522b3ad68b772c197eb depends: - - __osx >=11.0 - - libgfortran - - libgfortran5 >=14.3.0 - - llvm-openmp >=19.1.7 - constrains: - - openblas >=0.3.30,<0.3.31.0a0 - license: BSD-3-Clause - license_family: BSD + - cuda-version >=13.3,<13.4.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 4284132 - timestamp: 1768547079205 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.55-h421ea60_0.conda - sha256: 36ade759122cdf0f16e2a2562a19746d96cf9c863ffaa812f2f5071ebbe9c03c - md5: 5f13ffc7d30ffec87864e678df9957b4 + run_exports: {} + size: 1126340 + timestamp: 1779898412056 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart_linux-64-12.9.79-h3f2d84a_0.conda + sha256: 6cde0ace2b995b49d0db2eefb7bc30bf00ffc06bb98ef7113632dec8f8907475 + md5: 64508631775fbbf9eca83c84b1df0cae depends: - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - libzlib >=1.3.1,<2.0a0 - license: zlib-acknowledgement + - cuda-version >=12.9,<12.10.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 317669 - timestamp: 1770691470744 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.55-h132b30e_0.conda - sha256: 7a4fd29a6ee2d7f7a6e610754dfdf7410ed08f40d8d8b488a27bc0f9981d5abb - md5: 871dc88b0192ac49b6a5509932c31377 + run_exports: {} + size: 197249 + timestamp: 1749218394213 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart_linux-64-13.3.29-h376f20c_0.conda + sha256: a86028f94acf37b17ca2280734ae9dcc407cdf68a9c400102d323a3b15e52f0b + md5: 10949c6dfe9157fedb19170bd6e0b835 depends: - - __osx >=11.0 - - libzlib >=1.3.1,<2.0a0 - license: zlib-acknowledgement + - cuda-version >=13.3,<13.4.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 288950 - timestamp: 1770691485950 -- conda: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.55-h7351971_0.conda - sha256: db23f281fa80597a0dc0445b18318346862602d7081ed76244df8cc4418d6d68 - md5: 43f47a9151b9b8fc100aeefcf350d1a0 + run_exports: {} + size: 206064 + timestamp: 1779898416941 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-driver-dev_linux-64-12.9.79-h3f2d84a_0.conda + sha256: a15574d966e73135a79d5e6570c87e13accdb44bd432449b5deea71644ad442c + md5: d411828daa36ac84eab210ba3bbe5a64 depends: - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - - ucrt >=10.0.20348.0 - - libzlib >=1.3.1,<2.0a0 - license: zlib-acknowledgement + - cuda-version >=12.9,<12.10.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 383155 - timestamp: 1770691504832 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-14.3.0-h8f1669f_18.conda - sha256: e03ed186eefb46d7800224ad34bad1268c9d19ecb8f621380a50601c6221a4a7 - md5: ad3a0e2dc4cce549b2860e2ef0e6d75b + run_exports: {} + size: 37714 + timestamp: 1749218405324 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-driver-dev_linux-64-13.3.29-h376f20c_0.conda + sha256: 40e9c9f18311719c249bd8b81e73f1c3f56ef5b31db97ec393a5ab5373264d5e + md5: 50da0977db20840628e946e4bd3b2ecb depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14.3.0 - - libstdcxx >=14.3.0 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL + - cuda-version >=13.3,<13.4.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 7949259 - timestamp: 1771377982207 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.21-h280c20c_3.conda - sha256: 64e5c80cbce4680a2d25179949739a6def695d72c40ca28f010711764e372d97 - md5: 7af961ef4aa2c1136e11dd43ded245ab + run_exports: {} + size: 39968 + timestamp: 1779898421393 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvcc-dev_linux-64-12.9.86-he91c749_2.conda + sha256: a1672a34439a72869de9e011e935d41b62fc8dfb1a2700e85ed8a7a129b79981 + md5: 19d4e090217f0ea89d30bedb7461c048 depends: - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - license: ISC + - cuda-crt-dev_linux-64 12.9.86 ha770c72_2 + - cuda-nvvm-dev_linux-64 12.9.86 ha770c72_2 + - cuda-version >=12.9,<12.10.0a0 + - libgcc >=6 + - libnvptxcompiler-dev_linux-64 12.9.86 ha770c72_2 + constrains: + - gcc_impl_linux-64 >=6,<15.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 277661 - timestamp: 1772479381288 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.21-h1a92334_3.conda - sha256: df603472ea1ebd8e7d4fb71e4360fe48d10b11c240df51c129de1da2ff9e8227 - md5: 7cc5247987e6d115134ebab15186bc13 + run_exports: {} + size: 28121 + timestamp: 1753975535813 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvcc-dev_linux-64-13.3.33-he91c749_0.conda + sha256: 3d40ec1fb76b9d0d13cca8761e49889f797a57cfa3a01dd0f7b762a0e0efae72 + md5: c741bff0f44f3028f5359be3578c8486 depends: - - __osx >=11.0 - license: ISC + - cuda-crt-dev_linux-64 13.3.33 ha770c72_0 + - cuda-nvvm-dev_linux-64 13.3.33 ha770c72_0 + - cuda-version >=13.3,<13.4.0a0 + - libgcc >=6 + - libnvptxcompiler-dev_linux-64 13.3.33 ha770c72_0 + constrains: + - gcc_impl_linux-64 >=6,<16.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 248039 - timestamp: 1772479570912 -- conda: https://conda.anaconda.org/conda-forge/win-64/libsodium-1.0.21-h6a83c73_3.conda - sha256: d915f4fa8ebbf237c7a6e511ed458f2cfdc7c76843a924740318a15d0dd33d6d - md5: da2aa614d16a795b3007b6f4a1318a81 + run_exports: {} + size: 29519 + timestamp: 1779905228399 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-64-12.9.86-ha770c72_2.conda + sha256: 522722dcaffd133e0c7500c69dc70e21ac34d6762dcbaabfe847439f944028f0 + md5: 7b386291414c7eea113d25ac28a33772 depends: - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - - ucrt >=10.0.20348.0 - license: ISC + - cuda-version >=12.9,<12.10.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 276860 - timestamp: 1772479407566 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda - sha256: d716847b7deca293d2e49ed1c8ab9e4b9e04b9d780aea49a97c26925b28a7993 - md5: fd893f6a3002a635b5e50ceb9dd2c0f4 + run_exports: {} + size: 27096 + timestamp: 1753975261562 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-64-13.3.33-ha770c72_0.conda + sha256: a7eada853603adf6bed7022384b2b4ddb6d27b348a23a271f75caefa141ea954 + md5: b1b8dcad428089c6ddc16e0f4ac2631d depends: - - __glibc >=2.17,<3.0.a0 - - icu >=78.2,<79.0a0 - - libgcc >=14 - - libzlib >=1.3.1,<2.0a0 - license: blessing + - cuda-version >=13.3,<13.4.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 951405 - timestamp: 1772818874251 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.52.0-h1ae2325_0.conda - sha256: beb0fd5594d6d7c7cd42c992b6bb4d66cbb39d6c94a8234f15956da99a04306c - md5: f6233a3fddc35a2ec9f617f79d6f3d71 - depends: - - __osx >=11.0 - - icu >=78.2,<79.0a0 - - libzlib >=1.3.1,<2.0a0 - license: blessing + run_exports: {} + size: 28476 + timestamp: 1779905085657 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-12.9-h4f385c5_3.conda + sha256: 5f5f428031933f117ff9f7fcc650e6ea1b3fef5936cf84aa24af79167513b656 + md5: b6d5d7f1c171cbd228ea06b556cfa859 + constrains: + - cudatoolkit 12.9|12.9.* + - __cuda >=12 + license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 918420 - timestamp: 1772819478684 -- conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.52.0-hf5d6505_0.conda - sha256: 5fccf1e4e4062f8b9a554abf4f9735a98e70f82e2865d0bfdb47b9de94887583 - md5: 8830689d537fda55f990620680934bb1 - depends: - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: blessing + run_exports: {} + size: 21578 + timestamp: 1746134436166 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-13.3-hcbadf70_3.conda + sha256: bd8ee668f416bdd0f6548b2413550ae83d3834665a5be869a2daf99233ec526e + md5: 0fd72afdcc74560b80eb74b78767c454 + constrains: + - __cuda >=13 + - cudatoolkit 13.3|13.3.* + license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 1297302 - timestamp: 1772818899033 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda - sha256: fa39bfd69228a13e553bd24601332b7cfeb30ca11a3ca50bb028108fe90a7661 - md5: eecce068c7e4eddeb169591baac20ac4 + run_exports: {} + size: 22083 + timestamp: 1779891651771 +- conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda + sha256: bb47aec5338695ff8efbddbc669064a3b10fe34ad881fb8ad5d64fbfa6910ed1 + md5: 4c2a8fef270f6c69591889b93f9f55c1 depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.5.0,<4.0a0 + - python >=3.10 + - python license: BSD-3-Clause license_family: BSD - purls: [] - size: 304790 - timestamp: 1745608545575 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda - sha256: 78668020064fdaa27e9ab65cd2997e2c837b564ab26ce3bf0e58a2ce1a525c6e - md5: 1b08cd684f34175e4514474793d44bcb + purls: + - pkg:pypi/cycler?source=hash-mapping + run_exports: {} + size: 14778 + timestamp: 1764466758386 +- conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.3.1-pyhd8ed1ab_0.conda + sha256: 430bd9d731b265f0bedb3183ac3ecfaa1656390c092b6e864ff8cc1229843c8c + md5: 61dcf784d59ef0bd62c57d982b154ace depends: - - __glibc >=2.17,<3.0.a0 - - libgcc 15.2.0 he0feb66_18 - constrains: - - libstdcxx-ng ==15.2.0=*_18 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 5852330 - timestamp: 1771378262446 -- conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-14.3.0-h9f08a49_118.conda - sha256: b1c3824769b92a1486bf3e2cc5f13304d83ae613ea061b7bc47bb6080d6dfdba - md5: 865a399bce236119301ebd1532fced8d + - python >=3.10 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/decorator?source=compressed-mapping + run_exports: {} + size: 16102 + timestamp: 1779115228886 +- conda: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 + sha256: 9717a059677553562a8f38ff07f3b9f61727bd614f505658b0a5ecbcf8df89be + md5: 961b3a227b437d82ad7054484cfa71b2 depends: - - __unix - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 20171098 - timestamp: 1771377827750 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda - sha256: 3c902ffd673cb3c6ddde624cdb80f870b6c835f8bf28384b0016e7d444dd0145 - md5: 6235adb93d064ecdf3d44faee6f468de - depends: - - libstdcxx 15.2.0 h934c35e_18 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 27575 - timestamp: 1771378314494 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libtasn1-4.21.0-hb03c661_0.conda - sha256: a3f0c33ef567eb2e3a22d7fea0717a294a5fea4964478aa06b467ce1c93bec38 - md5: 0ffe6217a3d09398155d32a2ddb41251 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - license: LGPL-2.1-or-later - purls: [] - size: 116738 - timestamp: 1768297813301 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda - sha256: e5f8c38625aa6d567809733ae04bb71c161a42e44a9fa8227abe61fa5c60ebe0 - md5: cd5a90476766d53e901500df9215e927 - depends: - - __glibc >=2.17,<3.0.a0 - - lerc >=4.0.0,<5.0a0 - - libdeflate >=1.25,<1.26.0a0 - - libgcc >=14 - - libjpeg-turbo >=3.1.0,<4.0a0 - - liblzma >=5.8.1,<6.0a0 - - libstdcxx >=14 - - libwebp-base >=1.6.0,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - zstd >=1.5.7,<1.6.0a0 - license: HPND - purls: [] - size: 435273 - timestamp: 1762022005702 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.1-h4030677_1.conda - sha256: e9248077b3fa63db94caca42c8dbc6949c6f32f94d1cafad127f9005d9b1507f - md5: e2a72ab2fa54ecb6abab2b26cde93500 - depends: - - __osx >=11.0 - - lerc >=4.0.0,<5.0a0 - - libcxx >=19 - - libdeflate >=1.25,<1.26.0a0 - - libjpeg-turbo >=3.1.0,<4.0a0 - - liblzma >=5.8.1,<6.0a0 - - libwebp-base >=1.6.0,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - zstd >=1.5.7,<1.6.0a0 - license: HPND - purls: [] - size: 373892 - timestamp: 1762022345545 -- conda: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.1-h8f73337_1.conda - sha256: f1b8cccaaeea38a28b9cd496694b2e3d372bb5be0e9377c9e3d14b330d1cba8a - md5: 549845d5133100142452812feb9ba2e8 + - python >=3.6 + license: PSF-2.0 + license_family: PSF + purls: + - pkg:pypi/defusedxml?source=hash-mapping + run_exports: {} + size: 24062 + timestamp: 1615232388757 +- conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + sha256: ee6cf346d017d954255bbcbdb424cddea4d14e4ed7e9813e429db1d795d01144 + md5: 8e662bd460bda79b1ea39194e3c4c9ab depends: - - lerc >=4.0.0,<5.0a0 - - libdeflate >=1.25,<1.26.0a0 - - libjpeg-turbo >=3.1.0,<4.0a0 - - liblzma >=5.8.1,<6.0a0 - - libzlib >=1.3.1,<2.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - - zstd >=1.5.7,<1.6.0a0 - license: HPND - purls: [] - size: 993166 - timestamp: 1762022118895 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libunistring-0.9.10-h7f98852_0.tar.bz2 - sha256: e88c45505921db29c08df3439ddb7f771bbff35f95e7d3103bf365d5d6ce2a6d - md5: 7245a044b4a1980ed83196176b78b73a + - python >=3.10 + - typing_extensions >=4.6.0 + license: MIT and PSF-2.0 + purls: + - pkg:pypi/exceptiongroup?source=hash-mapping + run_exports: {} + size: 21333 + timestamp: 1763918099466 +- conda: https://conda.anaconda.org/conda-forge/noarch/execnet-2.1.2-pyhd8ed1ab_0.conda + sha256: 1acc6a420efc5b64c384c1f35f49129966f8a12c93b4bb2bdc30079e5dc9d8a8 + md5: a57b4be42619213a94f31d2c69c5dda7 depends: - - libgcc-ng >=9.3.0 - license: GPL-3.0-only OR LGPL-3.0-only - purls: [] - size: 1433436 - timestamp: 1626955018689 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libunwind-1.8.3-h65a8314_0.conda - sha256: 71c8b9d5c72473752a0bb6e91b01dd209a03916cb71f36cc6a564e3a2a132d7a - md5: e179a69edd30d75c0144d7a380b88f28 + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/execnet?source=hash-mapping + run_exports: {} + size: 39499 + timestamp: 1762974150770 +- conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda + sha256: 210c8165a58fdbf16e626aac93cc4c14dbd551a01d1516be5ecad795d2422cad + md5: ff9efb7f7469aed3c4a8106ffa29593c depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libstdcxx >=14 + - python >=3.10 license: MIT license_family: MIT - purls: [] - size: 75995 - timestamp: 1757032240102 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - sha256: 1a7539cfa7df00714e8943e18de0b06cceef6778e420a5ee3a2a145773758aee - md5: db409b7c1720428638e7c0d509d3e1b5 + purls: + - pkg:pypi/executing?source=hash-mapping + run_exports: {} + size: 30753 + timestamp: 1756729456476 +- conda: https://conda.anaconda.org/conda-forge/noarch/filterpy-1.4.5-pyhd8ed1ab_2.conda + sha256: dc81e6283bd2cdc5e8a3e5c88527870b2992a8f71f25ddec9dd995223c08aed8 + md5: 261bd75b03d09c5eeea5aedf7365e811 depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 + - matplotlib-base + - numpy + - python >=3.9 + - scipy + license: MIT + license_family: MIT + purls: + - pkg:pypi/filterpy?source=hash-mapping + run_exports: {} + size: 72868 + timestamp: 1739826907157 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + sha256: 58d7f40d2940dd0a8aa28651239adbf5613254df0f75789919c4e6762054403b + md5: 0c96522c6bdaed4b1566d11387caaf45 license: BSD-3-Clause license_family: BSD purls: [] - size: 40311 - timestamp: 1766271528534 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda - sha256: 3aed21ab28eddffdaf7f804f49be7a7d701e8f0e46c856d801270b470820a37b - md5: aea31d2e5b1091feca96fcfe945c3cf9 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - constrains: - - libwebp 1.6.0 - license: BSD-3-Clause - license_family: BSD + run_exports: {} + size: 397370 + timestamp: 1566932522327 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + sha256: c52a29fdac682c20d252facc50f01e7c2e7ceac52aa9817aaf0bb83f7559ec5c + md5: 34893075a5c9e55cdafac56607368fc6 + license: OFL-1.1 + license_family: Other purls: [] - size: 429011 - timestamp: 1752159441324 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.6.0-h07db88b_0.conda - sha256: a4de3f371bb7ada325e1f27a4ef7bcc81b2b6a330e46fac9c2f78ac0755ea3dd - md5: e5e7d467f80da752be17796b87fe6385 + run_exports: {} + size: 96530 + timestamp: 1620479909603 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + sha256: 00925c8c055a2275614b4d983e1df637245e19058d79fc7dd1a93b8d9fb4b139 + md5: 4d59c254e01d9cde7957100457e2d5fb + license: OFL-1.1 + license_family: Other + purls: [] + run_exports: {} + size: 700814 + timestamp: 1620479612257 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + sha256: 2821ec1dc454bd8b9a31d0ed22a7ce22422c0aef163c59f49dfdf915d0f0ca14 + md5: 49023d73832ef61042f6a237cb2687e7 + license: LicenseRef-Ubuntu-Font-Licence-Version-1.0 + license_family: Other + purls: [] + run_exports: {} + size: 1620504 + timestamp: 1727511233259 +- conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + sha256: a997f2f1921bb9c9d76e6fa2f6b408b7fa549edd349a77639c9fe7a23ea93e61 + md5: fee5683a3f04bd15cbd8318b096a27ab depends: - - __osx >=11.0 - constrains: - - libwebp 1.6.0 + - fonts-conda-forge license: BSD-3-Clause license_family: BSD purls: [] - size: 294974 - timestamp: 1752159906788 -- conda: https://conda.anaconda.org/conda-forge/win-64/libwebp-base-1.6.0-h4d5522a_0.conda - sha256: 7b6316abfea1007e100922760e9b8c820d6fc19df3f42fb5aca684cfacb31843 - md5: f9bbae5e2537e3b06e0f7310ba76c893 - depends: - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - constrains: - - libwebp 1.6.0 + run_exports: {} + size: 3667 + timestamp: 1566974674465 +- conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda + sha256: 54eea8469786bc2291cc40bca5f46438d3e062a399e8f53f013b6a9f50e98333 + md5: a7970cd949a077b7cb9696379d338681 + depends: + - font-ttf-ubuntu + - font-ttf-inconsolata + - font-ttf-dejavu-sans-mono + - font-ttf-source-code-pro license: BSD-3-Clause license_family: BSD purls: [] - size: 279176 - timestamp: 1752159543911 -- conda: https://conda.anaconda.org/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_10.conda - sha256: 0fccf2d17026255b6e10ace1f191d0a2a18f2d65088fd02430be17c701f8ffe0 - md5: 8a86073cf3b343b87d03f41790d8b4e5 - depends: - - ucrt - constrains: - - pthreads-win32 <0.0a0 - - msys2-conda-epoch <0.0a0 - license: MIT AND BSD-3-Clause-Clear - purls: [] - size: 36621 - timestamp: 1759768399557 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda - sha256: 666c0c431b23c6cec6e492840b176dde533d48b7e6fb8883f5071223433776aa - md5: 92ed62436b625154323d40d5f2f11dd7 + run_exports: {} + size: 4059 + timestamp: 1762351264405 +- conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.63.0-pyh7db6752_0.conda + sha256: c9752235f1ff7061d834e5e4a3d0adf71ebeeff2b3fad82dab607edce7f70c91 + md5: 0509ee74d95e5b98eb6fe2a47760e399 depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - pthread-stubs - - xorg-libxau >=1.0.11,<2.0a0 - - xorg-libxdmcp + - brotli + - munkres + - python >=3.10 + - unicodedata2 >=15.1.0 + track_features: + - fonttools_no_compile license: MIT license_family: MIT - purls: [] - size: 395888 - timestamp: 1727278577118 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda - sha256: bd3816218924b1e43b275863e21a3e13a5db4a6da74cca8e60bc3c213eb62f71 - md5: af523aae2eca6dfa1c8eec693f5b9a79 + purls: + - pkg:pypi/fonttools?source=hash-mapping + run_exports: {} + size: 846038 + timestamp: 1778770337113 +- conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_1.conda + sha256: 2509992ec2fd38ab27c7cdb42cf6cadc566a1cc0d1021a2673475d9fa87c6276 + md5: d3549fd50d450b6d9e7dddff25dd2110 depends: - - __osx >=11.0 - - pthread-stubs - - xorg-libxau >=1.0.11,<2.0a0 - - xorg-libxdmcp - license: MIT - license_family: MIT - purls: [] - size: 323658 - timestamp: 1727278733917 -- conda: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.17.0-h0e4246c_0.conda - sha256: 08dec73df0e161c96765468847298a420933a36bc4f09b50e062df8793290737 - md5: a69bbf778a462da324489976c84cfc8c + - cached-property >=1.3.0 + - python >=3.9,<4 + license: MPL-2.0 + license_family: MOZILLA + purls: + - pkg:pypi/fqdn?source=hash-mapping + run_exports: {} + size: 16705 + timestamp: 1733327494780 +- conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda + sha256: 96cac6573fd35ae151f4d6979bab6fbc90cb6b1fb99054ba19eb075da9822fcb + md5: b8993c19b0c32a2f7b66cbb58ca27069 depends: - - libgcc >=13 - - libwinpthread >=12.0.0.r4.gg4f2fc60ca - - pthread-stubs - - ucrt >=10.0.20348.0 - - xorg-libxau >=1.0.11,<2.0a0 - - xorg-libxdmcp + - python >=3.10 + - typing_extensions + - python license: MIT license_family: MIT - purls: [] - size: 1208687 - timestamp: 1727279378819 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.2-he237659_0.conda - sha256: 275c324f87bda1a3b67d2f4fcc3555eeff9e228a37655aa001284a7ceb6b0392 - md5: e49238a1609f9a4a844b09d9926f2c3d + purls: + - pkg:pypi/h11?source=hash-mapping + run_exports: {} + size: 39069 + timestamp: 1767729720872 +- conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + sha256: 84c64443368f84b600bfecc529a1194a3b14c3656ee2e832d15a20e0329b6da3 + md5: 164fc43f0b53b6e3a7bc7dce5e4f1dc9 depends: - - __glibc >=2.17,<3.0.a0 - - icu >=78.2,<79.0a0 - - libgcc >=14 - - libiconv >=1.18,<2.0a0 - - liblzma >=5.8.2,<6.0a0 - - libxml2-16 2.15.2 hca6bf5a_0 - - libzlib >=1.3.1,<2.0a0 + - python >=3.10 + - hyperframe >=6.1,<7 + - hpack >=4.1,<5 + - python license: MIT license_family: MIT - purls: [] - size: 45968 - timestamp: 1772704614539 -- conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.2-h5d26750_0.conda - sha256: f905eb7046987c336122121759e7f09144729f6898f48cd06df2a945b86998d8 - md5: 1007e1bfe181a2aee214779ee7f13d30 - depends: - - libiconv >=1.18,<2.0a0 - - liblzma >=5.8.2,<6.0a0 - - libxml2-16 2.15.2 h692994f_0 - - libzlib >=1.3.1,<2.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - constrains: - - icu <0.0a0 - license: MIT - license_family: MIT - purls: [] - size: 43681 - timestamp: 1772704748950 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.2-hca6bf5a_0.conda - sha256: 08d2b34b49bec9613784f868209bb7c3bb8840d6cf835ff692e036b09745188c - md5: f3bc152cb4f86babe30f3a4bf0dbef69 - depends: - - __glibc >=2.17,<3.0.a0 - - icu >=78.2,<79.0a0 - - libgcc >=14 - - libiconv >=1.18,<2.0a0 - - liblzma >=5.8.2,<6.0a0 - - libzlib >=1.3.1,<2.0a0 - constrains: - - libxml2 2.15.2 - license: MIT - license_family: MIT - purls: [] - size: 557492 - timestamp: 1772704601644 -- conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.2-h692994f_0.conda - sha256: b8c71b3b609c7cfe17f3f2a47c75394d7b30acfb8b34ad7a049ea8757b4d33df - md5: e365238134188e42ed36ee996159d482 + purls: + - pkg:pypi/h2?source=hash-mapping + run_exports: {} + size: 95967 + timestamp: 1756364871835 +- conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + sha256: 6ad78a180576c706aabeb5b4c8ceb97c0cb25f1e112d76495bff23e3779948ba + md5: 0a802cb9888dd14eeefc611f05c40b6e depends: - - libiconv >=1.18,<2.0a0 - - liblzma >=5.8.2,<6.0a0 - - libzlib >=1.3.1,<2.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - constrains: - - libxml2 2.15.2 - - icu <0.0a0 + - python >=3.9 license: MIT license_family: MIT - purls: [] - size: 520078 - timestamp: 1772704728534 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - sha256: d4bfe88d7cb447768e31650f06257995601f89076080e76df55e3112d4e47dc4 - md5: edb0dca6bc32e4f4789199455a1dbeb8 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - constrains: - - zlib 1.3.1 *_2 - license: Zlib - license_family: Other - purls: [] - size: 60963 - timestamp: 1727963148474 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - sha256: ce34669eadaba351cd54910743e6a2261b67009624dbc7daeeafdef93616711b - md5: 369964e85dc26bfe78f41399b366c435 + purls: + - pkg:pypi/hpack?source=hash-mapping + run_exports: {} + size: 30731 + timestamp: 1737618390337 +- conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda + sha256: 04d49cb3c42714ce533a8553986e1642d0549a05dc5cc48e0d43ff5be6679a5b + md5: 4f14640d58e2cc0aa0819d9d8ba125bb depends: - - __osx >=11.0 - constrains: - - zlib 1.3.1 *_2 - license: Zlib - license_family: Other - purls: [] - size: 46438 - timestamp: 1727963202283 -- conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda - sha256: ba945c6493449bed0e6e29883c4943817f7c79cbff52b83360f7b341277c6402 - md5: 41fbfac52c601159df6c01f875de31b9 + - python >=3.9 + - h11 >=0.16 + - h2 >=3,<5 + - sniffio 1.* + - anyio >=4.0,<5.0 + - certifi + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/httpcore?source=hash-mapping + run_exports: {} + size: 49483 + timestamp: 1745602916758 +- conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda + sha256: cd0f1de3697b252df95f98383e9edb1d00386bfdd03fdf607fa42fe5fcb09950 + md5: d6989ead454181f4f9bc987d3dc4e285 depends: - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - constrains: - - zlib 1.3.1 *_2 - license: Zlib - license_family: Other - purls: [] - size: 55476 - timestamp: 1727963768015 -- conda: https://conda.anaconda.org/conda-forge/noarch/linkify-it-py-2.1.0-pyhcf101f3_0.conda - sha256: 991a82fbb64aba6d10719a017ce354e28df02ea5df1d9c7b0221da573c168d27 - md5: 1005e1f39083adad2384772e8e384e43 + - anyio + - certifi + - httpcore 1.* + - idna + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/httpx?source=hash-mapping + run_exports: {} + size: 63082 + timestamp: 1733663449209 +- conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + sha256: 77af6f5fe8b62ca07d09ac60127a30d9069fdc3c68d6b256754d0ffb1f7779f8 + md5: 8e6923fc12f1fe8f8c4e5c9f343256ac depends: - - python >=3.10 - - uc-micro-py + - python >=3.9 license: MIT license_family: MIT purls: - - pkg:pypi/linkify-it-py?source=compressed-mapping - size: 26062 - timestamp: 1772476821244 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-22.1.0-hc7d1edf_0.conda - sha256: 0daeedb3872ad0fdd6f0d7e7165c63488e8a315d7057907434145fba0c1e7b3d - md5: ff0820b5588b20be3b858552ecf8ffae - depends: - - __osx >=11.0 - constrains: - - openmp 22.1.0|22.1.0.* - - intel-openmp <0.0a0 - license: Apache-2.0 WITH LLVM-exception - license_family: APACHE - purls: [] - size: 285558 - timestamp: 1772028716784 -- conda: https://conda.anaconda.org/conda-forge/win-64/llvm-openmp-22.1.0-h4fa8253_0.conda - sha256: bb55a3736380759d338f87aac68df4fd7d845ae090b94400525f5d21a55eea31 - md5: e5505e0b7d6ef5c19d5c0c1884a2f494 - depends: - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - constrains: - - openmp 22.1.0|22.1.0.* - - intel-openmp <0.0a0 - license: Apache-2.0 WITH LLVM-exception - license_family: APACHE - purls: [] - size: 347404 - timestamp: 1772025050288 -- pypi: https://files.pythonhosted.org/packages/54/20/6aa79ba3570bddd1bf7e951c6123f806751e58e8cce736bad77b2cf348d7/logistro-2.0.1-py3-none-any.whl - name: logistro - version: 2.0.1 - sha256: 06ffa127b9fb4ac8b1972ae6b2a9d7fde57598bf5939cd708f43ec5bba2d31eb - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/ce/80/7f1f1bf8c2d5dfd8e9c0e1191aa355ff8b80b5619f84d6dcc2703fa7fd5a/loky-3.5.6-py3-none-any.whl - name: loky - version: 3.5.6 - sha256: 6d5300ac68cbd5084e89a6a0a187785d6a79950d461c80223d2c9a41d672b3d4 - requires_dist: - - cloudpickle - - packaging ; extra == 'tests' - - pytest ; extra == 'tests' - - psutil ; extra == 'tests' - requires_python: '>=3.9' -- conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda - sha256: 47326f811392a5fd3055f0f773036c392d26fdb32e4d8e7a8197eed951489346 - md5: 9de5350a85c4a20c685259b889aa6393 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 167055 - timestamp: 1733741040117 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.10.0-h286801f_1.conda - sha256: 94d3e2a485dab8bdfdd4837880bde3dd0d701e2b97d6134b8806b7c8e69c8652 - md5: 01511afc6cc1909c5303cf31be17b44f + - pkg:pypi/hyperframe?source=hash-mapping + run_exports: {} + size: 17397 + timestamp: 1737618427549 +- conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.18-pyhcf101f3_0.conda + sha256: c75632ea624aa450a394f570749420c5a2e0997d0216bc29d5d45b0f39df0426 + md5: 577b04680ae422adb86fc60d7b940659 depends: - - __osx >=11.0 - - libcxx >=18 - license: BSD-2-Clause + - python >=3.10 + - python + license: BSD-3-Clause license_family: BSD - purls: [] - size: 148824 - timestamp: 1733741047892 -- conda: https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-h280c20c_1002.conda - sha256: 5c6bbeec116e29f08e3dad3d0524e9bc5527098e12fc432c0e5ca53ea16337d4 - md5: 45161d96307e3a447cc3eb5896cf6f8c + purls: + - pkg:pypi/idna?source=compressed-mapping + run_exports: {} + size: 163869 + timestamp: 1781620148226 +- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda + sha256: 43e2a5497cad1598ff88a3e69f69bc88b7b8f141fa63c60eab5db296317318b8 + md5: ffc17e785d64e12fc311af9184221839 depends: - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - license: GPL-2.0-or-later - license_family: GPL - purls: [] - size: 191060 - timestamp: 1753889274283 -- pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl - name: markdown-it-py - version: 4.0.0 - sha256: 87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147 - requires_dist: - - mdurl~=0.1 - - psutil ; extra == 'benchmarking' - - pytest ; extra == 'benchmarking' - - pytest-benchmark ; extra == 'benchmarking' - - commonmark~=0.9 ; extra == 'compare' - - markdown~=3.4 ; extra == 'compare' - - mistletoe~=1.0 ; extra == 'compare' - - mistune~=3.0 ; extra == 'compare' - - panflute~=2.3 ; extra == 'compare' - - markdown-it-pyrs ; extra == 'compare' - - linkify-it-py>=1,<3 ; extra == 'linkify' - - mdit-py-plugins>=0.5.0 ; extra == 'plugins' - - gprof2dot ; extra == 'profiling' - - mdit-py-plugins>=0.5.0 ; extra == 'rtd' - - myst-parser ; extra == 'rtd' - - pyyaml ; extra == 'rtd' - - sphinx ; extra == 'rtd' - - sphinx-copybutton ; extra == 'rtd' - - sphinx-design ; extra == 'rtd' - - sphinx-book-theme~=1.0 ; extra == 'rtd' - - jupyter-sphinx ; extra == 'rtd' - - ipykernel ; extra == 'rtd' - - coverage ; extra == 'testing' - - pytest ; extra == 'testing' - - pytest-cov ; extra == 'testing' - - pytest-regressions ; extra == 'testing' - - requests ; extra == 'testing' - requires_python: '>=3.10' -- conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda - sha256: 7b1da4b5c40385791dbc3cc85ceea9fad5da680a27d5d3cb8bfaa185e304a89e - md5: 5b5203189eb668f042ac2b0826244964 + - python >=3.10 + - zipp >=3.20 + - python + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/importlib-metadata?source=compressed-mapping + run_exports: {} + size: 34766 + timestamp: 1779714582554 +- conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda + sha256: e1a9e3b1c8fe62dc3932a616c284b5d8cbe3124bbfbedcf4ce5c828cb166ee19 + md5: 9614359868482abba1bd15ce465e3c42 depends: - - mdurl >=0.1,<1 - python >=3.10 license: MIT license_family: MIT purls: - - pkg:pypi/markdown-it-py?source=hash-mapping - size: 64736 - timestamp: 1754951288511 -- conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py314h67df5f8_1.conda - sha256: c279be85b59a62d5c52f5dd9a4cd43ebd08933809a8416c22c3131595607d4cf - md5: 9a17c4307d23318476d7fbf0fedc0cde - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - python >=3.14,<3.15.0a0 - - python_abi 3.14.* *_cp314 - constrains: - - jinja2 >=3.0.0 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/markupsafe?source=hash-mapping - size: 27424 - timestamp: 1772445227915 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.3-py314h6e9b3f0_1.conda - sha256: 411153d14ee0d98be6e3751cf5cc0502db17bce2deebebb8779e33d29d0e525f - md5: d33c0a15882b70255abdd54711b06a45 + - pkg:pypi/iniconfig?source=hash-mapping + run_exports: {} + size: 13387 + timestamp: 1760831448842 +- conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.3.0-pyh01cf8df_0.conda + sha256: 994d3cb6b9b88a6533f567c50d20f2f6edc40ae3540ce2ee9629492182ab3403 + md5: a1ddab91145f7f06eee769d2f3ac69cd depends: - - __osx >=11.0 - - python >=3.14,<3.15.0a0 - - python >=3.14,<3.15.0a0 *_cp314 - - python_abi 3.14.* *_cp314 + - appnope + - __osx + - comm >=0.1.1 + - debugpy >=1.6.5 + - ipython >=7.23.1 + - jupyter_client >=8.9.0 + - jupyter_core >=5.1,!=6.0.* + - matplotlib-inline >=0.1 + - nest-asyncio2 >=1.7.0 + - packaging >=22 + - psutil >=5.7 + - python >=3.10 + - pyzmq >=25 + - tornado >=6.4.1 + - traitlets >=5.4.0 + - python constrains: - - jinja2 >=3.0.0 + - appnope >=0.1.2 license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/markupsafe?source=compressed-mapping - size: 27256 - timestamp: 1772445397216 -- conda: https://conda.anaconda.org/conda-forge/win-64/markupsafe-3.0.3-py314h2359020_1.conda - sha256: 02805a0f3cd168dbf13afc5e4aed75cc00fe538ce143527a6471485b36f5887c - md5: 8de7b40f8b30a8fcaa423c2537fe4199 + - pkg:pypi/ipykernel?source=hash-mapping + run_exports: {} + size: 137725 + timestamp: 1781101860049 +- conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.3.0-pyh6dadd2b_0.conda + sha256: e3ff0b3d5db5c31830030406f50ac2c9a5c31b86f1c2cef87a6042f0a4c77eb7 + md5: dd5c51d5c42381ba4a2e0ce32e02ba17 depends: - - python >=3.14,<3.15.0a0 - - python_abi 3.14.* *_cp314 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 + - __win + - comm >=0.1.1 + - debugpy >=1.6.5 + - ipython >=7.23.1 + - jupyter_client >=8.9.0 + - jupyter_core >=5.1,!=6.0.* + - matplotlib-inline >=0.1 + - nest-asyncio2 >=1.7.0 + - packaging >=22 + - psutil >=5.7 + - python >=3.10 + - pyzmq >=25 + - tornado >=6.4.1 + - traitlets >=5.4.0 + - python constrains: - - jinja2 >=3.0.0 + - appnope >=0.1.2 license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/markupsafe?source=hash-mapping - size: 30022 - timestamp: 1772445159549 -- conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.10.8-py314h1194b4b_0.conda - sha256: ee773261fbd6c76fc8174b0e4e1ce272b0bbaa56610f130e9d3d1f575106f04f - md5: b8683e6068099b69c10dbfcf7204203f + - pkg:pypi/ipykernel?source=compressed-mapping + run_exports: {} + size: 138046 + timestamp: 1781101760172 +- conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.3.0-pyha191276_0.conda + sha256: 305ad9226363ff5f259c404dd9a7508183a2e150739b2adc43db7d817234da66 + md5: 2b47a10e4d98334f8171ff60aea05ff3 depends: - - __glibc >=2.17,<3.0.a0 - - contourpy >=1.0.1 - - cycler >=0.10 - - fonttools >=4.22.0 - - freetype - - kiwisolver >=1.3.1 - - libfreetype >=2.14.1 - - libfreetype6 >=2.14.1 - - libgcc >=14 - - libstdcxx >=14 - - numpy >=1.23 - - numpy >=1.23,<3 - - packaging >=20.0 - - pillow >=8 - - pyparsing >=2.3.1 - - python >=3.14,<3.15.0a0 - - python-dateutil >=2.7 - - python_abi 3.14.* *_cp314 - - qhull >=2020.2,<2020.3.0a0 - - tk >=8.6.13,<8.7.0a0 - license: PSF-2.0 - license_family: PSF + - __linux + - comm >=0.1.1 + - debugpy >=1.6.5 + - ipython >=7.23.1 + - jupyter_client >=8.9.0 + - jupyter_core >=5.1,!=6.0.* + - matplotlib-inline >=0.1 + - nest-asyncio2 >=1.7.0 + - packaging >=22 + - psutil >=5.7 + - python >=3.10 + - pyzmq >=25 + - tornado >=6.4.1 + - traitlets >=5.4.0 + - python + constrains: + - appnope >=0.1.2 + license: BSD-3-Clause + license_family: BSD purls: - - pkg:pypi/matplotlib?source=hash-mapping - size: 8473358 - timestamp: 1763055439346 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/matplotlib-base-3.10.8-py314hd63e3f0_0.conda - sha256: 198dcc0ed83e78bc7bf48e6ef8d4ecd220e9cf1f07db98508251b2bc0be067f9 - md5: c84152e510d41378b8758826655b6ed7 + - pkg:pypi/ipykernel?source=compressed-mapping + run_exports: {} + size: 138635 + timestamp: 1781101665847 +- conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.14.1-pyh53cf698_0.conda + sha256: a3f76e06c31bcf1bda0f633d5c9f1c834286b4f6decc6626067a6cffee283318 + md5: fbd58549b374103c1a80577f09a328ef depends: - - __osx >=11.0 - - contourpy >=1.0.1 - - cycler >=0.10 - - fonttools >=4.22.0 - - freetype - - kiwisolver >=1.3.1 - - libcxx >=19 - - libfreetype >=2.14.1 - - libfreetype6 >=2.14.1 - - numpy >=1.23 - - numpy >=1.23,<3 - - packaging >=20.0 - - pillow >=8 - - pyparsing >=2.3.1 - - python >=3.14,<3.15.0a0 - - python >=3.14,<3.15.0a0 *_cp314 - - python-dateutil >=2.7 - - python_abi 3.14.* *_cp314 - - qhull >=2020.2,<2020.3.0a0 - license: PSF-2.0 - license_family: PSF + - __unix + - decorator >=5.1.0 + - ipython_pygments_lexers >=1.0.0 + - jedi >=0.18.2 + - matplotlib-inline >=0.1.6 + - prompt-toolkit >=3.0.41,<3.1.0 + - psutil >=7 + - pygments >=2.14.0 + - python >=3.11 + - stack_data >=0.6.0 + - traitlets >=5.13.0 + - typing_extensions >=4.6 + - pexpect >4.6 + - python + license: BSD-3-Clause + license_family: BSD purls: - - pkg:pypi/matplotlib?source=hash-mapping - size: 8286510 - timestamp: 1763055937766 -- conda: https://conda.anaconda.org/conda-forge/win-64/matplotlib-base-3.10.8-py314hfa45d96_0.conda - sha256: 82a50284275e8a1818cd3323846f3032dc89bd23a3f80dcf44e34a62b016256b - md5: 9d491a60700e0e90e92607fcc4e2566c + - pkg:pypi/ipython?source=hash-mapping + run_exports: {} + size: 652893 + timestamp: 1780654403616 +- conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.14.1-pyhe2676ad_0.conda + sha256: 3c5f2269e357118abfa49d21fdca3a35420ee5b251c2f5cb705310b38843db40 + md5: bf12187c2d1ef0bb63df01ace31ff26b depends: - - contourpy >=1.0.1 - - cycler >=0.10 - - fonttools >=4.22.0 - - freetype - - kiwisolver >=1.3.1 - - libfreetype >=2.14.1 - - libfreetype6 >=2.14.1 - - numpy >=1.23 - - numpy >=1.23,<3 - - packaging >=20.0 - - pillow >=8 - - pyparsing >=2.3.1 - - python >=3.14,<3.15.0a0 - - python-dateutil >=2.7 - - python_abi 3.14.* *_cp314 - - qhull >=2020.2,<2020.3.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: PSF-2.0 - license_family: PSF + - __win + - decorator >=5.1.0 + - ipython_pygments_lexers >=1.0.0 + - jedi >=0.18.2 + - matplotlib-inline >=0.1.6 + - prompt-toolkit >=3.0.41,<3.1.0 + - psutil >=7 + - pygments >=2.14.0 + - python >=3.11 + - stack_data >=0.6.0 + - traitlets >=5.13.0 + - typing_extensions >=4.6 + - colorama >=0.4.4 + - python + license: BSD-3-Clause + license_family: BSD purls: - - pkg:pypi/matplotlib?source=hash-mapping - size: 8185296 - timestamp: 1763055983613 -- conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda - sha256: 9d690334de0cd1d22c51bc28420663f4277cfa60d34fa5cad1ce284a13f1d603 - md5: 00e120ce3e40bad7bfc78861ce3c4a25 + - pkg:pypi/ipython?source=hash-mapping + run_exports: {} + size: 652076 + timestamp: 1780654438137 +- conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda + sha256: 894682a42a7d659ae12878dbcb274516a7031bbea9104e92f8e88c1f2765a104 + md5: bd80ba060603cc228d9d81c257093119 depends: - - python >=3.10 - - traitlets + - pygments + - python >=3.9 license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/matplotlib-inline?source=hash-mapping - size: 15175 - timestamp: 1761214578417 -- conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.5.0-pyhd8ed1ab_0.conda - sha256: 123cc004e2946879708cdb6a9eff24acbbb054990d6131bb94bca7a374ebebfc - md5: 1997a083ef0b4c9331f9191564be275e + - pkg:pypi/ipython-pygments-lexers?source=hash-mapping + run_exports: {} + size: 13993 + timestamp: 1737123723464 +- conda: https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_1.conda + sha256: 08e838d29c134a7684bca0468401d26840f41c92267c4126d7b43a6b533b0aed + md5: 0b0154421989637d424ccf0f104be51a depends: - - markdown-it-py >=2.0.0,<5.0.0 - - python >=3.10 + - arrow >=0.15.0 + - python >=3.9 license: MIT license_family: MIT purls: - - pkg:pypi/mdit-py-plugins?source=hash-mapping - size: 43805 - timestamp: 1754946862113 -- pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - name: mdurl - version: 0.1.2 - sha256: 84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 - requires_python: '>=3.7' -- conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - sha256: 78c1bbe1723449c52b7a9df1af2ee5f005209f67e40b6e1d3c7619127c43b1c7 - md5: 592132998493b3ff25fd7479396e8351 + - pkg:pypi/isoduration?source=hash-mapping + run_exports: {} + size: 19832 + timestamp: 1733493720346 +- conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda + sha256: 92c4d217e2dc68983f724aa983cca5464dcb929c566627b26a2511159667dba8 + md5: a4f4c5dc9b80bc50e0d3dc4e6e8f1bd9 depends: + - parso >=0.8.3,<0.9.0 - python >=3.9 - license: MIT - license_family: MIT + license: Apache-2.0 AND MIT purls: - - pkg:pypi/mdurl?source=hash-mapping - size: 14465 - timestamp: 1733255681319 -- conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.19.2-py314hef15ded_0.conda - sha256: 575b877b4ad4f93c44532e99b4dd8fe402ce34bff63f87b420f141e81f647de6 - md5: 2951224e244e0e4a27e2c4b24b76ffba + - pkg:pypi/jedi?source=hash-mapping + run_exports: {} + size: 843646 + timestamp: 1733300981994 +- conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda + sha256: fc9ca7348a4f25fed2079f2153ecdcf5f9cf2a0bc36c4172420ca09e1849df7b + md5: 04558c96691bed63104678757beb4f8d depends: + - markupsafe >=2.0 + - python >=3.10 - python - - rich >=11.2.0 - - jinja2 - - textual >=0.34.0 - - libstdcxx >=14 - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - lz4-c >=1.10.0,<1.11.0a0 - - python_abi 3.14.* *_cp314 - - libunwind >=1.8.3,<1.9.0a0 - - elfutils >=0.194,<0.195.0a0 - license: Apache-2.0 AND BSD-3-Clause + license: BSD-3-Clause + license_family: BSD purls: - - pkg:pypi/memray?source=hash-mapping - size: 1845157 - timestamp: 1773493681427 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/memray-1.19.2-py314h44d60dd_0.conda - sha256: 5e053a64dbcdc98bd470f358f3fce1cde9b9fe362280a87cb66f1587e9f09e26 - md5: f29f08f053a687bcfe09089f8a410bc9 + - pkg:pypi/jinja2?source=hash-mapping + run_exports: {} + size: 120685 + timestamp: 1764517220861 +- conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda + sha256: 301539229d7be6420c084490b8145583291123f0ce6b92f56be5948a2c83a379 + md5: 615de2a4d97af50c350e5cf160149e77 depends: - - python - - rich >=11.2.0 - - jinja2 - - textual >=0.34.0 - - python 3.14.* *_cp314 - - __osx >=11.0 - - libcxx >=19 - - python_abi 3.14.* *_cp314 - - lz4-c >=1.10.0,<1.11.0a0 - license: Apache-2.0 AND BSD-3-Clause + - python >=3.10 + - setuptools + license: BSD-3-Clause + license_family: BSD purls: - - pkg:pypi/memray?source=hash-mapping - size: 1744827 - timestamp: 1773493881871 -- conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.2.0-pyhcf101f3_0.conda - sha256: d3fb4beb5e0a52b6cc33852c558e077e1bfe44df1159eb98332d69a264b14bae - md5: b11e360fc4de2b0035fc8aaa74f17fd6 + - pkg:pypi/joblib?source=hash-mapping + run_exports: {} + size: 226448 + timestamp: 1765794135253 +- conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.15.0-pyhd8ed1ab_0.conda + sha256: 637400a4174880463985c7a5b6e3e0bea0aa9d0892a6c06a3a8aa2cf1208c35a + md5: 761a4a6b9cba303c66a97ca642447171 + depends: + - python >=3.10 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/json5?source=compressed-mapping + run_exports: {} + size: 39373 + timestamp: 1781926894833 +- conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.1.1-pyhcf101f3_0.conda + sha256: a3d10301b6ff399ba1f3d39e443664804a3d28315a4fb81e745b6817845f70ae + md5: 89bf346df77603055d3c8fe5811691e6 depends: - python >=3.10 - - typing_extensions - python license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/mistune?source=hash-mapping - size: 74250 - timestamp: 1766504456031 -- conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2025.3.0-hac47afa_455.conda - sha256: b2b4c84b95210760e4d12319416c60ab66e03674ccdcbd14aeb59f82ebb1318d - md5: fd05d1e894497b012d05a804232254ed + - pkg:pypi/jsonpointer?source=hash-mapping + run_exports: {} + size: 14190 + timestamp: 1774311356147 +- conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda + sha256: db973a37d75db8e19b5f44bbbdaead0c68dde745407f281e2a7fe4db74ec51d7 + md5: ada41c863af263cc4c5fcbaff7c3e4dc depends: - - llvm-openmp >=21.1.8 - - tbb >=2022.3.0 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: LicenseRef-IntelSimplifiedSoftwareOct2022 - license_family: Proprietary - purls: [] - size: 100224829 - timestamp: 1767634557029 -- pypi: https://files.pythonhosted.org/packages/72/4e/1339dc6e2557a344f5ba5590872e80346f76f6cb2ac3dd16e4666e88818c/ml_dtypes-0.5.4-cp314-cp314-macosx_10_13_universal2.whl - name: ml-dtypes - version: 0.5.4 - sha256: 2b857d3af6ac0d39db1de7c706e69c7f9791627209c3d6dedbfca8c7e5faec22 - requires_dist: - - numpy>=1.21 - - numpy>=1.21.2 ; python_full_version >= '3.10' - - numpy>=1.23.3 ; python_full_version >= '3.11' - - numpy>=1.26.0 ; python_full_version >= '3.12' - - numpy>=2.1.0 ; python_full_version >= '3.13' - - absl-py ; extra == 'dev' - - pytest ; extra == 'dev' - - pytest-xdist ; extra == 'dev' - - pylint>=2.6.0 ; extra == 'dev' - - pyink ; extra == 'dev' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/c6/bb/82c7dcf38070b46172a517e2334e665c5bf374a262f99a283ea454bece7c/ml_dtypes-0.5.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - name: ml-dtypes - version: 0.5.4 - sha256: 14a4fd3228af936461db66faccef6e4f41c1d82fcc30e9f8d58a08916b1d811f - requires_dist: - - numpy>=1.21 - - numpy>=1.21.2 ; python_full_version >= '3.10' - - numpy>=1.23.3 ; python_full_version >= '3.11' - - numpy>=1.26.0 ; python_full_version >= '3.12' - - numpy>=2.1.0 ; python_full_version >= '3.13' - - absl-py ; extra == 'dev' - - pytest ; extra == 'dev' - - pytest-xdist ; extra == 'dev' - - pylint>=2.6.0 ; extra == 'dev' - - pyink ; extra == 'dev' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/e9/93/2bfed22d2498c468f6bcd0d9f56b033eaa19f33320389314c19ef6766413/ml_dtypes-0.5.4-cp314-cp314-win_amd64.whl - name: ml-dtypes - version: 0.5.4 - sha256: 8c6a2dcebd6f3903e05d51960a8058d6e131fe69f952a5397e5dbabc841b6d56 - requires_dist: - - numpy>=1.21 - - numpy>=1.21.2 ; python_full_version >= '3.10' - - numpy>=1.23.3 ; python_full_version >= '3.11' - - numpy>=1.26.0 ; python_full_version >= '3.12' - - numpy>=2.1.0 ; python_full_version >= '3.13' - - absl-py ; extra == 'dev' - - pytest ; extra == 'dev' - - pytest-xdist ; extra == 'dev' - - pylint>=2.6.0 ; extra == 'dev' - - pyink ; extra == 'dev' - requires_python: '>=3.9' -- conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda - sha256: d09c47c2cf456de5c09fa66d2c3c5035aa1fa228a1983a433c47b876aa16ce90 - md5: 37293a85a0f4f77bbd9cf7aaefc62609 - depends: - - python >=3.9 - license: Apache-2.0 - license_family: Apache + - attrs >=22.2.0 + - jsonschema-specifications >=2023.3.6 + - python >=3.10 + - referencing >=0.28.4 + - rpds-py >=0.25.0 + - python + license: MIT + license_family: MIT purls: - - pkg:pypi/munkres?source=hash-mapping - size: 15851 - timestamp: 1749895533014 -- pypi: https://files.pythonhosted.org/packages/fe/75/0b4a10da17a44cf13567d08a9c7632a285297e46253263f1ae119129d10a/narwhals-2.18.0-py3-none-any.whl - name: narwhals - version: 2.18.0 - sha256: 68378155ee706ac9c5b25868ef62ecddd62947b6df7801a0a156bc0a615d2d0d - requires_dist: - - cudf-cu12>=24.10.0 ; extra == 'cudf' - - dask[dataframe]>=2024.8 ; extra == 'dask' - - duckdb>=1.1 ; extra == 'duckdb' - - ibis-framework>=6.0.0 ; extra == 'ibis' - - packaging ; extra == 'ibis' - - pyarrow-hotfix ; extra == 'ibis' - - rich ; extra == 'ibis' - - modin ; extra == 'modin' - - pandas>=1.1.3 ; extra == 'pandas' - - polars>=0.20.4 ; extra == 'polars' - - pyarrow>=13.0.0 ; extra == 'pyarrow' - - pyspark>=3.5.0 ; extra == 'pyspark' - - pyspark[connect]>=3.5.0 ; extra == 'pyspark-connect' - - duckdb>=1.1 ; extra == 'sql' - - sqlparse ; extra == 'sql' - - sqlframe>=3.22.0,!=3.39.3 ; extra == 'sqlframe' - requires_python: '>=3.9' -- conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.4-pyhd8ed1ab_0.conda - sha256: 1b66960ee06874ddceeebe375d5f17fb5f393d025a09e15b830ad0c4fffb585b - md5: 00f5b8dafa842e0c27c1cd7296aa4875 + - pkg:pypi/jsonschema?source=hash-mapping + run_exports: {} + size: 82356 + timestamp: 1767839954256 +- conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda + sha256: 0a4f3b132f0faca10c89fdf3b60e15abb62ded6fa80aebfc007d05965192aa04 + md5: 439cd0f567d697b20a8f45cb70a1005a depends: - - jupyter_client >=6.1.12 - - jupyter_core >=4.12,!=5.0.* - - nbformat >=5.1 - - python >=3.8 - - traitlets >=5.4 - license: BSD-3-Clause - license_family: BSD + - python >=3.10 + - referencing >=0.31.0 + - python + license: MIT + license_family: MIT purls: - - pkg:pypi/nbclient?source=compressed-mapping - size: 28473 - timestamp: 1766485646962 -- conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.17.0-pyhcf101f3_0.conda - sha256: 628fea99108df8e33396bb0b88658ec3d58edf245df224f57c0dce09615cbed2 - md5: b14079a39ae60ac7ad2ec3d9eab075ca + - pkg:pypi/jsonschema-specifications?source=hash-mapping + run_exports: {} + size: 19236 + timestamp: 1757335715225 +- conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.26.0-hcf101f3_0.conda + sha256: 6886fc61e4e4edd38fd38729976b134e8bd2143f7fce56cc80d7ac7bac99bce1 + md5: 8368d58342d0825f0843dc6acdd0c483 depends: - - beautifulsoup4 - - bleach-with-css !=5.0.0 - - defusedxml - - importlib-metadata >=3.6 - - jinja2 >=3.0 - - jupyter_core >=4.7 - - jupyterlab_pygments - - markupsafe >=2.0 - - mistune >=2.0.3,<4 - - nbclient >=0.5.0 - - nbformat >=5.7 - - packaging - - pandocfilters >=1.4.1 - - pygments >=2.4.1 + - jsonschema >=4.26.0,<4.26.1.0a0 + - fqdn + - idna + - isoduration + - jsonpointer >1.13 + - rfc3339-validator + - rfc3986-validator >0.1.0 + - rfc3987-syntax >=1.1.0 + - uri-template + - webcolors >=24.6.0 + license: MIT + license_family: MIT + purls: [] + run_exports: {} + size: 4740 + timestamp: 1767839954258 +- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-builder-1.0.2-pyhcf101f3_0.conda + sha256: a845bffdbcdd1749dd4a46e47be5d4e0e1c87cdda547e3a87d297a6963ab0821 + md5: 12b0a9513f6abaa944c313c4a01d5500 + depends: + - jupyter_core - python >=3.10 - - traitlets >=5.1 + - tomli + - traitlets - python constrains: - - pandoc >=2.9.2,<4.0.0 - - nbconvert ==7.17.0 *_0 + - nodejs >=22 + license: BSD-3-Clause AND MIT AND ISC + purls: + - pkg:pypi/jupyter-builder?source=hash-mapping + run_exports: {} + size: 858738 + timestamp: 1781271993460 +- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.3.1-pyhcf101f3_0.conda + sha256: 3766e2ae59641c172cec8a821528bfa6bf9543ffaaeb8b358bfd5259dcf18e4e + md5: 0c3b465ceee138b9c39279cc02e5c4a0 + depends: + - importlib-metadata >=4.8.3 + - jupyter_server >=1.1.2 + - python >=3.10 + - python license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/nbconvert?source=compressed-mapping - size: 202284 - timestamp: 1769709543555 -- conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda - sha256: 7a5bd30a2e7ddd7b85031a5e2e14f290898098dc85bea5b3a5bf147c25122838 - md5: bbe1963f1e47f594070ffe87cdf612ea + - pkg:pypi/jupyter-lsp?source=hash-mapping + run_exports: {} + size: 61633 + timestamp: 1775136333147 +- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.9.1-pyhcf101f3_0.conda + sha256: 48b18974cc93b2c0d2681563237034e521f51d1878f0bbc6a5a67ca31b1608a6 + md5: 49440e66df843bee2273937e8032ec43 depends: - - jsonschema >=2.6 - - jupyter_core >=4.12,!=5.0.* - - python >=3.9 - - python-fastjsonschema >=2.15 - - traitlets >=5.1 + - jupyter_core >=5.1 + - python >=3.10 + - python-dateutil >=2.8.2 + - pyzmq >=25.0 + - tornado >=6.4.1 + - traitlets >=5.3 + - typing_extensions >=4.13.0 + - python license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/nbformat?source=hash-mapping - size: 100945 - timestamp: 1733402844974 -- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - sha256: 3fde293232fa3fca98635e1167de6b7c7fda83caf24b9d6c91ec9eefb4f4d586 - md5: 47e340acb35de30501a76c7c799c41d7 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - license: X11 AND BSD-3-Clause - purls: [] - size: 891641 - timestamp: 1738195959188 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - sha256: 2827ada40e8d9ca69a153a45f7fd14f32b2ead7045d3bbb5d10964898fe65733 - md5: 068d497125e4bf8a66bf707254fff5ae - depends: - - __osx >=11.0 - license: X11 AND BSD-3-Clause - purls: [] - size: 797030 - timestamp: 1738196177597 -- conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda - sha256: bb7b21d7fd0445ddc0631f64e66d91a179de4ba920b8381f29b9d006a42788c0 - md5: 598fd7d4d0de2455fb74f56063969a97 + - pkg:pypi/jupyter-client?source=hash-mapping + run_exports: {} + size: 117954 + timestamp: 1781019994076 +- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyh6dadd2b_0.conda + sha256: ed709a6c25b731e01563521ef338b93986cd14b5bc17f35e9382000864872ccc + md5: a8db462b01221e9f5135be466faeb3e0 depends: - - python >=3.9 - license: BSD-2-Clause + - __win + - pywin32 + - platformdirs >=2.5 + - python >=3.10 + - traitlets >=5.3 + - python + constrains: + - pywin32 >=300 + license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/nest-asyncio?source=hash-mapping - size: 11543 - timestamp: 1733325673691 -- conda: https://conda.anaconda.org/conda-forge/linux-64/nettle-3.10.1-h4a9d5aa_0.conda - sha256: 00b5a5e394d58cff5b08e0082699e773dd41995130bc14747740a16d9cacdd2c - md5: 618bf3007df69a0ca9306ed8d6b48b48 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - gmp >=6.3.0,<7.0a0 - license: GPL-2.0-or-later OR LGPL-3.0-or-later - purls: [] - size: 1047686 - timestamp: 1748012178395 -- conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda - sha256: f6a82172afc50e54741f6f84527ef10424326611503c64e359e25a19a8e4c1c6 - md5: a2c1eeadae7a309daed9d62c96012a2b + - pkg:pypi/jupyter-core?source=hash-mapping + run_exports: {} + size: 64679 + timestamp: 1760643889625 +- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda + sha256: 1d34b80e5bfcd5323f104dbf99a2aafc0e5d823019d626d0dce5d3d356a2a52a + md5: b38fe4e78ee75def7e599843ef4c1ab0 depends: - - python >=3.11 + - __unix + - python + - platformdirs >=2.5 + - python >=3.10 + - traitlets >=5.3 - python constrains: - - numpy >=1.25 - - scipy >=1.11.2 - - matplotlib-base >=3.8 - - pandas >=2.0 + - pywin32 >=300 license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/networkx?source=hash-mapping - size: 1587439 - timestamp: 1765215107045 -- pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - name: nodeenv - version: 1.10.0 - sha256: 5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827 - requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*' -- conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda - sha256: 7b920e46b9f7a2d2aa6434222e5c8d739021dbc5cc75f32d124a8191d86f9056 - md5: e7f89ea5f7ea9401642758ff50a2d9c1 + - pkg:pypi/jupyter-core?source=hash-mapping + run_exports: {} + size: 65503 + timestamp: 1760643864586 +- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.1-pyhcf101f3_0.conda + sha256: c7edb5682c6316a95ad781dccb1b6589cd2ec0bf94f23c21152974eb0363b5d7 + md5: bf42ee94c750c0b2e7e998b79ac299ea depends: - - jupyter_server >=1.8,<3 - - python >=3.9 + - jsonschema-with-format-nongpl >=4.18.0 + - packaging + - python >=3.10 + - python-json-logger >=2.0.4 + - pyyaml >=5.3 + - referencing + - rfc3339-validator + - rfc3986-validator >=0.1.1 + - traitlets >=5.3 + - python license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/notebook-shim?source=hash-mapping - size: 16817 - timestamp: 1733408419340 -- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.2-py314h2b28147_1.conda - sha256: 1d8377c8001c15ed12c2713b723213474b435706ab9d34ede69795d64af9e94d - md5: 4ea6b620fdf24a1a0bc4f1c7134dfafb + - pkg:pypi/jupyter-events?source=hash-mapping + run_exports: {} + size: 24002 + timestamp: 1776861872237 +- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.20.0-pyhcf101f3_0.conda + sha256: 3e8759fdc404f149e7e722e0af472044a0ef9e70d0a3a7690ddcfe1232a0e868 + md5: b2ddb0e13b5600070c4019c4db8a78e6 depends: + - anyio >=3.1.0 + - argon2-cffi >=21.1 + - jinja2 >=3.0.3 + - jupyter_client >=7.4.4 + - jupyter_core >=4.12,!=5.0.* + - jupyter_events >=0.11.0 + - jupyter_server_terminals >=0.4.4 + - nbconvert-core >=6.4.4 + - nbformat >=5.3.0 + - overrides >=5.0 + - packaging >=22.0 + - prometheus_client >=0.9 + - python >=3.10 + - pyzmq >=24 + - send2trash >=1.8.2 + - terminado >=0.8.3 + - tornado >=6.2.0 + - traitlets >=5.6.0 + - websocket-client >=1.7 - python - - libstdcxx >=14 - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - libcblas >=3.9.0,<4.0a0 - - python_abi 3.14.* *_cp314 - - libblas >=3.9.0,<4.0a0 - - liblapack >=3.9.0,<4.0a0 - constrains: - - numpy-base <0a0 license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/numpy?source=hash-mapping - size: 8926994 - timestamp: 1770098474394 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.4.2-py314hae46ccb_1.conda - sha256: 43b5ed0ead36e5133ee8462916d23284f0bce0e5f266fa4bd31a020a6cc22f14 - md5: 0f0ddf0575b98d91cda9e3ca9eaeb9a2 + - pkg:pypi/jupyter-server?source=compressed-mapping + run_exports: {} + size: 363068 + timestamp: 1781713810089 +- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda + sha256: 5eda79ed9f53f590031d29346abd183051263227dd9ee667b5ca1133ce297654 + md5: 7b8bace4943e0dc345fc45938826f2b8 depends: + - python >=3.10 + - terminado >=0.8.3 - python - - __osx >=11.0 - - python 3.14.* *_cp314 - - libcxx >=19 - - libblas >=3.9.0,<4.0a0 - - liblapack >=3.9.0,<4.0a0 - - python_abi 3.14.* *_cp314 - - libcblas >=3.9.0,<4.0a0 - constrains: - - numpy-base <0a0 license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/numpy?source=hash-mapping - size: 6992958 - timestamp: 1770098398327 -- conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.4.2-py314h06c3c77_1.conda - sha256: 34fc25b81cfa987e1825586ddb1a4ac76a246fdef343c9171109017674ad6503 - md5: 2fccd2c4e9feb4e4c2a90043015525d6 + - pkg:pypi/jupyter-server-terminals?source=hash-mapping + run_exports: {} + size: 22052 + timestamp: 1768574057200 +- conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.6.0-pyhd8ed1ab_0.conda + sha256: 8a1704a556cdcec791639a788857e4abee2866f0b92e0fa0fe3e5a9d935b3d09 + md5: b838c6dcec21a6575d5f6fcaf34693be depends: - - python - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - - ucrt >=10.0.20348.0 - - python_abi 3.14.* *_cp314 - - libcblas >=3.9.0,<4.0a0 - - liblapack >=3.9.0,<4.0a0 - - libblas >=3.9.0,<4.0a0 + - async-lru >=1.0.0 + - httpx >=0.25.0,<1 + - ipykernel >=6.5.0,!=6.30.0 + - jinja2 >=3.0.3 + - jupyter-builder >=1.0.2 + - jupyter-lsp >=2.0.0 + - jupyter_core + - jupyter_server >=2.19.0,<3 + - jupyterlab_server >=2.28.0,<3 + - notebook-shim >=0.2 + - packaging >=23.2 + - python >=3.10 + - tomli >=1.2.2 + - tornado >=6.2.0 + - traitlets + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jupyterlab?source=compressed-mapping + run_exports: {} + size: 13602435 + timestamp: 1781794002520 +- conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_2.conda + sha256: dc24b900742fdaf1e077d9a3458fd865711de80bca95fe3c6d46610c532c6ef0 + md5: fd312693df06da3578383232528c468d + depends: + - pygments >=2.4.1,<3 + - python >=3.9 constrains: - - numpy-base <0a0 + - jupyterlab >=4.0.8,<5.0.0 license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/numpy?source=hash-mapping - size: 7309134 - timestamp: 1770098414535 -- pypi: https://files.pythonhosted.org/packages/77/3c/aa88abe01f3be3d1f8f787d1d33dc83e76fec05945f9a28fbb41cfb99cd5/nvidia_cublas_cu12-12.9.1.4-py3-none-manylinux_2_27_x86_64.whl - name: nvidia-cublas-cu12 - version: 12.9.1.4 - sha256: 453611eb21a7c1f2c2156ed9f3a45b691deda0440ec550860290dc901af5b4c2 - requires_python: '>=3' -- pypi: https://files.pythonhosted.org/packages/18/2a/d4cd8506d2044e082f8cd921be57392e6a9b5ccd3ffdf050362430a3d5d5/nvidia_cuda_cccl_cu12-12.9.27-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - name: nvidia-cuda-cccl-cu12 - version: 12.9.27 - sha256: 37869e17ce2e1ecec6eddf1927cca0f8c34e64fd848d40453df559091e2d7117 - requires_python: '>=3' -- pypi: https://files.pythonhosted.org/packages/c1/2e/b84e32197e33f39907b455b83395a017e697c07a449a2b15fd07fc1c9981/nvidia_cuda_cupti_cu12-12.9.79-py3-none-manylinux_2_25_x86_64.whl - name: nvidia-cuda-cupti-cu12 - version: 12.9.79 - sha256: 096bcf334f13e1984ba36685ad4c1d6347db214de03dbb6eebb237b41d9d934f - requires_python: '>=3' -- pypi: https://files.pythonhosted.org/packages/25/48/b54a06168a2190572a312bfe4ce443687773eb61367ced31e064953dd2f7/nvidia_cuda_nvcc_cu12-12.9.86-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl - name: nvidia-cuda-nvcc-cu12 - version: 12.9.86 - sha256: 5d6a0d32fdc7ea39917c20065614ae93add6f577d840233237ff08e9a38f58f0 - requires_python: '>=3' -- pypi: https://files.pythonhosted.org/packages/b8/85/e4af82cc9202023862090bfca4ea827d533329e925c758f0cde964cb54b7/nvidia_cuda_nvrtc_cu12-12.9.86-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl - name: nvidia-cuda-nvrtc-cu12 - version: 12.9.86 - sha256: 210cf05005a447e29214e9ce50851e83fc5f4358df8b453155d5e1918094dcb4 - requires_python: '>=3' -- pypi: https://files.pythonhosted.org/packages/bc/46/a92db19b8309581092a3add7e6fceb4c301a3fd233969856a8cbf042cd3c/nvidia_cuda_runtime_cu12-12.9.79-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - name: nvidia-cuda-runtime-cu12 - version: 12.9.79 - sha256: 25bba2dfb01d48a9b59ca474a1ac43c6ebf7011f1b0b8cc44f54eb6ac48a96c3 - requires_python: '>=3' -- pypi: https://files.pythonhosted.org/packages/3b/52/94aecda69df65ba1079a8b7dbe84632af5614dc0ed2c733185f6431874e3/nvidia_cudnn_cu12-9.20.0.48-py3-none-manylinux_2_27_x86_64.whl - name: nvidia-cudnn-cu12 - version: 9.20.0.48 - sha256: 7d7479e1321c7a039b33827f0247791ee1be091759032c1f66a287c4a643396a - requires_dist: - - nvidia-cublas-cu12 - requires_python: '>=3' -- pypi: https://files.pythonhosted.org/packages/95/f4/61e6996dd20481ee834f57a8e9dca28b1869366a135e0d42e2aa8493bdd4/nvidia_cufft_cu12-11.4.1.4-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - name: nvidia-cufft-cu12 - version: 11.4.1.4 - sha256: c67884f2a7d276b4b80eb56a79322a95df592ae5e765cf1243693365ccab4e28 - requires_dist: - - nvidia-nvjitlink-cu12 - requires_python: '>=3' -- pypi: https://files.pythonhosted.org/packages/33/40/79b0c64d44d6c166c0964ec1d803d067f4a145cca23e23925fd351d0e642/nvidia_cusolver_cu12-11.7.5.82-py3-none-manylinux_2_27_x86_64.whl - name: nvidia-cusolver-cu12 - version: 11.7.5.82 - sha256: 15da72d1340d29b5b3cf3fd100e3cd53421dde36002eda6ed93811af63c40d88 - requires_dist: - - nvidia-cublas-cu12 - - nvidia-nvjitlink-cu12 - - nvidia-cusparse-cu12 - requires_python: '>=3' -- pypi: https://files.pythonhosted.org/packages/12/46/b0fd4b04f86577921feb97d8e2cf028afe04f614d17fb5013de9282c9216/nvidia_cusparse_cu12-12.5.10.65-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - name: nvidia-cusparse-cu12 - version: 12.5.10.65 - sha256: 73060ce019ac064a057267c585bf1fd5a353734151f87472ff02b2c5c9984e78 - requires_dist: - - nvidia-nvjitlink-cu12 - requires_python: '>=3' -- pypi: https://files.pythonhosted.org/packages/31/1e/9e366f36efc550f07d6737f199e3f6bffafdf28795d007f10a77dd274f5c/nvidia_nccl_cu12-2.29.7-py3-none-manylinux_2_18_x86_64.whl - name: nvidia-nccl-cu12 - version: 2.29.7 - sha256: ecd0a012051abc20c1aa87328841efa8cade3ced65803046e38c2f03c0891fea - requires_python: '>=3' -- pypi: https://files.pythonhosted.org/packages/46/0c/c75bbfb967457a0b7670b8ad267bfc4fffdf341c074e0a80db06c24ccfd4/nvidia_nvjitlink_cu12-12.9.86-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl - name: nvidia-nvjitlink-cu12 - version: 12.9.86 - sha256: e3f1171dbdc83c5932a45f0f4c99180a70de9bd2718c1ab77d14104f6d7147f9 - requires_python: '>=3' -- pypi: https://files.pythonhosted.org/packages/44/6a/cf1265d48719852f5144055ff611d9e71678a9b29afb7ace72bf248a0cd8/nvidia_nvshmem_cu12-3.5.21-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - name: nvidia-nvshmem-cu12 - version: 3.5.21 - sha256: 0e51b52bbd78f8896a7667701ac40e3e7a4f0f80703ccce75b304c18f359d73f - requires_dist: - - nvidia-cuda-cccl-cu12 - requires_python: '>=3' -- conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda - sha256: 3900f9f2dbbf4129cf3ad6acf4e4b6f7101390b53843591c53b00f034343bc4d - md5: 11b3379b191f63139e29c0d19dee24cd + - pkg:pypi/jupyterlab-pygments?source=hash-mapping + run_exports: {} + size: 18711 + timestamp: 1733328194037 +- conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.28.0-pyhcf101f3_0.conda + sha256: 381d2d6a259a3be5f38a69463e0f6c5dcf1844ae113058007b51c3bef13a7cee + md5: a63877cb23de826b1620d3adfccc4014 depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libpng >=1.6.50,<1.7.0a0 - - libstdcxx >=14 - - libtiff >=4.7.1,<4.8.0a0 - - libzlib >=1.3.1,<2.0a0 - license: BSD-2-Clause + - babel >=2.10 + - jinja2 >=3.0.3 + - json5 >=0.9.0 + - jsonschema >=4.18 + - jupyter_server >=1.21,<3 + - packaging >=21.3 + - python >=3.10 + - requests >=2.31 + - python + license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/jupyterlab-server?source=hash-mapping + run_exports: {} + size: 51621 + timestamp: 1761145478692 +- conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-4.18.0-he073ed8_9.conda + sha256: 41557eeadf641de6aeae49486cef30d02a6912d8da98585d687894afd65b356a + md5: 86d9cba083cd041bfbf242a01a7a1999 + constrains: + - sysroot_linux-64 ==2.28 + license: LGPL-2.0-or-later AND LGPL-2.0-or-later WITH exceptions AND GPL-2.0-or-later + license_family: GPL purls: [] - size: 355400 - timestamp: 1758489294972 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.4-hd9e9057_0.conda - sha256: 60aca8b9f94d06b852b296c276b3cf0efba5a6eb9f25feb8708570d3a74f00e4 - md5: 4b5d3a91320976eec71678fad1e3569b + run_exports: {} + size: 1278712 + timestamp: 1765578681495 +- conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda + sha256: 49570840fb15f5df5d4b4464db8ee43a6d643031a2bc70ef52120a52e3809699 + md5: 9b965c999135d43a3d0f7bd7d024e26a depends: - - __osx >=11.0 - - libcxx >=19 - - libpng >=1.6.55,<1.7.0a0 - - libtiff >=4.7.1,<4.8.0a0 - - libzlib >=1.3.1,<2.0a0 - license: BSD-2-Clause - license_family: BSD + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/lark?source=hash-mapping + run_exports: {} + size: 94312 + timestamp: 1761596921009 +- conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-14.3.0-hf649bbc_119.conda + sha256: e1815bb11d5abe886979e95889d84310d83d078d36a3567ca67cbf57a3876d88 + md5: 7d517e32d656a8880d98c0e4fc8ddc2c + depends: + - __unix + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL purls: [] - size: 319697 - timestamp: 1772625397692 -- conda: https://conda.anaconda.org/conda-forge/win-64/openjpeg-2.5.4-h0e57b4f_0.conda - sha256: 24342dee891a49a9ba92e2018ec0bde56cc07fdaec95275f7a55b96f03ea4252 - md5: e723ab7cc2794c954e1b22fde51c16e4 + run_exports: {} + size: 3091520 + timestamp: 1778268364856 +- conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-15.2.0-hcc6f6b0_119.conda + sha256: 38a557eba305468ac1f90ac85e50d8defd76141cb0b8a43b2fc1aca71dd5d5f2 + md5: 683fcb168e1df9a21fa80d5aa2d9330b depends: - - libpng >=1.6.55,<1.7.0a0 - - libtiff >=4.7.1,<4.8.0a0 - - libzlib >=1.3.1,<2.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: BSD-2-Clause - license_family: BSD + - __unix + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL purls: [] - size: 245594 - timestamp: 1772624841727 -- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda - sha256: 44c877f8af015332a5d12f5ff0fb20ca32f896526a7d0cdb30c769df1144fb5c - md5: f61eb8cd60ff9057122a3d338b99c00f + run_exports: {} + size: 3095909 + timestamp: 1778268932148 +- conda: https://conda.anaconda.org/conda-forge/noarch/libnvptxcompiler-dev_linux-64-12.9.86-ha770c72_2.conda + sha256: 17952c32eac197a59c119fdf3fb6f08c6a29c225a80bae141ac904ad212b87dd + md5: a66a909acf08924aced622903832a937 depends: - - __glibc >=2.17,<3.0.a0 - - ca-certificates - - libgcc >=14 - license: Apache-2.0 - license_family: Apache + - cuda-version >=12.9,<12.10.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 3164551 - timestamp: 1769555830639 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda - sha256: 361f5c5e60052abc12bdd1b50d7a1a43e6a6653aab99a2263bf2288d709dcf67 - md5: f4f6ad63f98f64191c3e77c5f5f29d76 + run_exports: {} + size: 14422867 + timestamp: 1753975387297 +- conda: https://conda.anaconda.org/conda-forge/noarch/libnvptxcompiler-dev_linux-64-13.3.33-ha770c72_0.conda + sha256: aa8ada122821d8fe41590875d4d4a90133aba9f86edeb6014b03f8f60620a289 + md5: 0f3b13ebd976b30e0768cfd740a48381 depends: - - __osx >=11.0 - - ca-certificates - license: Apache-2.0 - license_family: Apache + - cuda-version >=13.3,<13.4.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 3104268 - timestamp: 1769556384749 -- conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.1-hf411b9b_1.conda - sha256: 53a5ad2e5553b8157a91bb8aa375f78c5958f77cb80e9d2ce59471ea8e5c0bd6 - md5: eb585509b815415bc964b2c7e11c7eb3 + run_exports: {} + size: 10959803 + timestamp: 1779905159430 +- conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-14.3.0-h9f08a49_119.conda + sha256: 1b4263aa5d8c8c659e8e38b66868f42867347e0c8941513ee77269afc00a5186 + md5: d1a866495b9654ccfef5392b8541dc58 depends: - - ca-certificates - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: Apache-2.0 - license_family: Apache + - __unix + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL purls: [] - size: 9343023 - timestamp: 1769557547888 -- pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl - name: opt-einsum - version: 3.4.0 - sha256: 69bb92469f86a1565195ece4ac0323943e83477171b91d24c35afe028a90d7cd - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/91/85/08c4e13a90a13c509d1fe09596dd8198338b6cfff9ee280f01ae7694889e/optimagic-0.5.3-py3-none-any.whl - name: optimagic - version: 0.5.3 - sha256: 6723076dad2c186a7f7871e5676eeb579f340030c988136196246e0fe8995a68 - requires_dist: - - annotated-types - - cloudpickle - - joblib - - numpy - - pandas - - plotly - - pybaum>=0.1.2 - - scipy>=1.2.1 - - sqlalchemy>=1.3 - - typing-extensions - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/08/67/2e19866a03a6e75eb62194a5b55e1e3154ca1517478c300232b0229f8c2a/optree-0.19.0-cp314-cp314-macosx_11_0_arm64.whl - name: optree - version: 0.19.0 - sha256: d22b947603be4768c2bd73a59652c94d63465f928b3099e9035f9c48dfc61953 - requires_dist: - - typing-extensions>=4.6.0 - - typing-extensions>=4.12.0 ; python_full_version >= '3.13' - - jax ; extra == 'jax' - - numpy ; extra == 'numpy' - - torch ; extra == 'torch' - - cpplint ; extra == 'lint' - - doc8 ; extra == 'lint' - - mypy ; extra == 'lint' - - pre-commit ; extra == 'lint' - - pyenchant ; extra == 'lint' - - pylint[spelling] ; extra == 'lint' - - ruff ; extra == 'lint' - - xdoctest ; extra == 'lint' - - pytest ; extra == 'test' - - pytest-cov ; extra == 'test' - - covdefaults ; extra == 'test' - - rich ; extra == 'test' - - typing-extensions==4.6.0 ; python_full_version < '3.13' and sys_platform == 'linux' and extra == 'test' - - typing-extensions==4.6.0 ; python_full_version < '3.13' and sys_platform == 'darwin' and extra == 'test' - - typing-extensions==4.6.0 ; python_full_version < '3.13' and sys_platform == 'win32' and extra == 'test' - - typing-extensions==4.12.0 ; python_full_version >= '3.13' and sys_platform == 'linux' and extra == 'test' - - typing-extensions==4.12.0 ; python_full_version >= '3.13' and sys_platform == 'darwin' and extra == 'test' - - typing-extensions==4.12.0 ; python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'test' - - sphinx~=8.0 ; extra == 'docs' - - sphinx-autoapi ; extra == 'docs' - - sphinx-autobuild ; extra == 'docs' - - sphinx-autodoc-typehints ; extra == 'docs' - - sphinx-copybutton ; extra == 'docs' - - sphinx-rtd-theme ; extra == 'docs' - - sphinxcontrib-bibtex ; extra == 'docs' - - docutils ; extra == 'docs' - - jax[cpu] ; extra == 'docs' - - numpy ; extra == 'docs' - - torch ; extra == 'docs' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/7e/c3/587cc9aa8d4742cd690da79460081e7d834499e07e8b2bd2ccc4c66928df/optree-0.19.0-cp314-cp314-win_amd64.whl - name: optree - version: 0.19.0 - sha256: ff773c852122cef6dcae68b5e252a20aaf5d2986f78e278d747e226e7829d44e - requires_dist: - - typing-extensions>=4.6.0 - - typing-extensions>=4.12.0 ; python_full_version >= '3.13' - - jax ; extra == 'jax' - - numpy ; extra == 'numpy' - - torch ; extra == 'torch' - - cpplint ; extra == 'lint' - - doc8 ; extra == 'lint' - - mypy ; extra == 'lint' - - pre-commit ; extra == 'lint' - - pyenchant ; extra == 'lint' - - pylint[spelling] ; extra == 'lint' - - ruff ; extra == 'lint' - - xdoctest ; extra == 'lint' - - pytest ; extra == 'test' - - pytest-cov ; extra == 'test' - - covdefaults ; extra == 'test' - - rich ; extra == 'test' - - typing-extensions==4.6.0 ; python_full_version < '3.13' and sys_platform == 'linux' and extra == 'test' - - typing-extensions==4.6.0 ; python_full_version < '3.13' and sys_platform == 'darwin' and extra == 'test' - - typing-extensions==4.6.0 ; python_full_version < '3.13' and sys_platform == 'win32' and extra == 'test' - - typing-extensions==4.12.0 ; python_full_version >= '3.13' and sys_platform == 'linux' and extra == 'test' - - typing-extensions==4.12.0 ; python_full_version >= '3.13' and sys_platform == 'darwin' and extra == 'test' - - typing-extensions==4.12.0 ; python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'test' - - sphinx~=8.0 ; extra == 'docs' - - sphinx-autoapi ; extra == 'docs' - - sphinx-autobuild ; extra == 'docs' - - sphinx-autodoc-typehints ; extra == 'docs' - - sphinx-copybutton ; extra == 'docs' - - sphinx-rtd-theme ; extra == 'docs' - - sphinxcontrib-bibtex ; extra == 'docs' - - docutils ; extra == 'docs' - - jax[cpu] ; extra == 'docs' - - numpy ; extra == 'docs' - - torch ; extra == 'docs' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/fe/16/00261f20f467b9e8950a76ec1749f01359bf47f2fc3dac5e206de99835c0/optree-0.19.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - name: optree - version: 0.19.0 - sha256: fb220bb85128c8de71aeffb9c38be817569e4bca413b38d5e0de11ba6471ef4a - requires_dist: - - typing-extensions>=4.6.0 - - typing-extensions>=4.12.0 ; python_full_version >= '3.13' - - jax ; extra == 'jax' - - numpy ; extra == 'numpy' - - torch ; extra == 'torch' - - cpplint ; extra == 'lint' - - doc8 ; extra == 'lint' - - mypy ; extra == 'lint' - - pre-commit ; extra == 'lint' - - pyenchant ; extra == 'lint' - - pylint[spelling] ; extra == 'lint' - - ruff ; extra == 'lint' - - xdoctest ; extra == 'lint' - - pytest ; extra == 'test' - - pytest-cov ; extra == 'test' - - covdefaults ; extra == 'test' - - rich ; extra == 'test' - - typing-extensions==4.6.0 ; python_full_version < '3.13' and sys_platform == 'linux' and extra == 'test' - - typing-extensions==4.6.0 ; python_full_version < '3.13' and sys_platform == 'darwin' and extra == 'test' - - typing-extensions==4.6.0 ; python_full_version < '3.13' and sys_platform == 'win32' and extra == 'test' - - typing-extensions==4.12.0 ; python_full_version >= '3.13' and sys_platform == 'linux' and extra == 'test' - - typing-extensions==4.12.0 ; python_full_version >= '3.13' and sys_platform == 'darwin' and extra == 'test' - - typing-extensions==4.12.0 ; python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'test' - - sphinx~=8.0 ; extra == 'docs' - - sphinx-autoapi ; extra == 'docs' - - sphinx-autobuild ; extra == 'docs' - - sphinx-autodoc-typehints ; extra == 'docs' - - sphinx-copybutton ; extra == 'docs' - - sphinx-rtd-theme ; extra == 'docs' - - sphinxcontrib-bibtex ; extra == 'docs' - - docutils ; extra == 'docs' - - jax[cpu] ; extra == 'docs' - - numpy ; extra == 'docs' - - torch ; extra == 'docs' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/12/df/172771902943af54bf661a8d102bdf2e7f932127968080632bda6054b62c/orjson-3.11.7-cp314-cp314-win_amd64.whl - name: orjson - version: 3.11.7 - sha256: 845c3e0d8ded9c9271cd79596b9b552448b885b97110f628fb687aee2eed11c1 - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/c2/8b/ecdad52d0b38d4b8f514be603e69ccd5eacf4e7241f972e37e79792212ec/orjson-3.11.7-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - name: orjson - version: 3.11.7 - sha256: a56df3239294ea5964adf074c54bcc4f0ccd21636049a2cf3ca9cf03b5d03cf1 - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/e9/1e/745565dca749813db9a093c5ebc4bac1a9475c64d54b95654336ac3ed961/orjson-3.11.7-cp314-cp314-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl - name: orjson - version: 3.11.7 - sha256: de0a37f21d0d364954ad5de1970491d7fbd0fb1ef7417d4d56a36dc01ba0c0a0 - requires_python: '>=3.10' + run_exports: {} + size: 20199810 + timestamp: 1778268389428 +- conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-15.2.0-hd446a21_119.conda + sha256: a2385f3611d5cd25378f9cf2367183320731709c067ddd08d43330d3170f15b8 + md5: bcfe7eae40158c3e355d2f9d3ed41230 + depends: + - __unix + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + run_exports: {} + size: 20765069 + timestamp: 1778268963689 +- conda: https://conda.anaconda.org/conda-forge/noarch/linkify-it-py-2.1.0-pyhcf101f3_0.conda + sha256: 991a82fbb64aba6d10719a017ce354e28df02ea5df1d9c7b0221da573c168d27 + md5: 1005e1f39083adad2384772e8e384e43 + depends: + - python >=3.10 + - uc-micro-py + license: MIT + license_family: MIT + purls: + - pkg:pypi/linkify-it-py?source=hash-mapping + run_exports: {} + size: 26062 + timestamp: 1772476821244 +- conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.2.0-pyhd8ed1ab_0.conda + sha256: 0c4c35376fe920714390d46e4b8d31c876d65f18e1655899e0763ec25f2a902f + md5: 6d03368f2b2b0a5fb6839df53b2eb5e0 + depends: + - mdurl >=0.1,<1 + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/markdown-it-py?source=hash-mapping + run_exports: {} + size: 69017 + timestamp: 1778169663339 +- conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.2-pyhd8ed1ab_0.conda + sha256: 35b43d7343f74452307fd018a1cca92b8f68961ff8e2ab6a81ce0a703c9a3764 + md5: 9acc1c385be401d533ff70ef5b50dae6 + depends: + - python >=3.10 + - traitlets + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/matplotlib-inline?source=hash-mapping + run_exports: {} + size: 15725 + timestamp: 1778264403247 +- conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.6.1-pyhd8ed1ab_0.conda + sha256: 49db23cbfb1c1d414a14d7540195208b994ebd747beba0f15c903f3a0a2dc446 + md5: ad6821df7a98510117db06e9a833281f + depends: + - markdown-it-py >=2.0.0,<5.0.0 + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/mdit-py-plugins?source=hash-mapping + run_exports: {} + size: 50460 + timestamp: 1778692223625 +- conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda + sha256: 78c1bbe1723449c52b7a9df1af2ee5f005209f67e40b6e1d3c7619127c43b1c7 + md5: 592132998493b3ff25fd7479396e8351 + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/mdurl?source=hash-mapping + run_exports: {} + size: 14465 + timestamp: 1733255681319 +- conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.3.1-pyhcf101f3_0.conda + sha256: 240fbb25ca907465df57fe5ba2b040fc868fa88dfa7da42741b3b8bd092b4f17 + md5: 1fe73f1762c2114c946cf2e7f074cc43 + depends: + - python >=3.10 + - typing_extensions + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/mistune?source=compressed-mapping + run_exports: {} + size: 86966 + timestamp: 1782128220984 +- conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda + sha256: d09c47c2cf456de5c09fa66d2c3c5035aa1fa228a1983a433c47b876aa16ce90 + md5: 37293a85a0f4f77bbd9cf7aaefc62609 + depends: + - python >=3.9 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/munkres?source=hash-mapping + run_exports: {} + size: 15851 + timestamp: 1749895533014 +- conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.22.1-pyhcf101f3_0.conda + sha256: dd2744a501f2db0aef084566bf3d0c2b312661dc91beb5a4cc97d27cdda0a959 + md5: 9450fb40fb1e147d0bcbdf07cd02ca96 + depends: + - python >=3.10 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/narwhals?source=compressed-mapping + run_exports: {} + size: 285532 + timestamp: 1780672242196 +- conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.11.0-pyhd8ed1ab_0.conda + sha256: eceb424236fbbb9b337a857fe5448307b57a2a3fb2db389ae37e7a8b8cdca2ab + md5: cf01a81d7960ad9c829bf2e794fcee9a + depends: + - jupyter_client >=7.0.0 + - jupyter_core >=5.4 + - nbformat >=5.2.0 + - python >=3.10 + - traitlets >=5.13 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/nbclient?source=compressed-mapping + run_exports: {} + size: 29138 + timestamp: 1780661039538 +- conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.17.1-pyhcf101f3_0.conda + sha256: ab2ac79c5892c5434d50b3542d96645bdaa06d025b6e03734be29200de248ac2 + md5: 2bce0d047658a91b99441390b9b27045 + depends: + - beautifulsoup4 + - bleach-with-css !=5.0.0 + - defusedxml + - importlib-metadata >=3.6 + - jinja2 >=3.0 + - jupyter_core >=4.7 + - jupyterlab_pygments + - markupsafe >=2.0 + - mistune >=2.0.3,<4 + - nbclient >=0.5.0 + - nbformat >=5.7 + - packaging + - pandocfilters >=1.4.1 + - pygments >=2.4.1 + - python >=3.10 + - traitlets >=5.1 + - python + constrains: + - pandoc >=2.9.2,<4.0.0 + - nbconvert ==7.17.1 *_0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/nbconvert?source=hash-mapping + run_exports: {} + size: 202229 + timestamp: 1775615493260 +- conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda + sha256: 7a5bd30a2e7ddd7b85031a5e2e14f290898098dc85bea5b3a5bf147c25122838 + md5: bbe1963f1e47f594070ffe87cdf612ea + depends: + - jsonschema >=2.6 + - jupyter_core >=4.12,!=5.0.* + - python >=3.9 + - python-fastjsonschema >=2.15 + - traitlets >=5.1 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/nbformat?source=hash-mapping + run_exports: {} + size: 100945 + timestamp: 1733402844974 +- conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio2-1.7.2-pyhcf101f3_0.conda + sha256: e6768ceef038f4d7e083de7e393f5dd7d672b937e2bda570b740f6399b686689 + md5: fcd832bfd4749e9b246112b6894f97fc + depends: + - python >=3.10 + - python + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/nest-asyncio2?source=hash-mapping + run_exports: {} + size: 15903 + timestamp: 1770973502283 +- conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda + sha256: f6a82172afc50e54741f6f84527ef10424326611503c64e359e25a19a8e4c1c6 + md5: a2c1eeadae7a309daed9d62c96012a2b + depends: + - python >=3.11 + - python + constrains: + - numpy >=1.25 + - scipy >=1.11.2 + - matplotlib-base >=3.8 + - pandas >=2.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/networkx?source=hash-mapping + run_exports: {} + size: 1587439 + timestamp: 1765215107045 +- conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda + sha256: 7b920e46b9f7a2d2aa6434222e5c8d739021dbc5cc75f32d124a8191d86f9056 + md5: e7f89ea5f7ea9401642758ff50a2d9c1 + depends: + - jupyter_server >=1.8,<3 + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/notebook-shim?source=hash-mapping + run_exports: {} + size: 16817 + timestamp: 1733408419340 - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda sha256: 1840bd90d25d4930d60f57b4f38d4e0ae3f5b8db2819638709c36098c6ba770c md5: e51f1e4089cad105b6cac64bd8166587 @@ -8309,310 +8895,22 @@ packages: license_family: APACHE purls: - pkg:pypi/overrides?source=hash-mapping + run_exports: {} size: 30139 timestamp: 1734587755455 -- conda: https://conda.anaconda.org/conda-forge/linux-64/p11-kit-0.26.2-h3435931_0.conda - sha256: f63962d24d81d4fafa15112c03cd5db1fddadd520fdb2ad7ec71a1689e8e694f - md5: 312989f1b7318c3763fffdc78df8474e - depends: - - __glibc >=2.17,<3.0.a0 - - libffi >=3.5.2,<3.6.0a0 - - libgcc >=14 - - libtasn1 >=4.21.0,<5.0a0 - license: MIT - license_family: MIT - purls: [] - size: 3831848 - timestamp: 1770417713801 -- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - sha256: c1fc0f953048f743385d31c468b4a678b3ad20caffdeaa94bed85ba63049fd58 - md5: b76541e68fea4d511b1ac46a28dcd2c6 +- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda + sha256: 3906abfb6511a3bb309e39b9b1b7bc38f50a723971de2395489fd1f379255890 + md5: 4c06a92e74452cfa53623a81592e8934 depends: - python >=3.8 - python license: Apache-2.0 license_family: APACHE purls: - - pkg:pypi/packaging?source=compressed-mapping - size: 72010 - timestamp: 1769093650580 -- pypi: https://files.pythonhosted.org/packages/09/f8/8ce132104074f977f907442790eaae24e27bce3b3b454e82faa3237ff098/pandas-3.0.1-cp314-cp314-win_amd64.whl - name: pandas - version: 3.0.1 - sha256: 93325b0fe372d192965f4cca88d97667f49557398bbf94abdda3bf1b591dbe66 - requires_dist: - - numpy>=1.26.0 ; python_full_version < '3.14' - - numpy>=2.3.3 ; python_full_version >= '3.14' - - python-dateutil>=2.8.2 - - tzdata ; sys_platform == 'win32' - - tzdata ; sys_platform == 'emscripten' - - hypothesis>=6.116.0 ; extra == 'test' - - pytest>=8.3.4 ; extra == 'test' - - pytest-xdist>=3.6.1 ; extra == 'test' - - pyarrow>=13.0.0 ; extra == 'pyarrow' - - bottleneck>=1.4.2 ; extra == 'performance' - - numba>=0.60.0 ; extra == 'performance' - - numexpr>=2.10.2 ; extra == 'performance' - - scipy>=1.14.1 ; extra == 'computation' - - xarray>=2024.10.0 ; extra == 'computation' - - fsspec>=2024.10.0 ; extra == 'fss' - - s3fs>=2024.10.0 ; extra == 'aws' - - gcsfs>=2024.10.0 ; extra == 'gcp' - - odfpy>=1.4.1 ; extra == 'excel' - - openpyxl>=3.1.5 ; extra == 'excel' - - python-calamine>=0.3.0 ; extra == 'excel' - - pyxlsb>=1.0.10 ; extra == 'excel' - - xlrd>=2.0.1 ; extra == 'excel' - - xlsxwriter>=3.2.0 ; extra == 'excel' - - pyarrow>=13.0.0 ; extra == 'parquet' - - pyarrow>=13.0.0 ; extra == 'feather' - - pyiceberg>=0.8.1 ; extra == 'iceberg' - - tables>=3.10.1 ; extra == 'hdf5' - - pyreadstat>=1.2.8 ; extra == 'spss' - - sqlalchemy>=2.0.36 ; extra == 'postgresql' - - psycopg2>=2.9.10 ; extra == 'postgresql' - - adbc-driver-postgresql>=1.2.0 ; extra == 'postgresql' - - sqlalchemy>=2.0.36 ; extra == 'mysql' - - pymysql>=1.1.1 ; extra == 'mysql' - - sqlalchemy>=2.0.36 ; extra == 'sql-other' - - adbc-driver-postgresql>=1.2.0 ; extra == 'sql-other' - - adbc-driver-sqlite>=1.2.0 ; extra == 'sql-other' - - beautifulsoup4>=4.12.3 ; extra == 'html' - - html5lib>=1.1 ; extra == 'html' - - lxml>=5.3.0 ; extra == 'html' - - lxml>=5.3.0 ; extra == 'xml' - - matplotlib>=3.9.3 ; extra == 'plot' - - jinja2>=3.1.5 ; extra == 'output-formatting' - - tabulate>=0.9.0 ; extra == 'output-formatting' - - pyqt5>=5.15.9 ; extra == 'clipboard' - - qtpy>=2.4.2 ; extra == 'clipboard' - - zstandard>=0.23.0 ; extra == 'compression' - - pytz>=2024.2 ; extra == 'timezone' - - adbc-driver-postgresql>=1.2.0 ; extra == 'all' - - adbc-driver-sqlite>=1.2.0 ; extra == 'all' - - beautifulsoup4>=4.12.3 ; extra == 'all' - - bottleneck>=1.4.2 ; extra == 'all' - - fastparquet>=2024.11.0 ; extra == 'all' - - fsspec>=2024.10.0 ; extra == 'all' - - gcsfs>=2024.10.0 ; extra == 'all' - - html5lib>=1.1 ; extra == 'all' - - hypothesis>=6.116.0 ; extra == 'all' - - jinja2>=3.1.5 ; extra == 'all' - - lxml>=5.3.0 ; extra == 'all' - - matplotlib>=3.9.3 ; extra == 'all' - - numba>=0.60.0 ; extra == 'all' - - numexpr>=2.10.2 ; extra == 'all' - - odfpy>=1.4.1 ; extra == 'all' - - openpyxl>=3.1.5 ; extra == 'all' - - psycopg2>=2.9.10 ; extra == 'all' - - pyarrow>=13.0.0 ; extra == 'all' - - pyiceberg>=0.8.1 ; extra == 'all' - - pymysql>=1.1.1 ; extra == 'all' - - pyqt5>=5.15.9 ; extra == 'all' - - pyreadstat>=1.2.8 ; extra == 'all' - - pytest>=8.3.4 ; extra == 'all' - - pytest-xdist>=3.6.1 ; extra == 'all' - - python-calamine>=0.3.0 ; extra == 'all' - - pytz>=2024.2 ; extra == 'all' - - pyxlsb>=1.0.10 ; extra == 'all' - - qtpy>=2.4.2 ; extra == 'all' - - scipy>=1.14.1 ; extra == 'all' - - s3fs>=2024.10.0 ; extra == 'all' - - sqlalchemy>=2.0.36 ; extra == 'all' - - tables>=3.10.1 ; extra == 'all' - - tabulate>=0.9.0 ; extra == 'all' - - xarray>=2024.10.0 ; extra == 'all' - - xlrd>=2.0.1 ; extra == 'all' - - xlsxwriter>=3.2.0 ; extra == 'all' - - zstandard>=0.23.0 ; extra == 'all' - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/55/77/6ea82043db22cb0f2bbfe7198da3544000ddaadb12d26be36e19b03a2dc5/pandas-3.0.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - name: pandas - version: 3.0.1 - sha256: c1a9f55e0f46951874b863d1f3906dcb57df2d9be5c5847ba4dfb55b2c815249 - requires_dist: - - numpy>=1.26.0 ; python_full_version < '3.14' - - numpy>=2.3.3 ; python_full_version >= '3.14' - - python-dateutil>=2.8.2 - - tzdata ; sys_platform == 'win32' - - tzdata ; sys_platform == 'emscripten' - - hypothesis>=6.116.0 ; extra == 'test' - - pytest>=8.3.4 ; extra == 'test' - - pytest-xdist>=3.6.1 ; extra == 'test' - - pyarrow>=13.0.0 ; extra == 'pyarrow' - - bottleneck>=1.4.2 ; extra == 'performance' - - numba>=0.60.0 ; extra == 'performance' - - numexpr>=2.10.2 ; extra == 'performance' - - scipy>=1.14.1 ; extra == 'computation' - - xarray>=2024.10.0 ; extra == 'computation' - - fsspec>=2024.10.0 ; extra == 'fss' - - s3fs>=2024.10.0 ; extra == 'aws' - - gcsfs>=2024.10.0 ; extra == 'gcp' - - odfpy>=1.4.1 ; extra == 'excel' - - openpyxl>=3.1.5 ; extra == 'excel' - - python-calamine>=0.3.0 ; extra == 'excel' - - pyxlsb>=1.0.10 ; extra == 'excel' - - xlrd>=2.0.1 ; extra == 'excel' - - xlsxwriter>=3.2.0 ; extra == 'excel' - - pyarrow>=13.0.0 ; extra == 'parquet' - - pyarrow>=13.0.0 ; extra == 'feather' - - pyiceberg>=0.8.1 ; extra == 'iceberg' - - tables>=3.10.1 ; extra == 'hdf5' - - pyreadstat>=1.2.8 ; extra == 'spss' - - sqlalchemy>=2.0.36 ; extra == 'postgresql' - - psycopg2>=2.9.10 ; extra == 'postgresql' - - adbc-driver-postgresql>=1.2.0 ; extra == 'postgresql' - - sqlalchemy>=2.0.36 ; extra == 'mysql' - - pymysql>=1.1.1 ; extra == 'mysql' - - sqlalchemy>=2.0.36 ; extra == 'sql-other' - - adbc-driver-postgresql>=1.2.0 ; extra == 'sql-other' - - adbc-driver-sqlite>=1.2.0 ; extra == 'sql-other' - - beautifulsoup4>=4.12.3 ; extra == 'html' - - html5lib>=1.1 ; extra == 'html' - - lxml>=5.3.0 ; extra == 'html' - - lxml>=5.3.0 ; extra == 'xml' - - matplotlib>=3.9.3 ; extra == 'plot' - - jinja2>=3.1.5 ; extra == 'output-formatting' - - tabulate>=0.9.0 ; extra == 'output-formatting' - - pyqt5>=5.15.9 ; extra == 'clipboard' - - qtpy>=2.4.2 ; extra == 'clipboard' - - zstandard>=0.23.0 ; extra == 'compression' - - pytz>=2024.2 ; extra == 'timezone' - - adbc-driver-postgresql>=1.2.0 ; extra == 'all' - - adbc-driver-sqlite>=1.2.0 ; extra == 'all' - - beautifulsoup4>=4.12.3 ; extra == 'all' - - bottleneck>=1.4.2 ; extra == 'all' - - fastparquet>=2024.11.0 ; extra == 'all' - - fsspec>=2024.10.0 ; extra == 'all' - - gcsfs>=2024.10.0 ; extra == 'all' - - html5lib>=1.1 ; extra == 'all' - - hypothesis>=6.116.0 ; extra == 'all' - - jinja2>=3.1.5 ; extra == 'all' - - lxml>=5.3.0 ; extra == 'all' - - matplotlib>=3.9.3 ; extra == 'all' - - numba>=0.60.0 ; extra == 'all' - - numexpr>=2.10.2 ; extra == 'all' - - odfpy>=1.4.1 ; extra == 'all' - - openpyxl>=3.1.5 ; extra == 'all' - - psycopg2>=2.9.10 ; extra == 'all' - - pyarrow>=13.0.0 ; extra == 'all' - - pyiceberg>=0.8.1 ; extra == 'all' - - pymysql>=1.1.1 ; extra == 'all' - - pyqt5>=5.15.9 ; extra == 'all' - - pyreadstat>=1.2.8 ; extra == 'all' - - pytest>=8.3.4 ; extra == 'all' - - pytest-xdist>=3.6.1 ; extra == 'all' - - python-calamine>=0.3.0 ; extra == 'all' - - pytz>=2024.2 ; extra == 'all' - - pyxlsb>=1.0.10 ; extra == 'all' - - qtpy>=2.4.2 ; extra == 'all' - - scipy>=1.14.1 ; extra == 'all' - - s3fs>=2024.10.0 ; extra == 'all' - - sqlalchemy>=2.0.36 ; extra == 'all' - - tables>=3.10.1 ; extra == 'all' - - tabulate>=0.9.0 ; extra == 'all' - - xarray>=2024.10.0 ; extra == 'all' - - xlrd>=2.0.1 ; extra == 'all' - - xlsxwriter>=3.2.0 ; extra == 'all' - - zstandard>=0.23.0 ; extra == 'all' - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/72/3a/5b39b51c64159f470f1ca3b1c2a87da290657ca022f7cd11442606f607d1/pandas-3.0.1-cp314-cp314-macosx_11_0_arm64.whl - name: pandas - version: 3.0.1 - sha256: 3b66857e983208654294bb6477b8a63dee26b37bdd0eb34d010556e91261784f - requires_dist: - - numpy>=1.26.0 ; python_full_version < '3.14' - - numpy>=2.3.3 ; python_full_version >= '3.14' - - python-dateutil>=2.8.2 - - tzdata ; sys_platform == 'win32' - - tzdata ; sys_platform == 'emscripten' - - hypothesis>=6.116.0 ; extra == 'test' - - pytest>=8.3.4 ; extra == 'test' - - pytest-xdist>=3.6.1 ; extra == 'test' - - pyarrow>=13.0.0 ; extra == 'pyarrow' - - bottleneck>=1.4.2 ; extra == 'performance' - - numba>=0.60.0 ; extra == 'performance' - - numexpr>=2.10.2 ; extra == 'performance' - - scipy>=1.14.1 ; extra == 'computation' - - xarray>=2024.10.0 ; extra == 'computation' - - fsspec>=2024.10.0 ; extra == 'fss' - - s3fs>=2024.10.0 ; extra == 'aws' - - gcsfs>=2024.10.0 ; extra == 'gcp' - - odfpy>=1.4.1 ; extra == 'excel' - - openpyxl>=3.1.5 ; extra == 'excel' - - python-calamine>=0.3.0 ; extra == 'excel' - - pyxlsb>=1.0.10 ; extra == 'excel' - - xlrd>=2.0.1 ; extra == 'excel' - - xlsxwriter>=3.2.0 ; extra == 'excel' - - pyarrow>=13.0.0 ; extra == 'parquet' - - pyarrow>=13.0.0 ; extra == 'feather' - - pyiceberg>=0.8.1 ; extra == 'iceberg' - - tables>=3.10.1 ; extra == 'hdf5' - - pyreadstat>=1.2.8 ; extra == 'spss' - - sqlalchemy>=2.0.36 ; extra == 'postgresql' - - psycopg2>=2.9.10 ; extra == 'postgresql' - - adbc-driver-postgresql>=1.2.0 ; extra == 'postgresql' - - sqlalchemy>=2.0.36 ; extra == 'mysql' - - pymysql>=1.1.1 ; extra == 'mysql' - - sqlalchemy>=2.0.36 ; extra == 'sql-other' - - adbc-driver-postgresql>=1.2.0 ; extra == 'sql-other' - - adbc-driver-sqlite>=1.2.0 ; extra == 'sql-other' - - beautifulsoup4>=4.12.3 ; extra == 'html' - - html5lib>=1.1 ; extra == 'html' - - lxml>=5.3.0 ; extra == 'html' - - lxml>=5.3.0 ; extra == 'xml' - - matplotlib>=3.9.3 ; extra == 'plot' - - jinja2>=3.1.5 ; extra == 'output-formatting' - - tabulate>=0.9.0 ; extra == 'output-formatting' - - pyqt5>=5.15.9 ; extra == 'clipboard' - - qtpy>=2.4.2 ; extra == 'clipboard' - - zstandard>=0.23.0 ; extra == 'compression' - - pytz>=2024.2 ; extra == 'timezone' - - adbc-driver-postgresql>=1.2.0 ; extra == 'all' - - adbc-driver-sqlite>=1.2.0 ; extra == 'all' - - beautifulsoup4>=4.12.3 ; extra == 'all' - - bottleneck>=1.4.2 ; extra == 'all' - - fastparquet>=2024.11.0 ; extra == 'all' - - fsspec>=2024.10.0 ; extra == 'all' - - gcsfs>=2024.10.0 ; extra == 'all' - - html5lib>=1.1 ; extra == 'all' - - hypothesis>=6.116.0 ; extra == 'all' - - jinja2>=3.1.5 ; extra == 'all' - - lxml>=5.3.0 ; extra == 'all' - - matplotlib>=3.9.3 ; extra == 'all' - - numba>=0.60.0 ; extra == 'all' - - numexpr>=2.10.2 ; extra == 'all' - - odfpy>=1.4.1 ; extra == 'all' - - openpyxl>=3.1.5 ; extra == 'all' - - psycopg2>=2.9.10 ; extra == 'all' - - pyarrow>=13.0.0 ; extra == 'all' - - pyiceberg>=0.8.1 ; extra == 'all' - - pymysql>=1.1.1 ; extra == 'all' - - pyqt5>=5.15.9 ; extra == 'all' - - pyreadstat>=1.2.8 ; extra == 'all' - - pytest>=8.3.4 ; extra == 'all' - - pytest-xdist>=3.6.1 ; extra == 'all' - - python-calamine>=0.3.0 ; extra == 'all' - - pytz>=2024.2 ; extra == 'all' - - pyxlsb>=1.0.10 ; extra == 'all' - - qtpy>=2.4.2 ; extra == 'all' - - scipy>=1.14.1 ; extra == 'all' - - s3fs>=2024.10.0 ; extra == 'all' - - sqlalchemy>=2.0.36 ; extra == 'all' - - tables>=3.10.1 ; extra == 'all' - - tabulate>=0.9.0 ; extra == 'all' - - xarray>=2024.10.0 ; extra == 'all' - - xlrd>=2.0.1 ; extra == 'all' - - xlsxwriter>=3.2.0 ; extra == 'all' - - zstandard>=0.23.0 ; extra == 'all' - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/7c/2f/f91e4eee21585ff548e83358332d5632ee49f6b2dcd96cb5dca4e0468951/pandas_stubs-3.0.0.260204-py3-none-any.whl - name: pandas-stubs - version: 3.0.0.260204 - sha256: 5ab9e4d55a6e2752e9720828564af40d48c4f709e6a2c69b743014a6fcb6c241 - requires_dist: - - numpy>=1.23.5 - requires_python: '>=3.11' + - pkg:pypi/packaging?source=hash-mapping + run_exports: {} + size: 91574 + timestamp: 1777103621679 - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 sha256: 2bb9ba9857f4774b85900c2562f7e711d08dd48e2add9bee4e1612fbee27e16f md5: 457c2c8c08e54905d6954e79cb5b5db9 @@ -8622,11 +8920,12 @@ packages: license_family: BSD purls: - pkg:pypi/pandocfilters?source=hash-mapping + run_exports: {} size: 11627 timestamp: 1631603397334 -- conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda - sha256: 42b2d77ccea60752f3aa929a6413a7835aaacdbbde679f2f5870a744fa836b94 - md5: 97c1ce2fffa1209e7afb432810ec6e12 +- conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.7-pyhcf101f3_0.conda + sha256: 611882f7944b467281c46644ffde6c5145d1a7730388bcde26e7e86819b0998e + md5: 39894c952938276405a1bd30e4ce2caf depends: - python >=3.10 - python @@ -8634,22 +8933,9 @@ packages: license_family: MIT purls: - pkg:pypi/parso?source=hash-mapping - size: 82287 - timestamp: 1770676243987 -- pypi: https://files.pythonhosted.org/packages/b1/29/c028a0731e202035f0e2e0bfbf1a3e46ad6c628cbb17f6f1cc9eea5d9ff1/pathlib_abc-0.5.2-py3-none-any.whl - name: pathlib-abc - version: 0.5.2 - sha256: 4c9d94cf1b23af417ce7c0417b43333b06a106c01000b286c99de230d95eefbb - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/51/fe/53ac0cd932db5dcaf55961bc7cb7afdca8d80d8cc7406ed661f0c7dc111a/pdbp-1.8.2-py3-none-any.whl - name: pdbp - version: 1.8.2 - sha256: d4fd05e177636b5ccd0b2e03e378cec57afc06149e5fd975de6f8ddb3d0109a8 - requires_dist: - - pygments>=2.19.2 - - tabcompleter>=1.4.0 - - colorama>=0.4.6 ; sys_platform == 'win32' - requires_python: '>=3.8' + run_exports: {} + size: 82472 + timestamp: 1777722955579 - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda sha256: 202af1de83b585d36445dc1fda94266697341994d1a3328fabde4989e1b3d07a md5: d0d408b1f18883a944376da5cf8101ea @@ -8659,81 +8945,12 @@ packages: license: ISC purls: - pkg:pypi/pexpect?source=hash-mapping + run_exports: {} size: 53561 timestamp: 1733302019362 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.1.1-py314h8ec4b1a_0.conda - sha256: 9e6ec8f3213e8b7d64b0ad45f84c51a2c9eba4398efda31e196c9a56186133ee - md5: 79678378ae235e24b3aa83cee1b38207 - depends: - - python - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - libwebp-base >=1.6.0,<2.0a0 - - zlib-ng >=2.3.3,<2.4.0a0 - - python_abi 3.14.* *_cp314 - - tk >=8.6.13,<8.7.0a0 - - libjpeg-turbo >=3.1.2,<4.0a0 - - libxcb >=1.17.0,<2.0a0 - - openjpeg >=2.5.4,<3.0a0 - - lcms2 >=2.18,<3.0a0 - - libtiff >=4.7.1,<4.8.0a0 - - libfreetype >=2.14.1 - - libfreetype6 >=2.14.1 - license: HPND - purls: - - pkg:pypi/pillow?source=hash-mapping - size: 1073026 - timestamp: 1770794002408 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-12.1.1-py314hab283cf_0.conda - sha256: 1659ff6e8ea6170a90fb8eb7291990d12bba270aab18176defa0717ed34ce186 - md5: bcb38a8005e93a3b240a0dbcf28df87a - depends: - - python - - python 3.14.* *_cp314 - - __osx >=11.0 - - libxcb >=1.17.0,<2.0a0 - - zlib-ng >=2.3.3,<2.4.0a0 - - openjpeg >=2.5.4,<3.0a0 - - tk >=8.6.13,<8.7.0a0 - - libfreetype >=2.14.1 - - libfreetype6 >=2.14.1 - - libjpeg-turbo >=3.1.2,<4.0a0 - - libtiff >=4.7.1,<4.8.0a0 - - python_abi 3.14.* *_cp314 - - lcms2 >=2.18,<3.0a0 - - libwebp-base >=1.6.0,<2.0a0 - license: HPND - purls: - - pkg:pypi/pillow?source=hash-mapping - size: 996187 - timestamp: 1770794152243 -- conda: https://conda.anaconda.org/conda-forge/win-64/pillow-12.1.1-py314h61b30b5_0.conda - sha256: f4387e480970e0f429a0505d668bc677e84ef118d3db2cba56b547d1bd2c2dbf - md5: 819c3d15988cea0f2c599b405023f55d - depends: - - python - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - - ucrt >=10.0.20348.0 - - libxcb >=1.17.0,<2.0a0 - - tk >=8.6.13,<8.7.0a0 - - libfreetype >=2.14.1 - - libfreetype6 >=2.14.1 - - libtiff >=4.7.1,<4.8.0a0 - - openjpeg >=2.5.4,<3.0a0 - - libjpeg-turbo >=3.1.2,<4.0a0 - - lcms2 >=2.18,<3.0a0 - - libwebp-base >=1.6.0,<2.0a0 - - python_abi 3.14.* *_cp314 - - zlib-ng >=2.3.3,<2.4.0a0 - license: HPND - purls: - - pkg:pypi/pillow?source=hash-mapping - size: 973701 - timestamp: 1770794018422 -- conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda - sha256: 0289f0a38337ee201d984f8f31f11f6ef076cfbbfd0ab9181d12d9d1d099bf46 - md5: 82c1787f2a65c0155ef9652466ee98d6 +- conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.10.0-pyhcf101f3_0.conda + sha256: 9e5e1fd3506ccfc4d444fc4d2d39b0ed097d5d0e3bd3d4bdf6bcc81aaf66860d + md5: 2c5ef45db85d34799771629bd5860fd7 depends: - python >=3.10 - python @@ -8741,59 +8958,9 @@ packages: license_family: MIT purls: - pkg:pypi/platformdirs?source=compressed-mapping - size: 25646 - timestamp: 1773199142345 -- pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl - name: plotly - version: 6.6.0 - sha256: 8d6daf0f87412e0c0bfe72e809d615217ab57cc715899a1e5145135a7800d1d0 - requires_dist: - - narwhals>=1.15.1 - - packaging - - numpy ; extra == 'express' - - kaleido>=1.1.0 ; extra == 'kaleido' - - pytest ; extra == 'dev-core' - - requests ; extra == 'dev-core' - - ruff==0.11.12 ; extra == 'dev-core' - - plotly[dev-core] ; extra == 'dev-build' - - build ; extra == 'dev-build' - - jupyter ; extra == 'dev-build' - - plotly[dev-build] ; extra == 'dev-optional' - - plotly[kaleido] ; extra == 'dev-optional' - - anywidget ; extra == 'dev-optional' - - colorcet ; extra == 'dev-optional' - - fiona<=1.9.6 ; python_full_version < '3.9' and extra == 'dev-optional' - - geopandas ; extra == 'dev-optional' - - inflect ; extra == 'dev-optional' - - numpy ; extra == 'dev-optional' - - orjson ; extra == 'dev-optional' - - pandas ; extra == 'dev-optional' - - pdfrw ; extra == 'dev-optional' - - pillow ; extra == 'dev-optional' - - plotly-geo ; extra == 'dev-optional' - - polars[timezone] ; extra == 'dev-optional' - - pyarrow ; extra == 'dev-optional' - - pyshp ; extra == 'dev-optional' - - pytz ; extra == 'dev-optional' - - scikit-image ; extra == 'dev-optional' - - scipy ; extra == 'dev-optional' - - shapely ; extra == 'dev-optional' - - statsmodels ; extra == 'dev-optional' - - vaex ; python_full_version < '3.10' and extra == 'dev-optional' - - xarray ; extra == 'dev-optional' - - plotly[dev-optional] ; extra == 'dev' - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - name: pluggy - version: 1.6.0 - sha256: e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746 - requires_dist: - - pre-commit ; extra == 'dev' - - tox ; extra == 'dev' - - pytest ; extra == 'testing' - - pytest-benchmark ; extra == 'testing' - - coverage ; extra == 'testing' - requires_python: '>=3.9' + run_exports: {} + size: 26308 + timestamp: 1779972894916 - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda sha256: e14aafa63efa0528ca99ba568eaf506eb55a0371d12e6250aaaa61718d2eb62e md5: d7585b6550ad04c8c5e21097ada2888e @@ -8803,57 +8970,22 @@ packages: license: MIT license_family: MIT purls: - - pkg:pypi/pluggy?source=compressed-mapping + - pkg:pypi/pluggy?source=hash-mapping + run_exports: {} size: 25877 timestamp: 1764896838868 -- conda: https://conda.anaconda.org/conda-forge/linux-64/prek-0.3.6-hb17b654_0.conda - sha256: a26627790776987421ecb130240dfd5c26e706d6811e173f7bdf3029bec13e1e - md5: 903cc9fafd676d3c13d9c1e71a52231a - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - constrains: - - __glibc >=2.17 - license: MIT - license_family: MIT - purls: [] - size: 5638792 - timestamp: 1773659796309 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/prek-0.3.6-h6fdd925_0.conda - sha256: 9acb2a629c5cf8b423532a18bd385fa1e2b06b587ced8055e0075d2232a6903a - md5: 4b7ebf6d9d829849c264171a00cb7395 - depends: - - __osx >=11.0 - constrains: - - __osx >=11.0 - license: MIT - license_family: MIT - purls: [] - size: 5203524 - timestamp: 1773660234368 -- conda: https://conda.anaconda.org/conda-forge/win-64/prek-0.3.6-h18a1a76_0.conda - sha256: 31984152d475d6854a64786b9308dd180e2a4b014fea519b4959513e51dcab26 - md5: 042c6b6426dbeef69ec7aef3864427bf - depends: - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - - ucrt >=10.0.20348.0 - license: MIT - license_family: MIT - purls: [] - size: 5913998 - timestamp: 1773659816255 -- conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.24.1-pyhd8ed1ab_0.conda - sha256: 75b2589159d04b3fb92db16d9970b396b9124652c784ab05b66f584edc97f283 - md5: 7526d20621b53440b0aae45d4797847e +- conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.25.0-pyhd8ed1ab_0.conda + sha256: 4d7ec90d4f9c1f3b4a50623fefe4ebba69f651b102b373f7c0e9dbbfa43d495c + md5: a11ab1f31af799dd93c3a39881528884 depends: - python >=3.10 license: Apache-2.0 license_family: Apache purls: - - pkg:pypi/prometheus-client?source=compressed-mapping - size: 56634 - timestamp: 1768476602855 + - pkg:pypi/prometheus-client?source=hash-mapping + run_exports: {} + size: 57113 + timestamp: 1775771465170 - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda sha256: 4817651a276016f3838957bfdf963386438c70761e9faec7749d411635979bae md5: edb16f14d920fb3faf17f5ce582942d6 @@ -8866,84 +8998,9 @@ packages: license_family: BSD purls: - pkg:pypi/prompt-toolkit?source=hash-mapping + run_exports: {} size: 273927 timestamp: 1756321848365 -- conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.2-py314h0f05182_0.conda - sha256: f15574ed6c8c8ed8c15a0c5a00102b1efe8b867c0bd286b498cd98d95bd69ae5 - md5: 4f225a966cfee267a79c5cb6382bd121 - depends: - - python - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - python_abi 3.14.* *_cp314 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/psutil?source=hash-mapping - size: 231303 - timestamp: 1769678156552 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-7.2.2-py314ha14b1ff_0.conda - sha256: e0f31c053eb11803d63860c213b2b1b57db36734f5f84a3833606f7c91fedff9 - md5: fc4c7ab223873eee32080d51600ce7e7 - depends: - - python - - __osx >=11.0 - - python 3.14.* *_cp314 - - python_abi 3.14.* *_cp314 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/psutil?source=hash-mapping - size: 245502 - timestamp: 1769678303655 -- conda: https://conda.anaconda.org/conda-forge/win-64/psutil-7.2.2-py314hc5dbbe4_0.conda - sha256: 17c8274ce5a32c9793f73a5a0094bd6188f3a13026a93147655143d4df034214 - md5: fd539ac231820f64066839251aa9fa48 - depends: - - python - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - - ucrt >=10.0.20348.0 - - python_abi 3.14.* *_cp314 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/psutil?source=hash-mapping - size: 249950 - timestamp: 1769678167309 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda - sha256: 9c88f8c64590e9567c6c80823f0328e58d3b1efb0e1c539c0315ceca764e0973 - md5: b3c17d95b5a10c6e64a21fa17573e70e - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - license: MIT - license_family: MIT - purls: [] - size: 8252 - timestamp: 1726802366959 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-hd74edd7_1002.conda - sha256: 8ed65e17fbb0ca944bfb8093b60086e3f9dd678c3448b5de212017394c247ee3 - md5: 415816daf82e0b23a736a069a75e9da7 - depends: - - __osx >=11.0 - license: MIT - license_family: MIT - purls: [] - size: 8381 - timestamp: 1726802424786 -- conda: https://conda.anaconda.org/conda-forge/win-64/pthread-stubs-0.4-h0e40799_1002.conda - sha256: 7e446bafb4d692792310ed022fe284e848c6a868c861655a92435af7368bae7b - md5: 3c8f2573569bb816483e5cf57efbbe29 - depends: - - libgcc >=13 - - libwinpthread >=12.0.0.r4.gg4f2fc60ca - - ucrt >=10.0.20348.0 - license: MIT - license_family: MIT - purls: [] - size: 9389 - timestamp: 1726802555076 - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda sha256: a7713dfe30faf17508ec359e0bc7e0983f5d94682492469bd462cdaae9c64d83 md5: 7d9daffbb8d8e0af0f769dbbcd173a54 @@ -8952,6 +9009,7 @@ packages: license: ISC purls: - pkg:pypi/ptyprocess?source=hash-mapping + run_exports: {} size: 19457 timestamp: 1733302371990 - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda @@ -8963,6 +9021,7 @@ packages: license_family: MIT purls: - pkg:pypi/pure-eval?source=hash-mapping + run_exports: {} size: 16668 timestamp: 1733569518868 - conda: https://conda.anaconda.org/conda-forge/noarch/pybaum-0.1.3-pyhd8ed1ab_1.conda @@ -8974,63 +9033,34 @@ packages: license_family: MIT purls: - pkg:pypi/pybaum?source=hash-mapping + run_exports: {} size: 15654 timestamp: 1736947913720 -- conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - sha256: 79db7928d13fab2d892592223d7570f5061c192f27b9febd1a418427b719acc6 - md5: 12c566707c80111f9799308d9e265aef +- conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-3.0-pyhcf101f3_0.conda + sha256: e27e0473fc6723311a0bd48b89b616fa1b996a2f7a2b555338cbbcfb9c640568 + md5: 9c5491066224083c41b6d5635ed7107b depends: - - python >=3.9 + - python >=3.10 - python license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/pycparser?source=hash-mapping - size: 110100 - timestamp: 1733195786147 -- conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - sha256: 5577623b9f6685ece2697c6eb7511b4c9ac5fb607c9babc2646c811b428fd46a - md5: 6b6ece66ebcae2d5f326c77ef2c5a066 + - pkg:pypi/pycparser?source=compressed-mapping + run_exports: {} + size: 55886 + timestamp: 1779293633166 +- conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda + sha256: cf70b2f5ad9ae472b71235e5c8a736c9316df3705746de419b59d442e8348e86 + md5: 16c18772b340887160c79a6acc022db0 depends: - - python >=3.9 + - python >=3.10 license: BSD-2-Clause license_family: BSD purls: - pkg:pypi/pygments?source=hash-mapping - size: 889287 - timestamp: 1750615908735 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-core-12.1-py314h3a4d195_0.conda - sha256: df5af268c5a74b7160d772c263ece6f43257faff571783443e34b5f1d5a61cf2 - md5: 75a84fc8337557347252cc4fd3ba2a93 - depends: - - __osx >=11.0 - - libffi >=3.5.2,<3.6.0a0 - - python >=3.14,<3.15.0a0 - - python >=3.14,<3.15.0a0 *_cp314 - - python_abi 3.14.* *_cp314 - - setuptools - license: MIT - license_family: MIT - purls: - - pkg:pypi/pyobjc-core?source=hash-mapping - size: 483374 - timestamp: 1763151489724 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-framework-cocoa-12.1-py314h36abed7_0.conda - sha256: aa76ee4328d0514d7c1c455dcd2d3b547db1c59797e54ce0a3f27de5b970e508 - md5: 4219bb3408016e22316cf8b443b5ef93 - depends: - - __osx >=11.0 - - libffi >=3.5.2,<3.6.0a0 - - pyobjc-core 12.1.* - - python >=3.14,<3.15.0a0 - - python >=3.14,<3.15.0a0 *_cp314 - - python_abi 3.14.* *_cp314 - license: MIT - license_family: MIT - purls: - - pkg:pypi/pyobjc-framework-cocoa?source=hash-mapping - size: 374792 - timestamp: 1763160601898 + run_exports: {} + size: 893031 + timestamp: 1774796815820 - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda sha256: 417fba4783e528ee732afa82999300859b065dc59927344b4859c64aae7182de md5: 3687cc0b82a8b4c17e1f0eb7e47163d5 @@ -9041,19 +9071,9 @@ packages: license_family: MIT purls: - pkg:pypi/pyparsing?source=hash-mapping + run_exports: {} size: 110893 timestamp: 1769003998136 -- pypi: https://files.pythonhosted.org/packages/5a/dc/491b7661614ab97483abf2056be1deee4dc2490ecbf7bff9ab5cdbac86e1/pyreadline3-3.5.4-py3-none-any.whl - name: pyreadline3 - version: 3.5.4 - sha256: eaf8e6cc3c49bcccf145fc6067ba8643d1df34d604a1ec0eccbf7a18e6d3fae6 - requires_dist: - - build ; extra == 'dev' - - flake8 ; extra == 'dev' - - mypy ; extra == 'dev' - - pytest ; extra == 'dev' - - twine ; extra == 'dev' - requires_python: '>=3.8' - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda sha256: d016e04b0e12063fbee4a2d5fbb9b39a8d191b5a0042f0b8459188aedeabb0ca md5: e2fd202833c4a981ce8a65974fe4abd1 @@ -9065,6 +9085,7 @@ packages: license_family: BSD purls: - pkg:pypi/pysocks?source=hash-mapping + run_exports: {} size: 21784 timestamp: 1733217448189 - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda @@ -9077,70 +9098,20 @@ packages: license_family: BSD purls: - pkg:pypi/pysocks?source=hash-mapping + run_exports: {} size: 21085 timestamp: 1733217331982 -- pypi: https://files.pythonhosted.org/packages/80/b2/bba963dfce0fcbc5020a4f8b4361e132390c4bd78b46cfc7ae355e678b96/pytask-0.5.8-py3-none-any.whl - name: pytask - version: 0.5.8 - sha256: 217ed6b3e12140c442afa5e333bbb91e98f8d4fd5c746d323fbbf9778985a92f - requires_dist: - - attrs>=21.3.0 - - click>=8.1.8,!=8.2.0 - - click-default-group>=1.2.4 - - networkx>=2.4.0 - - optree>=0.9.0 - - packaging>=23.0.0 - - pluggy>=1.3.0 - - rich>=13.8.0 - - sqlalchemy>=2.0.31 - - tomli>=1 ; python_full_version < '3.11' - - typing-extensions>=4.8.0 ; python_full_version < '3.11' - - universal-pathlib>=0.2.2 - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/88/b9/19ecce5c57114b703b97378ded69ffde1f9f9d471d4db361bbfa6105861e/pytask_parallel-0.5.2-py3-none-any.whl - name: pytask-parallel - version: 0.5.2 - sha256: b5bf37a2aad4381d4c29484f87ef8623155c8cd1dff57af4952ccf894ae9898f - requires_dist: - - attrs>=21.3.0 - - click>=8.1.8,!=8.2.0 - - cloudpickle - - loky - - pluggy>=1.0.0 - - pytask>=0.5.2 - - rich - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl - name: pytest - version: 9.0.2 - sha256: 711ffd45bf766d5264d487b917733b453d917afd2b0ad65223959f59089f875b - requires_dist: - - colorama>=0.4 ; sys_platform == 'win32' - - exceptiongroup>=1 ; python_full_version < '3.11' - - iniconfig>=1.0.1 - - packaging>=22 - - pluggy>=1.5,<2 - - pygments>=2.7.2 - - tomli>=1 ; python_full_version < '3.11' - - argcomplete ; extra == 'dev' - - attrs>=19.2 ; extra == 'dev' - - hypothesis>=3.56 ; extra == 'dev' - - mock ; extra == 'dev' - - requests ; extra == 'dev' - - setuptools ; extra == 'dev' - - xmlschema ; extra == 'dev' - requires_python: '>=3.10' -- conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.2-pyhcf101f3_0.conda - sha256: 9e749fb465a8bedf0184d8b8996992a38de351f7c64e967031944978de03a520 - md5: 2b694bad8a50dc2f712f5368de866480 +- conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda + sha256: 430051d80765207a7d782b2b188230ba1489d35c6e75fd9903f76cb9fda4af16 + md5: 64c98a12c4e23eb238bf66bbecafdf3c depends: + - colorama - pygments >=2.7.2 - python >=3.10 - iniconfig >=1.0.1 - packaging >=22 - pluggy >=1.5,<2 - tomli >=1 - - colorama >=0.4 - exceptiongroup >=1 - python constrains: @@ -9148,12 +9119,13 @@ packages: license: MIT license_family: MIT purls: - - pkg:pypi/pytest?source=hash-mapping - size: 299581 - timestamp: 1765062031645 -- conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-7.0.0-pyhcf101f3_1.conda - sha256: d0f45586aad48ef604590188c33c83d76e4fc6370ac569ba0900906b24fd6a26 - md5: 6891acad5e136cb62a8c2ed2679d6528 + - pkg:pypi/pytest?source=compressed-mapping + run_exports: {} + size: 306724 + timestamp: 1782127176429 +- conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-7.1.0-pyhcf101f3_0.conda + sha256: 44e42919397bd00bfaa47358a6ca93d4c21493a8c18600176212ec21a8d25ca5 + md5: 67d1790eefa81ed305b89d8e314c7923 depends: - coverage >=7.10.6 - pluggy >=1.2 @@ -9164,8 +9136,9 @@ packages: license_family: MIT purls: - pkg:pypi/pytest-cov?source=hash-mapping - size: 29016 - timestamp: 1757612051022 + run_exports: {} + size: 29559 + timestamp: 1774139250481 - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-memray-1.8.0-pyhd8ed1ab_0.conda sha256: 03f9bc063bf51454bfcad859918dbb08673fb848d8d7b12f1b8130fa59fec9fa md5: 8ec1201026003252fb9a9c1c67c10ebf @@ -9177,15 +9150,9 @@ packages: license_family: APACHE purls: - pkg:pypi/pytest-memray?source=hash-mapping + run_exports: {} size: 22422 timestamp: 1755587168132 -- pypi: https://files.pythonhosted.org/packages/fa/b6/3127540ecdf1464a00e5a01ee60a1b09175f6913f0644ac748494d9c4b21/pytest_timeout-2.4.0-py3-none-any.whl - name: pytest-timeout - version: 2.4.0 - sha256: c42667e5cdadb151aeb5b26d114aff6bdf5a907f176a007a30b940d3d865b5c2 - requires_dist: - - pytest>=7.0.0 - requires_python: '>=3.7' - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.8.0-pyhd8ed1ab_0.conda sha256: b7b58a5be090883198411337b99afb6404127809c3d1c9f96e99b59f36177a96 md5: 8375cfbda7c57fbceeda18229be10417 @@ -9199,86 +9166,9 @@ packages: license_family: MIT purls: - pkg:pypi/pytest-xdist?source=hash-mapping + run_exports: {} size: 39300 timestamp: 1751452761594 -- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.3-h32b2ec7_101_cp314.conda - build_number: 101 - sha256: cb0628c5f1732f889f53a877484da98f5a0e0f47326622671396fb4f2b0cd6bd - md5: c014ad06e60441661737121d3eae8a60 - depends: - - __glibc >=2.17,<3.0.a0 - - bzip2 >=1.0.8,<2.0a0 - - ld_impl_linux-64 >=2.36.1 - - libexpat >=2.7.3,<3.0a0 - - libffi >=3.5.2,<3.6.0a0 - - libgcc >=14 - - liblzma >=5.8.2,<6.0a0 - - libmpdec >=4.0.0,<5.0a0 - - libsqlite >=3.51.2,<4.0a0 - - libuuid >=2.41.3,<3.0a0 - - libzlib >=1.3.1,<2.0a0 - - ncurses >=6.5,<7.0a0 - - openssl >=3.5.5,<4.0a0 - - python_abi 3.14.* *_cp314 - - readline >=8.3,<9.0a0 - - tk >=8.6.13,<8.7.0a0 - - tzdata - - zstd >=1.5.7,<1.6.0a0 - license: Python-2.0 - purls: [] - size: 36702440 - timestamp: 1770675584356 - python_site_packages_path: lib/python3.14/site-packages -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.14.3-h4c637c5_101_cp314.conda - build_number: 101 - sha256: fccce2af62d11328d232df9f6bbf63464fd45f81f718c661757f9c628c4378ce - md5: 753c8d0447677acb7ddbcc6e03e82661 - depends: - - __osx >=11.0 - - bzip2 >=1.0.8,<2.0a0 - - libexpat >=2.7.3,<3.0a0 - - libffi >=3.5.2,<3.6.0a0 - - liblzma >=5.8.2,<6.0a0 - - libmpdec >=4.0.0,<5.0a0 - - libsqlite >=3.51.2,<4.0a0 - - libzlib >=1.3.1,<2.0a0 - - ncurses >=6.5,<7.0a0 - - openssl >=3.5.5,<4.0a0 - - python_abi 3.14.* *_cp314 - - readline >=8.3,<9.0a0 - - tk >=8.6.13,<8.7.0a0 - - tzdata - - zstd >=1.5.7,<1.6.0a0 - license: Python-2.0 - purls: [] - size: 13522698 - timestamp: 1770675365241 - python_site_packages_path: lib/python3.14/site-packages -- conda: https://conda.anaconda.org/conda-forge/win-64/python-3.14.3-h4b44e0e_101_cp314.conda - build_number: 101 - sha256: 3f99d83bfd95b9bdae64a42a1e4bf5131dc20b724be5ac8a9a7e1ac2c0f006d7 - md5: 7ec2be7eaf59f83f3e5617665f3fbb2e - depends: - - bzip2 >=1.0.8,<2.0a0 - - libexpat >=2.7.3,<3.0a0 - - libffi >=3.5.2,<3.6.0a0 - - liblzma >=5.8.2,<6.0a0 - - libmpdec >=4.0.0,<5.0a0 - - libsqlite >=3.51.2,<4.0a0 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.5.5,<4.0a0 - - python_abi 3.14.* *_cp314 - - tk >=8.6.13,<8.7.0a0 - - tzdata - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - - zstd >=1.5.7,<1.6.0a0 - license: Python-2.0 - purls: [] - size: 18273230 - timestamp: 1770675442998 - python_site_packages_path: Lib/site-packages - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda sha256: d6a17ece93bbd5139e02d2bd7dbfa80bee1a4261dced63f65f679121686bf664 md5: 5b8d21249ff20967101ffa321cab24e8 @@ -9290,6 +9180,7 @@ packages: license_family: APACHE purls: - pkg:pypi/python-dateutil?source=hash-mapping + run_exports: {} size: 233310 timestamp: 1751104122689 - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda @@ -9302,40 +9193,45 @@ packages: license_family: BSD purls: - pkg:pypi/fastjsonschema?source=hash-mapping + run_exports: {} size: 244628 timestamp: 1755304154927 -- conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.3-h4df99d1_101.conda - sha256: 233aebd94c704ac112afefbb29cf4170b7bc606e22958906f2672081bc50638a - md5: 235765e4ea0d0301c75965985163b5a1 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.6-h4df99d1_100.conda + sha256: 84c129bdd6abcecac42a948f2670d17fe735d02d3a5a483a9b1f1bc33ba38c28 + md5: 224f69f177eb5aae6c9a6052846bf609 depends: - - cpython 3.14.3.* + - cpython 3.14.6.* - python_abi * *_cp314 license: Python-2.0 purls: [] - size: 50062 - timestamp: 1770674497152 -- conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda - sha256: 4790787fe1f4e8da616edca4acf6a4f8ed4e7c6967aa31b920208fc8f95efcca - md5: a61bf9ec79426938ff785eb69dbb1960 + run_exports: {} + size: 49315 + timestamp: 1781254664376 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-4.1.0-pyhd8ed1ab_0.conda + sha256: a0dfe07d0bc1d8c47a38b79ad4a8eb1bc7b86fb33ee5293ebb45dfdc46191f4e + md5: 982ed0cbfc0fe09f25861e3d111e9717 depends: - - python >=3.6 + - python >=3.10 + - typing_extensions license: BSD-2-Clause license_family: BSD purls: - pkg:pypi/python-json-logger?source=hash-mapping - size: 13383 - timestamp: 1677079727691 -- conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.3-pyhd8ed1ab_0.conda - sha256: 467134ef39f0af2dbb57d78cb3e4821f01003488d331a8dd7119334f4f47bfbd - md5: 7ead57407430ba33f681738905278d03 + run_exports: {} + size: 19249 + timestamp: 1781036004580 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2026.2-pyhd8ed1ab_0.conda + sha256: e943f9c15a6bdba2e1b9f423ab913b3f6b02197b0ef9f8e6b7464d78b59965b9 + md5: f6ad7450fc21e00ecc23812baed6d2e4 depends: - python >=3.10 license: Apache-2.0 license_family: APACHE purls: - - pkg:pypi/tzdata?source=compressed-mapping - size: 143542 - timestamp: 1765719982349 + - pkg:pypi/tzdata?source=hash-mapping + run_exports: {} + size: 146639 + timestamp: 1777068997932 - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda build_number: 8 sha256: ad6d2e9ac39751cc0529dd1566a26751a0bf2542adb0c232533d32e176e21db5 @@ -9345,196 +9241,9 @@ packages: license: BSD-3-Clause license_family: BSD purls: [] + run_exports: {} size: 6989 timestamp: 1752805904792 -- conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-311-py314h8f8f202_1.conda - sha256: 6918a8067f296f3c65d43e84558170c9e6c3f4dd735cfe041af41a7fdba7b171 - md5: 2d7b7ba21e8a8ced0eca553d4d53f773 - depends: - - python - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - - ucrt >=10.0.20348.0 - - python_abi 3.14.* *_cp314 - license: PSF-2.0 - license_family: PSF - purls: - - pkg:pypi/pywin32?source=hash-mapping - size: 6713155 - timestamp: 1756487145487 -- conda: https://conda.anaconda.org/conda-forge/win-64/pywinpty-2.0.15-py314h51f0985_1.conda - sha256: 048e20641da680aedaab285640a2aca56b7b5baf7a18f8f164f2796e13628c1f - md5: dd84e8748bd3c85a5c751b0576488080 - depends: - - python >=3.14.0rc3,<3.15.0a0 - - python_abi 3.14.* *_cp314 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - - winpty - license: MIT - license_family: MIT - purls: - - pkg:pypi/pywinpty?source=hash-mapping - size: 216325 - timestamp: 1759557436167 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py314h67df5f8_1.conda - sha256: b318fb070c7a1f89980ef124b80a0b5ccf3928143708a85e0053cde0169c699d - md5: 2035f68f96be30dc60a5dfd7452c7941 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - python >=3.14,<3.15.0a0 - - python_abi 3.14.* *_cp314 - - yaml >=0.2.5,<0.3.0a0 - license: MIT - license_family: MIT - purls: - - pkg:pypi/pyyaml?source=compressed-mapping - size: 202391 - timestamp: 1770223462836 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.3-py314h6e9b3f0_1.conda - sha256: 95f385f9606e30137cf0b5295f63855fd22223a4cf024d306cf9098ea1c4a252 - md5: dcf51e564317816cb8d546891019b3ab - depends: - - __osx >=11.0 - - python >=3.14,<3.15.0a0 - - python >=3.14,<3.15.0a0 *_cp314 - - python_abi 3.14.* *_cp314 - - yaml >=0.2.5,<0.3.0a0 - license: MIT - license_family: MIT - purls: - - pkg:pypi/pyyaml?source=hash-mapping - size: 189475 - timestamp: 1770223788648 -- conda: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.3-py314h2359020_1.conda - sha256: a2aff34027aa810ff36a190b75002d2ff6f9fbef71ec66e567616ac3a679d997 - md5: 0cd9b88826d0f8db142071eb830bce56 - depends: - - python >=3.14,<3.15.0a0 - - python_abi 3.14.* *_cp314 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - - yaml >=0.2.5,<0.3.0a0 - license: MIT - license_family: MIT - purls: - - pkg:pypi/pyyaml?source=compressed-mapping - size: 181257 - timestamp: 1770223460931 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda - noarch: python - sha256: be66c1f85c3b48137200d62c12d918f4f8ad329423daef04fed292818efd3c28 - md5: 082985717303dab433c976986c674b35 - depends: - - python - - libgcc >=14 - - libstdcxx >=14 - - __glibc >=2.17,<3.0.a0 - - zeromq >=4.3.5,<4.4.0a0 - - _python_abi3_support 1.* - - cpython >=3.12 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/pyzmq?source=compressed-mapping - size: 211567 - timestamp: 1771716961404 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312h022ad19_2.conda - noarch: python - sha256: 2f31f799a46ed75518fae0be75ecc8a1b84360dbfd55096bc2fe8bd9c797e772 - md5: 2f6b79700452ef1e91f45a99ab8ffe5a - depends: - - python - - libcxx >=19 - - __osx >=11.0 - - _python_abi3_support 1.* - - cpython >=3.12 - - zeromq >=4.3.5,<4.4.0a0 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/pyzmq?source=compressed-mapping - size: 191641 - timestamp: 1771717073430 -- conda: https://conda.anaconda.org/conda-forge/win-64/pyzmq-27.1.0-py312h343a6d4_2.conda - noarch: python - sha256: d84bcc19a945ca03d1fd794be3e9896ab6afc9f691d58d9c2da514abe584d4df - md5: eb1ec67a70b4d479f7dd76e6c8fe7575 - depends: - - python - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - - ucrt >=10.0.20348.0 - - zeromq >=4.3.5,<4.3.6.0a0 - - _python_abi3_support 1.* - - cpython >=3.12 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/pyzmq?source=hash-mapping - size: 183235 - timestamp: 1771716967192 -- conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda - sha256: 776363493bad83308ba30bcb88c2552632581b143e8ee25b1982c8c743e73abc - md5: 353823361b1d27eb3960efb076dfcaf6 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc-ng >=12 - - libstdcxx-ng >=12 - license: LicenseRef-Qhull - purls: [] - size: 552937 - timestamp: 1720813982144 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/qhull-2020.2-h420ef59_5.conda - sha256: 873ac689484262a51fd79bc6103c1a1bedbf524924d7f0088fb80703042805e4 - md5: 6483b1f59526e05d7d894e466b5b6924 - depends: - - __osx >=11.0 - - libcxx >=16 - license: LicenseRef-Qhull - purls: [] - size: 516376 - timestamp: 1720814307311 -- conda: https://conda.anaconda.org/conda-forge/win-64/qhull-2020.2-hc790b64_5.conda - sha256: 887d53486a37bd870da62b8fa2ebe3993f912ad04bd755e7ed7c47ced97cbaa8 - md5: 854fbdff64b572b5c0b470f334d34c11 - depends: - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: LicenseRef-Qhull - purls: [] - size: 1377020 - timestamp: 1720814433486 -- conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - sha256: 12ffde5a6f958e285aa22c191ca01bbd3d6e710aa852e00618fa6ddc59149002 - md5: d7d95fc8287ea7bf33e0e7116d2b95ec - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - ncurses >=6.5,<7.0a0 - license: GPL-3.0-only - license_family: GPL - purls: [] - size: 345073 - timestamp: 1765813471974 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - sha256: a77010528efb4b548ac2a4484eaf7e1c3907f2aec86123ed9c5212ae44502477 - md5: f8381319127120ce51e081dce4865cf4 - depends: - - __osx >=11.0 - - ncurses >=6.5,<7.0a0 - license: GPL-3.0-only - license_family: GPL - purls: [] - size: 313930 - timestamp: 1765813902568 - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda sha256: 0577eedfb347ff94d0f2fa6c052c502989b028216996b45c7f21236f25864414 md5: 870293df500ca7e18bedefa5838a22ab @@ -9548,26 +9257,28 @@ packages: license_family: MIT purls: - pkg:pypi/referencing?source=hash-mapping + run_exports: {} size: 51788 timestamp: 1760379115194 -- conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda - sha256: 7813c38b79ae549504b2c57b3f33394cea4f2ad083f0994d2045c2e24cb538c5 - md5: c65df89a0b2e321045a9e01d1337b182 +- conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda + sha256: 1715246b19c9f85ee022933b4845f2fc14ac9184981b7b7d9b728bec8e9588da + md5: 4a85203c1d80c1059086ae860836ffb9 depends: - python >=3.10 - - certifi >=2017.4.17 + - certifi >=2023.5.7 - charset-normalizer >=2,<4 - idna >=2.5,<4 - - urllib3 >=1.21.1,<3 + - urllib3 >=1.26,<3 - python constrains: - - chardet >=3.0.2,<6 + - chardet >=3.0.2,<8 license: Apache-2.0 license_family: APACHE purls: - pkg:pypi/requests?source=compressed-mapping - size: 63602 - timestamp: 1766926974520 + run_exports: {} + size: 68709 + timestamp: 1778851103479 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda sha256: 2e4372f600490a6e0b3bac60717278448e323cab1c0fecd5f43f7c56535a99c5 md5: 36de09a8d3e5d5e6f4ee63af49e59706 @@ -9578,6 +9289,7 @@ packages: license_family: MIT purls: - pkg:pypi/rfc3339-validator?source=hash-mapping + run_exports: {} size: 10209 timestamp: 1733600040800 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 @@ -9589,6 +9301,7 @@ packages: license_family: MIT purls: - pkg:pypi/rfc3986-validator?source=hash-mapping + run_exports: {} size: 7818 timestamp: 1598024297745 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda @@ -9602,20 +9315,12 @@ packages: license_family: MIT purls: - pkg:pypi/rfc3987-syntax?source=hash-mapping + run_exports: {} size: 22913 timestamp: 1752876729969 -- pypi: https://files.pythonhosted.org/packages/14/25/b208c5683343959b670dc001595f2f3737e051da617f66c31f7c4fa93abc/rich-14.3.3-py3-none-any.whl - name: rich - version: 14.3.3 - sha256: 793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d - requires_dist: - - ipywidgets>=7.5.1,<9 ; extra == 'jupyter' - - markdown-it-py>=2.2.0 - - pygments>=2.13.0,<3.0.0 - requires_python: '>=3.8.0' -- conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.3-pyhcf101f3_0.conda - sha256: b06ce84d6a10c266811a7d3adbfa1c11f13393b91cc6f8a5b468277d90be9590 - md5: 7a6289c50631d620652f5045a63eb573 +- conda: https://conda.anaconda.org/conda-forge/noarch/rich-15.0.0-pyhcf101f3_0.conda + sha256: 3d6ba2c0fcdac3196ba2f0615b4104e532525ffa1335b50a2878be5ff488814a + md5: 0242025a3c804966bf71aa04eee82f66 depends: - markdown-it-py >=2.2.0 - pygments >=2.13.0,<3.0.0 @@ -9625,135 +9330,23 @@ packages: license: MIT license_family: MIT purls: - - pkg:pypi/rich?source=compressed-mapping - size: 208472 - timestamp: 1771572730357 -- conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.30.0-py314h2e6c369_0.conda - sha256: e53b0cbf3b324eaa03ca1fe1a688fdf4ab42cea9c25270b0a7307d8aaaa4f446 - md5: c1c368b5437b0d1a68f372ccf01cb133 + - pkg:pypi/rich?source=hash-mapping + run_exports: {} + size: 208577 + timestamp: 1775991661559 +- conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-2.1.0-pyh5552912_1.conda + sha256: 8fc024bf1a7b99fc833b131ceef4bef8c235ad61ecb95a71a6108be2ccda63e8 + md5: b70e2d44e6aa2beb69ba64206a16e4c6 depends: + - __osx + - pyobjc-framework-cocoa + - python >=3.10 - python - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - python_abi 3.14.* *_cp314 - constrains: - - __glibc >=2.17 - license: MIT - license_family: MIT - purls: - - pkg:pypi/rpds-py?source=hash-mapping - size: 376121 - timestamp: 1764543122774 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/rpds-py-0.30.0-py314haad56a0_0.conda - sha256: e161dd97403b8b8a083d047369a5cf854557dba1204d29e2f0250f5ac4403925 - md5: 76a4f88d1b7748c477abf3c341edc64c - depends: - - python - - __osx >=11.0 - - python 3.14.* *_cp314 - - python_abi 3.14.* *_cp314 - constrains: - - __osx >=11.0 - license: MIT - license_family: MIT - purls: - - pkg:pypi/rpds-py?source=hash-mapping - size: 350976 - timestamp: 1764543169524 -- conda: https://conda.anaconda.org/conda-forge/win-64/rpds-py-0.30.0-py314h9f07db2_0.conda - sha256: e4435368c5c25076dc0f5918ba531c5a92caee8e0e2f9912ef6810049cf00db2 - md5: e86531e278ad304438e530953cd55d14 - depends: - - python - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - - ucrt >=10.0.20348.0 - - python_abi 3.14.* *_cp314 - license: MIT - license_family: MIT - purls: - - pkg:pypi/rpds-py?source=hash-mapping - size: 235780 - timestamp: 1764543046065 -- conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.17.1-py314hf07bd8e_0.conda - sha256: 1ae427836d7979779c9005388a05993a3addabcc66c4422694639a4272d7d972 - md5: d0510124f87c75403090e220db1e9d41 - depends: - - __glibc >=2.17,<3.0.a0 - - libblas >=3.9.0,<4.0a0 - - libcblas >=3.9.0,<4.0a0 - - libgcc >=14 - - libgfortran - - libgfortran5 >=14.3.0 - - liblapack >=3.9.0,<4.0a0 - - libstdcxx >=14 - - numpy <2.7 - - numpy >=1.23,<3 - - numpy >=1.25.2 - - python >=3.14,<3.15.0a0 - - python_abi 3.14.* *_cp314 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/scipy?source=compressed-mapping - size: 17225275 - timestamp: 1771880751368 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/scipy-1.17.1-py314hfc1f868_0.conda - sha256: 6ca2abcaff2cd071aabaabd82b10a87fc7de3a4619f6c98820cc28e90cc2cb20 - md5: 7806ce54b78b0b11517b465a3398e910 - depends: - - __osx >=11.0 - - libblas >=3.9.0,<4.0a0 - - libcblas >=3.9.0,<4.0a0 - - libcxx >=19 - - libgfortran - - libgfortran5 >=14.3.0 - - liblapack >=3.9.0,<4.0a0 - - numpy <2.7 - - numpy >=1.23,<3 - - numpy >=1.25.2 - - python >=3.14,<3.15.0a0 - - python >=3.14,<3.15.0a0 *_cp314 - - python_abi 3.14.* *_cp314 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/scipy?source=hash-mapping - size: 13986990 - timestamp: 1771881110844 -- conda: https://conda.anaconda.org/conda-forge/win-64/scipy-1.17.1-py314h221f224_0.conda - sha256: d9a7b6d3a306195eef4db814614a74746aae4b63e570f6db15769bd28d19a957 - md5: cfcd38938ee0137f4bf0ca824dfb0887 - depends: - - libblas >=3.9.0,<4.0a0 - - libcblas >=3.9.0,<4.0a0 - - liblapack >=3.9.0,<4.0a0 - - numpy <2.7 - - numpy >=1.23,<3 - - numpy >=1.25.2 - - python >=3.14,<3.15.0a0 - - python_abi 3.14.* *_cp314 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/scipy?source=hash-mapping - size: 14970549 - timestamp: 1771881565717 -- conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-2.1.0-pyh5552912_1.conda - sha256: 8fc024bf1a7b99fc833b131ceef4bef8c235ad61ecb95a71a6108be2ccda63e8 - md5: b70e2d44e6aa2beb69ba64206a16e4c6 - depends: - - __osx - - pyobjc-framework-cocoa - - python >=3.10 - - python - license: BSD-3-Clause - license_family: BSD + license: BSD-3-Clause + license_family: BSD purls: - pkg:pypi/send2trash?source=hash-mapping + run_exports: {} size: 22519 timestamp: 1770937603551 - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-2.1.0-pyh6dadd2b_1.conda @@ -9768,6 +9361,7 @@ packages: license_family: BSD purls: - pkg:pypi/send2trash?source=hash-mapping + run_exports: {} size: 22864 timestamp: 1770937641143 - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-2.1.0-pyha191276_1.conda @@ -9781,6 +9375,7 @@ packages: license_family: BSD purls: - pkg:pypi/send2trash?source=hash-mapping + run_exports: {} size: 24108 timestamp: 1770937597662 - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda @@ -9791,14 +9386,10 @@ packages: license: MIT license_family: MIT purls: - - pkg:pypi/setuptools?source=compressed-mapping + - pkg:pypi/setuptools?source=hash-mapping + run_exports: {} size: 639697 timestamp: 1773074868565 -- pypi: https://files.pythonhosted.org/packages/05/5b/83e1ff87eb60ca706972f7e02e15c0b33396e7bdbd080069a5d1b53cf0d8/simplejson-3.20.2-py3-none-any.whl - name: simplejson - version: 3.20.2 - sha256: 3b6bb7fb96efd673eac2e4235200bfffdc2353ad12c54117e1e4e2fc485ac017 - requires_python: '>=2.5,!=3.0.*,!=3.1.*,!=3.2.*' - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda sha256: 458227f759d5e3fcec5d9b7acce54e10c9e1f4f4b7ec978f3bfd54ce4ee9853d md5: 3339e3b65d58accf4ca4fb8748ab16b3 @@ -9809,24 +9400,9 @@ packages: license_family: MIT purls: - pkg:pypi/six?source=hash-mapping + run_exports: {} size: 18455 timestamp: 1753199211006 -- pypi: ./ - name: skillmodels - version: 0.0.24.dev242+g859d7ecae - sha256: 4f390213c39753657a315f50f7597b22802fe529305722f787011d8fd2e88b1c - requires_dist: - - dags>=0.5.1 - - jax>=0.9 - - jupyter-book>=2 - - kaleido>=1.2 - - numpy>=2.4 - - optimagic>=0.5.3 - - pandas>=3 - - plotly>=6.6 - - pytask-parallel>=0.5.2 - - pytask>=0.5.8 - requires_python: '>=3.14,<3.15' - conda: https://conda.anaconda.org/conda-forge/noarch/snakeviz-2.2.2-pyhd8ed1ab_1.conda sha256: 833326122c18887b338262c13365cb146b6702c79d72da74a1c6b8af4c50e162 md5: 421b7a950e384949ca1b0f04f0751ce0 @@ -9837,6 +9413,7 @@ packages: license_family: BSD purls: - pkg:pypi/snakeviz?source=hash-mapping + run_exports: {} size: 171545 timestamp: 1735289409501 - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda @@ -9848,133 +9425,21 @@ packages: license_family: Apache purls: - pkg:pypi/sniffio?source=hash-mapping + run_exports: {} size: 15698 timestamp: 1762941572482 -- conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.3-pyhd8ed1ab_0.conda - sha256: 23b71ecf089967d2900126920e7f9ff18cdcef82dbff3e2f54ffa360243a17ac - md5: 18de09b20462742fe093ba39185d9bac +- conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.4-pyhd8ed1ab_0.conda + sha256: 2afa5fe9331c09b4c4689ddf6ace8fc16c837eae547c57dab325b844072fdd77 + md5: 9e21f087f087f805debe877d88e00a14 depends: - python >=3.10 license: MIT license_family: MIT purls: - - pkg:pypi/soupsieve?source=hash-mapping - size: 38187 - timestamp: 1769034509657 -- pypi: https://files.pythonhosted.org/packages/95/7e/e83615cb63f80047f18e61e31e8e32257d39458426c23006deeaf48f463b/sqlalchemy-2.0.48-cp314-cp314-win_amd64.whl - name: sqlalchemy - version: 2.0.48 - sha256: 144921da96c08feb9e2b052c5c5c1d0d151a292c6135623c6b2c041f2a45f9e0 - requires_dist: - - importlib-metadata ; python_full_version < '3.8' - - greenlet>=1 ; platform_machine == 'AMD64' or platform_machine == 'WIN32' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'ppc64le' or platform_machine == 'win32' or platform_machine == 'x86_64' - - typing-extensions>=4.6.0 - - greenlet>=1 ; extra == 'asyncio' - - mypy>=0.910 ; extra == 'mypy' - - pyodbc ; extra == 'mssql' - - pymssql ; extra == 'mssql-pymssql' - - pyodbc ; extra == 'mssql-pyodbc' - - mysqlclient>=1.4.0 ; extra == 'mysql' - - mysql-connector-python ; extra == 'mysql-connector' - - mariadb>=1.0.1,!=1.1.2,!=1.1.5,!=1.1.10 ; extra == 'mariadb-connector' - - cx-oracle>=8 ; extra == 'oracle' - - oracledb>=1.0.1 ; extra == 'oracle-oracledb' - - psycopg2>=2.7 ; extra == 'postgresql' - - pg8000>=1.29.1 ; extra == 'postgresql-pg8000' - - greenlet>=1 ; extra == 'postgresql-asyncpg' - - asyncpg ; extra == 'postgresql-asyncpg' - - psycopg2-binary ; extra == 'postgresql-psycopg2binary' - - psycopg2cffi ; extra == 'postgresql-psycopg2cffi' - - psycopg>=3.0.7 ; extra == 'postgresql-psycopg' - - psycopg[binary]>=3.0.7 ; extra == 'postgresql-psycopgbinary' - - pymysql ; extra == 'pymysql' - - greenlet>=1 ; extra == 'aiomysql' - - aiomysql>=0.2.0 ; extra == 'aiomysql' - - greenlet>=1 ; extra == 'aioodbc' - - aioodbc ; extra == 'aioodbc' - - greenlet>=1 ; extra == 'asyncmy' - - asyncmy>=0.2.3,!=0.2.4,!=0.2.6 ; extra == 'asyncmy' - - greenlet>=1 ; extra == 'aiosqlite' - - aiosqlite ; extra == 'aiosqlite' - - typing-extensions!=3.10.0.1 ; extra == 'aiosqlite' - - sqlcipher3-binary ; extra == 'sqlcipher' - requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/f2/5e/327428a034407651a048f5e624361adf3f9fbac9d0fa98e981e9c6ff2f5e/sqlalchemy-2.0.48-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: sqlalchemy - version: 2.0.48 - sha256: 426c5ca86415d9b8945c7073597e10de9644802e2ff502b8e1f11a7a2642856b - requires_dist: - - importlib-metadata ; python_full_version < '3.8' - - greenlet>=1 ; platform_machine == 'AMD64' or platform_machine == 'WIN32' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'ppc64le' or platform_machine == 'win32' or platform_machine == 'x86_64' - - typing-extensions>=4.6.0 - - greenlet>=1 ; extra == 'asyncio' - - mypy>=0.910 ; extra == 'mypy' - - pyodbc ; extra == 'mssql' - - pymssql ; extra == 'mssql-pymssql' - - pyodbc ; extra == 'mssql-pyodbc' - - mysqlclient>=1.4.0 ; extra == 'mysql' - - mysql-connector-python ; extra == 'mysql-connector' - - mariadb>=1.0.1,!=1.1.2,!=1.1.5,!=1.1.10 ; extra == 'mariadb-connector' - - cx-oracle>=8 ; extra == 'oracle' - - oracledb>=1.0.1 ; extra == 'oracle-oracledb' - - psycopg2>=2.7 ; extra == 'postgresql' - - pg8000>=1.29.1 ; extra == 'postgresql-pg8000' - - greenlet>=1 ; extra == 'postgresql-asyncpg' - - asyncpg ; extra == 'postgresql-asyncpg' - - psycopg2-binary ; extra == 'postgresql-psycopg2binary' - - psycopg2cffi ; extra == 'postgresql-psycopg2cffi' - - psycopg>=3.0.7 ; extra == 'postgresql-psycopg' - - psycopg[binary]>=3.0.7 ; extra == 'postgresql-psycopgbinary' - - pymysql ; extra == 'pymysql' - - greenlet>=1 ; extra == 'aiomysql' - - aiomysql>=0.2.0 ; extra == 'aiomysql' - - greenlet>=1 ; extra == 'aioodbc' - - aioodbc ; extra == 'aioodbc' - - greenlet>=1 ; extra == 'asyncmy' - - asyncmy>=0.2.3,!=0.2.4,!=0.2.6 ; extra == 'asyncmy' - - greenlet>=1 ; extra == 'aiosqlite' - - aiosqlite ; extra == 'aiosqlite' - - typing-extensions!=3.10.0.1 ; extra == 'aiosqlite' - - sqlcipher3-binary ; extra == 'sqlcipher' - requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/f7/b3/f437eaa1cf028bb3c927172c7272366393e73ccd104dcf5b6963f4ab5318/sqlalchemy-2.0.48-cp314-cp314-macosx_11_0_arm64.whl - name: sqlalchemy - version: 2.0.48 - sha256: e2d0d88686e3d35a76f3e15a34e8c12d73fc94c1dea1cd55782e695cc14086dd - requires_dist: - - importlib-metadata ; python_full_version < '3.8' - - greenlet>=1 ; platform_machine == 'AMD64' or platform_machine == 'WIN32' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'ppc64le' or platform_machine == 'win32' or platform_machine == 'x86_64' - - typing-extensions>=4.6.0 - - greenlet>=1 ; extra == 'asyncio' - - mypy>=0.910 ; extra == 'mypy' - - pyodbc ; extra == 'mssql' - - pymssql ; extra == 'mssql-pymssql' - - pyodbc ; extra == 'mssql-pyodbc' - - mysqlclient>=1.4.0 ; extra == 'mysql' - - mysql-connector-python ; extra == 'mysql-connector' - - mariadb>=1.0.1,!=1.1.2,!=1.1.5,!=1.1.10 ; extra == 'mariadb-connector' - - cx-oracle>=8 ; extra == 'oracle' - - oracledb>=1.0.1 ; extra == 'oracle-oracledb' - - psycopg2>=2.7 ; extra == 'postgresql' - - pg8000>=1.29.1 ; extra == 'postgresql-pg8000' - - greenlet>=1 ; extra == 'postgresql-asyncpg' - - asyncpg ; extra == 'postgresql-asyncpg' - - psycopg2-binary ; extra == 'postgresql-psycopg2binary' - - psycopg2cffi ; extra == 'postgresql-psycopg2cffi' - - psycopg>=3.0.7 ; extra == 'postgresql-psycopg' - - psycopg[binary]>=3.0.7 ; extra == 'postgresql-psycopgbinary' - - pymysql ; extra == 'pymysql' - - greenlet>=1 ; extra == 'aiomysql' - - aiomysql>=0.2.0 ; extra == 'aiomysql' - - greenlet>=1 ; extra == 'aioodbc' - - aioodbc ; extra == 'aioodbc' - - greenlet>=1 ; extra == 'asyncmy' - - asyncmy>=0.2.3,!=0.2.4,!=0.2.6 ; extra == 'asyncmy' - - greenlet>=1 ; extra == 'aiosqlite' - - aiosqlite ; extra == 'aiosqlite' - - typing-extensions!=3.10.0.1 ; extra == 'aiosqlite' - - sqlcipher3-binary ; extra == 'sqlcipher' - requires_python: '>=3.7' + - pkg:pypi/soupsieve?source=compressed-mapping + run_exports: {} + size: 38802 + timestamp: 1779635534390 - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda sha256: 570da295d421661af487f1595045760526964f41471021056e993e73089e9c41 md5: b1b505328da7a6b246787df4b5a49fbc @@ -9987,6 +9452,7 @@ packages: license_family: MIT purls: - pkg:pypi/stack-data?source=hash-mapping + run_exports: {} size: 26988 timestamp: 1733569565672 - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.28-h4ee821c_9.conda @@ -9999,28 +9465,11 @@ packages: license: LGPL-2.0-or-later AND LGPL-2.0-or-later WITH exceptions AND GPL-2.0-or-later license_family: GPL purls: [] + run_exports: + strong: + - __glibc >=2.28,<3.0.a0 size: 24008591 timestamp: 1765578833462 -- pypi: https://files.pythonhosted.org/packages/65/44/bb509c3d2c0b5a87e7a5af1d5917a402a32ff026f777a6d7cb6990746cbb/tabcompleter-1.4.0-py3-none-any.whl - name: tabcompleter - version: 1.4.0 - sha256: d744aa735b49c0a6cc2fb8fcd40077fec47425e4388301010b14e6ce3311368b - requires_dist: - - pyreadline3 ; sys_platform == 'win32' - requires_python: '>=3.8' -- conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2022.3.0-h3155e25_2.conda - sha256: abd9a489f059fba85c8ffa1abdaa4d515d6de6a3325238b8e81203b913cf65a9 - md5: 0f9817ffbe25f9e69ceba5ea70c52606 - depends: - - libhwloc >=2.12.2,<2.12.3.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 155869 - timestamp: 1767886839029 - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyh6dadd2b_1.conda sha256: b375e8df0d5710717c31e7c8e93c025c37fa3504aea325c7a55509f64e5d4340 md5: e43ca10d61e55d0a8ec5d8c62474ec9e @@ -10034,6 +9483,7 @@ packages: license_family: BSD purls: - pkg:pypi/terminado?source=hash-mapping + run_exports: {} size: 23665 timestamp: 1766513806974 - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyhc90fa1f_1.conda @@ -10049,11 +9499,12 @@ packages: license_family: BSD purls: - pkg:pypi/terminado?source=hash-mapping + run_exports: {} size: 24749 timestamp: 1766513766867 -- conda: https://conda.anaconda.org/conda-forge/noarch/textual-8.1.1-pyhcf101f3_1.conda - sha256: c75250e2b34faa52324fc95fce138cded1bdb226547790cc9e437ab0e20c11b1 - md5: 4a666e8fdaa357e0fe397d16ca40bd7c +- conda: https://conda.anaconda.org/conda-forge/noarch/textual-8.2.7-pyhcf101f3_0.conda + sha256: 93c632039c8ebc6d72db2cbdec4becfc363beb0169643acd0d56eca5d53a988c + md5: 942b41d6058c938355781fd589656b06 depends: - pygments >=2.19.2,<3.0.0 - typing_extensions >=4.4.0,<5.0.0 @@ -10071,8 +9522,21 @@ packages: license_family: MIT purls: - pkg:pypi/textual?source=hash-mapping - size: 528806 - timestamp: 1773220924332 + run_exports: {} + size: 537879 + timestamp: 1779225928184 +- conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda + sha256: 6016672e0e72c4cf23c0cf7b1986283bd86a9c17e8d319212d78d8e9ae42fdfd + md5: 9d64911b31d57ca443e9f1e36b04385f + depends: + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/threadpoolctl?source=hash-mapping + run_exports: {} + size: 23869 + timestamp: 1741878358548 - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.4.0-pyhd8ed1ab_0.conda sha256: cad582d6f978276522f84bd209a5ddac824742fe2d452af6acf900f8650a73a2 md5: f1acf5fdefa8300de697982bcb1761c9 @@ -10083,131 +9547,35 @@ packages: license_family: BSD purls: - pkg:pypi/tinycss2?source=hash-mapping + run_exports: {} size: 28285 timestamp: 1729802975370 -- conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - sha256: cafeec44494f842ffeca27e9c8b0c27ed714f93ac77ddadc6aaf726b5554ebac - md5: cffd3bdd58090148f4cfcd831f4b26ab - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libzlib >=1.3.1,<2.0a0 - constrains: - - xorg-libx11 >=1.8.12,<2.0a0 - license: TCL - license_family: BSD - purls: [] - size: 3301196 - timestamp: 1769460227866 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda - sha256: 799cab4b6cde62f91f750149995d149bc9db525ec12595e8a1d91b9317f038b3 - md5: a9d86bc62f39b94c4661716624eb21b0 - depends: - - __osx >=11.0 - - libzlib >=1.3.1,<2.0a0 - license: TCL - license_family: BSD - purls: [] - size: 3127137 - timestamp: 1769460817696 -- conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h6ed50ae_3.conda - sha256: 0e79810fae28f3b69fe7391b0d43f5474d6bd91d451d5f2bde02f55ae481d5e3 - md5: 0481bfd9814bf525bd4b3ee4b51494c4 - depends: - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: TCL - license_family: BSD - purls: [] - size: 3526350 - timestamp: 1769460339384 -- conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - sha256: 62940c563de45790ba0f076b9f2085a842a65662268b02dd136a8e9b1eaf47a8 - md5: 72e780e9aa2d0a3295f59b1874e3768b +- conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + sha256: 91cafdb64268e43e0e10d30bd1bef5af392e69f00edd34dfaf909f69ab2da6bd + md5: b5325cf06a000c5b14970462ff5e4d58 depends: - python >=3.10 - python license: MIT license_family: MIT purls: - - pkg:pypi/tomli?source=compressed-mapping - size: 21453 - timestamp: 1768146676791 -- conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.3-py314h5bd0f2a_0.conda - sha256: b8f9f9ae508d79c9c697eb01b6a8d2ed4bc1899370f44aa6497c8abbd15988ea - md5: e35f08043f54d26a1be93fdbf90d30c3 + - pkg:pypi/tomli?source=hash-mapping + run_exports: {} + size: 21561 + timestamp: 1774492402955 +- conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.15.1-pyhcf101f3_0.conda + sha256: b89a823edf524956b94a2a4db974866e4501f05c68976eff458c5dcf07f88431 + md5: 37e3be7b6e2977d37b8fa5da229f5dc0 depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - python >=3.14,<3.15.0a0 - - python_abi 3.14.* *_cp314 - license: Apache-2.0 - license_family: Apache - purls: - - pkg:pypi/tornado?source=hash-mapping - size: 905436 - timestamp: 1765458949518 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.4-py314h0612a62_0.conda - sha256: affbc6300e1baef5848f6e69569733a3e7a118aa642487c853f53d6f2bd23b89 - md5: 83e1a2d7b0c1352870bbe9d9406135cf - depends: - - __osx >=11.0 - - python >=3.14,<3.15.0a0 - - python >=3.14,<3.15.0a0 *_cp314 - - python_abi 3.14.* *_cp314 - license: Apache-2.0 - license_family: Apache - purls: - - pkg:pypi/tornado?source=hash-mapping - size: 909298 - timestamp: 1765836779269 -- conda: https://conda.anaconda.org/conda-forge/win-64/tornado-6.5.4-py314h5a2d7ad_0.conda - sha256: 40fde32a4992ab0f875618f97d9aadf263d39c6c92ace7572c6b0a71c655abe1 - md5: 00157f40fd3ea957a2616e9ffda6b84f - depends: - - python >=3.14,<3.15.0a0 - - python_abi 3.14.* *_cp314 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: Apache-2.0 - license_family: Apache - purls: - - pkg:pypi/tornado?source=hash-mapping - size: 908399 - timestamp: 1765836848636 -- conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - sha256: f39a5620c6e8e9e98357507262a7869de2ae8cc07da8b7f84e517c9fd6c2b959 - md5: 019a7385be9af33791c989871317e1ed - depends: - - python >=3.9 + - python >=3.10 + - python license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/traitlets?source=hash-mapping - size: 110051 - timestamp: 1733367480074 -- pypi: https://files.pythonhosted.org/packages/0f/01/3f25909b02fac29bb0a62b2251f8d62e65d697781ffa4cf6b47a4c075c85/ty-0.0.23-py3-none-macosx_11_0_arm64.whl - name: ty - version: 0.0.23 - sha256: bd6a340969577b4645f231572c4e46012acba2d10d4c0c6570fe1ab74e76ae00 - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/18/14/69a25a0cad493fb6a947302471b579a03516a3b00e7bece77fdc6b4afb9b/ty-0.0.23-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - name: ty - version: 0.0.23 - sha256: 559d9a299df793cb7a7902caed5eda8a720ff69164c31c979673e928f02251ee - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/31/2e/eaed4ff5c85e857a02415084c394e02c30476b65e158eec1938fdaa9a205/ty-0.0.23-py3-none-win_amd64.whl - name: ty - version: 0.0.23 - sha256: 1e137e955f05c501cfbb81dd2190c8fb7d01ec037c7e287024129c722a83c9ad - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/94/b8/e77c355f179dc89d44e7ca6dbf7a46e650806df1d356a5462e5829fccea5/types_pytz-2026.1.1.20260304-py3-none-any.whl - name: types-pytz - version: 2026.1.1.20260304 - sha256: 175332c1cf7bd6b1cc56b877f70bf02def1a3f75e5adcc05385ce2c3c70e6500 - requires_python: '>=3.10' + - pkg:pypi/traitlets?source=compressed-mapping + run_exports: {} + size: 115158 + timestamp: 1780507822178 - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda sha256: 7c2df5721c742c2a47b2c8f960e718c930031663ac1174da67c1ed5999f7938c md5: edd329d7d3a4ab45dcf905899a7a6115 @@ -10216,6 +9584,7 @@ packages: license: PSF-2.0 license_family: PSF purls: [] + run_exports: {} size: 91383 timestamp: 1756220668932 - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda @@ -10228,6 +9597,7 @@ packages: license_family: PSF purls: - pkg:pypi/typing-extensions?source=hash-mapping + run_exports: {} size: 51692 timestamp: 1756220668932 - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_1.conda @@ -10239,6 +9609,7 @@ packages: license_family: APACHE purls: - pkg:pypi/typing-utils?source=hash-mapping + run_exports: {} size: 15183 timestamp: 1733331395943 - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda @@ -10246,6 +9617,7 @@ packages: md5: ad659d0a2b3e47e38d829aa8cad2d610 license: LicenseRef-Public-Domain purls: [] + run_exports: {} size: 119135 timestamp: 1767016325805 - conda: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-2.0.0-pyhcf101f3_0.conda @@ -10256,94 +9628,10 @@ packages: license: MIT license_family: MIT purls: - - pkg:pypi/uc-micro-py?source=compressed-mapping + - pkg:pypi/uc-micro-py?source=hash-mapping + run_exports: {} size: 13378 timestamp: 1772479008776 -- conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda - sha256: 3005729dce6f3d3f5ec91dfc49fc75a0095f9cd23bab49efb899657297ac91a5 - md5: 71b24316859acd00bdb8b38f5e2ce328 - constrains: - - vc14_runtime >=14.29.30037 - - vs2015_runtime >=14.29.30037 - license: LicenseRef-MicrosoftWindowsSDK10 - purls: [] - size: 694692 - timestamp: 1756385147981 -- conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-17.0.1-py314h5bd0f2a_0.conda - sha256: ff1c1d7c23b91c9b0eb93a3e1380f4e2ac6c37ea2bba4f932a5484e9a55bba30 - md5: 494fdf358c152f9fdd0673c128c2f3dd - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - python >=3.14,<3.15.0a0 - - python_abi 3.14.* *_cp314 - license: Apache-2.0 - license_family: Apache - purls: - - pkg:pypi/unicodedata2?source=hash-mapping - size: 409562 - timestamp: 1770909102180 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/unicodedata2-17.0.1-py314h6c2aa35_0.conda - sha256: 09bfbee5a2bcf4df06f21a2aa9eb40a7af97864a569beb5ea85fd6baf6e03ce7 - md5: 4fffb3ba871bb05f34ffb705534dfef5 - depends: - - __osx >=11.0 - - python >=3.14,<3.15.0a0 - - python >=3.14,<3.15.0a0 *_cp314 - - python_abi 3.14.* *_cp314 - license: Apache-2.0 - license_family: Apache - purls: - - pkg:pypi/unicodedata2?source=hash-mapping - size: 416130 - timestamp: 1770909728445 -- conda: https://conda.anaconda.org/conda-forge/win-64/unicodedata2-17.0.1-py314h5a2d7ad_0.conda - sha256: 9041e463044944460f73f9528f2ec491180f0ffe857e3555aa8160b81050b8d9 - md5: d6b580a13384df5155c6ca19ee66854e - depends: - - python >=3.14,<3.15.0a0 - - python_abi 3.14.* *_cp314 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: Apache-2.0 - license_family: Apache - purls: - - pkg:pypi/unicodedata2?source=hash-mapping - size: 406126 - timestamp: 1770909191618 -- pypi: https://files.pythonhosted.org/packages/dd/1a/5d9a402b39ec892d856bbdd9db502ff73ce28cdf4aff72eb1ce1d6843506/universal_pathlib-0.3.10-py3-none-any.whl - name: universal-pathlib - version: 0.3.10 - sha256: dfaf2fb35683d2eb1287a3ed7b215e4d6016aa6eaf339c607023d22f90821c66 - requires_dist: - - fsspec>=2024.5.0 - - pathlib-abc>=0.5.1,<0.6.0 - - pytest>=8 ; extra == 'tests' - - pytest-sugar>=0.9.7 ; extra == 'tests' - - pytest-cov>=4.1.0 ; extra == 'tests' - - pytest-mock>=3.12.0 ; extra == 'tests' - - pylint>=2.17.4 ; extra == 'tests' - - mypy>=1.10.0 ; extra == 'tests' - - pydantic>=2 ; extra == 'tests' - - pytest-mypy-plugins>=3.1.2 ; extra == 'tests' - - packaging ; extra == 'tests' - - mypy>=1.10.0 ; extra == 'typechecking' - - pytest-mypy-plugins>=3.1.2 ; extra == 'typechecking' - - fsspec[adl,gcs,github,http,s3,smb,ssh]>=2024.5.0 ; extra == 'dev' - - s3fs>=2024.5.0 ; extra == 'dev' - - gcsfs>=2024.5.0 ; extra == 'dev' - - adlfs>=2024 ; extra == 'dev' - - huggingface-hub ; extra == 'dev' - - webdav4[fsspec] ; extra == 'dev' - - moto[s3,server] ; extra == 'dev' - - wsgidav ; extra == 'dev' - - cheroot ; extra == 'dev' - - pyftpdlib ; extra == 'dev' - - typing-extensions ; python_full_version < '3.11' and extra == 'dev' - - pydantic ; extra == 'dev-third-party' - - pydantic-settings ; extra == 'dev-third-party' - requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_1.conda sha256: e0eb6c8daf892b3056f08416a96d68b0a358b7c46b99c8a50481b22631a4dfc0 md5: e7cb0f5745e4c5035a460248334af7eb @@ -10353,11 +9641,12 @@ packages: license_family: MIT purls: - pkg:pypi/uri-template?source=hash-mapping + run_exports: {} size: 23990 timestamp: 1733323714454 -- conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda - sha256: af641ca7ab0c64525a96fd9ad3081b0f5bcf5d1cbb091afb3f6ed5a9eee6111a - md5: 9272daa869e03efe68833e3dc7a02130 +- conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda + sha256: feff959a816f7988a0893201aa9727bbb7ee1e9cec2c4f0428269b489eb93fb4 + md5: cbb88288f74dbe6ada1c6c7d0a97223e depends: - backports.zstd >=1.0.0 - brotli-python >=1.2.0 @@ -10368,56 +9657,21 @@ packages: license_family: MIT purls: - pkg:pypi/urllib3?source=hash-mapping - size: 103172 - timestamp: 1767817860341 -- conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h41ae7f8_34.conda - sha256: 9dc40c2610a6e6727d635c62cced5ef30b7b30123f5ef67d6139e23d21744b3a - md5: 1e610f2416b6acdd231c5f573d754a0f - depends: - - vc14_runtime >=14.44.35208 - track_features: - - vc14 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 19356 - timestamp: 1767320221521 -- conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_34.conda - sha256: 02732f953292cce179de9b633e74928037fa3741eb5ef91c3f8bae4f761d32a5 - md5: 37eb311485d2d8b2c419449582046a42 - depends: - - ucrt >=10.0.20348.0 - - vcomp14 14.44.35208 h818238b_34 - constrains: - - vs2015_runtime 14.44.35208.* *_34 - license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime - license_family: Proprietary - purls: [] - size: 683233 - timestamp: 1767320219644 -- conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.44.35208-h818238b_34.conda - sha256: 878d5d10318b119bd98ed3ed874bd467acbe21996e1d81597a1dbf8030ea0ce6 - md5: 242d9f25d2ae60c76b38a5e42858e51d - depends: - - ucrt >=10.0.20348.0 - constrains: - - vs2015_runtime 14.44.35208.* *_34 - license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime - license_family: Proprietary - purls: [] - size: 115235 - timestamp: 1767320173250 -- conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda - sha256: e298b508b2473c4227206800dfb14c39e4b14fd79d4636132e9e1e4244cdf4aa - md5: c3197f8c0d5b955c904616b716aca093 + run_exports: {} + size: 103560 + timestamp: 1778188657149 +- conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.8.1-pyhd8ed1ab_0.conda + sha256: 5ddde23d65aecde7e8dac0b9d9c7821ead2b87a320d787f9e4288c0ee00fa332 + md5: 19c961dd9cab6c3e13cd195f0176dbfa depends: - python >=3.10 license: MIT license_family: MIT purls: - - pkg:pypi/wcwidth?source=hash-mapping - size: 71550 - timestamp: 1770634638503 + - pkg:pypi/wcwidth?source=compressed-mapping + run_exports: {} + size: 133769 + timestamp: 1780932915297 - conda: https://conda.anaconda.org/conda-forge/noarch/webcolors-25.10.0-pyhd8ed1ab_0.conda sha256: 21f6c8a20fe050d09bfda3fb0a9c3493936ce7d6e1b3b5f8b01319ee46d6c6f6 md5: 6639b6b0d8b5a284f027a2003669aa65 @@ -10427,6 +9681,7 @@ packages: license_family: BSD purls: - pkg:pypi/webcolors?source=hash-mapping + run_exports: {} size: 18987 timestamp: 1761899393153 - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda @@ -10438,6 +9693,7 @@ packages: license_family: BSD purls: - pkg:pypi/webencodings?source=hash-mapping + run_exports: {} size: 15496 timestamp: 1733236131358 - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda @@ -10449,6 +9705,7 @@ packages: license_family: APACHE purls: - pkg:pypi/websocket-client?source=hash-mapping + run_exports: {} size: 61391 timestamp: 1759928175142 - conda: https://conda.anaconda.org/conda-forge/noarch/win_inet_pton-1.1.0-pyh7428d3b_8.conda @@ -10460,237 +9717,4940 @@ packages: license: LicenseRef-Public-Domain purls: - pkg:pypi/win-inet-pton?source=hash-mapping + run_exports: {} size: 9555 timestamp: 1733130678956 -- conda: https://conda.anaconda.org/conda-forge/win-64/winpty-0.4.3-4.tar.bz2 - sha256: 9df10c5b607dd30e05ba08cbd940009305c75db242476f4e845ea06008b0a283 - md5: 1cee351bf20b830d991dbe0bc8cd7dfe +- conda: https://conda.anaconda.org/conda-forge/noarch/xlrd-2.0.2-pyhd8ed1ab_0.conda + sha256: 64f09069d8b3a3791643230cedc80d9f9422f667e3e328b40d527375352fe8d4 + md5: 91f5637b706492b9e418da1872fd61ce + depends: + - python >=3.10 + license: BSD-3-Clause AND BSD-4-Clause + license_family: BSD + purls: + - pkg:pypi/xlrd?source=hash-mapping + run_exports: {} + size: 93671 + timestamp: 1756170155688 +- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda + sha256: 210bd31c22bb88f5e2a167df24c95bb5f152b2ada7502f9b8c49d1f5366db423 + md5: ba3dcdc8584155c97c648ae9c044b7a3 + depends: + - python >=3.10 + - python license: MIT license_family: MIT + purls: + - pkg:pypi/zipp?source=compressed-mapping + run_exports: {} + size: 24190 + timestamp: 1779159948016 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.conda + build_number: 7 + sha256: 7acaa2e0782cad032bdaf756b536874346ac1375745fb250e9bdd6a48a7ab3cd + md5: a44032f282e7d2acdeb1c240308052dd + depends: + - llvm-openmp >=9.0.1 + license: BSD-3-Clause + license_family: BSD purls: [] - size: 1176306 -- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda - sha256: 6bc6ab7a90a5d8ac94c7e300cc10beb0500eeba4b99822768ca2f2ef356f731b - md5: b2895afaf55bf96a8c8282a2e47a5de0 + run_exports: + weak: + - _openmp_mutex >=4.5 + size: 8325 + timestamp: 1764092507920 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/argon2-cffi-bindings-25.1.0-py314h0612a62_2.conda + sha256: aab60bbaea5cc49dff37438d1ad469d64025cda2ce58103cf68da61701ed2075 + md5: a240a79a49a95b388ef81ccda27a5e51 depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 + - __osx >=11.0 + - cffi >=2.0.0b1 + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python_abi 3.14.* *_cp314 license: MIT license_family: MIT + purls: + - pkg:pypi/argon2-cffi-bindings?source=hash-mapping + run_exports: {} + size: 34218 + timestamp: 1762509977830 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.10.3-hc11c9a1_3.conda + sha256: 623c4f69ce1e2eac92c209ef0e16e5f9ab8832232a749e3a272e11f1f46191c6 + md5: 1fc365a60432d78b729d1468fce1b6c9 + depends: + - __osx >=11.0 + - aws-c-io >=0.26.3,<0.26.4.0a0 + - aws-c-http >=0.11.0,<0.11.1.0a0 + - aws-c-common >=0.14.0,<0.14.1.0a0 + - aws-c-sdkutils >=0.2.5,<0.2.6.0a0 + - aws-c-cal >=0.9.14,<0.9.15.0a0 + license: Apache-2.0 + license_family: APACHE purls: [] - size: 15321 - timestamp: 1762976464266 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.12-hc919400_1.conda - sha256: adae11db0f66f86156569415ed79cda75b2dbf4bea48d1577831db701438164f - md5: 78b548eed8227a689f93775d5d23ae09 + run_exports: + weak: + - aws-c-auth >=0.10.3,<0.10.4.0a0 + size: 116705 + timestamp: 1781803055465 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-cal-0.9.14-h81c6212_2.conda + sha256: 557bc47cbfd01dc569b930c102cd56ca5ba67750bd51a4fcee445246e7e536cd + md5: dcac0aa854a1f7f58a59226f5309a44e depends: - __osx >=11.0 - license: MIT - license_family: MIT + - aws-c-common >=0.14.0,<0.14.1.0a0 + license: Apache-2.0 + license_family: Apache purls: [] - size: 14105 - timestamp: 1762976976084 -- conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxau-1.0.12-hba3369d_1.conda - sha256: 156a583fa43609507146de1c4926172286d92458c307bb90871579601f6bc568 - md5: 8436cab9a76015dfe7208d3c9f97c156 + run_exports: + weak: + - aws-c-cal >=0.9.14,<0.9.15.0a0 + size: 45764 + timestamp: 1780567235337 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-common-0.14.0-h84a0fba_0.conda + sha256: 223f67551038366555e6934802d8b375547b142157aad3fc3654c720ac1525c0 + md5: 3a49923f2b3987a833a264caca603f84 depends: - - libgcc >=14 - - libwinpthread >=12.0.0.r4.gg4f2fc60ca - - ucrt >=10.0.20348.0 - license: MIT - license_family: MIT + - __osx >=11.0 + license: Apache-2.0 + license_family: Apache purls: [] - size: 109246 - timestamp: 1762977105140 -- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda - sha256: 25d255fb2eef929d21ff660a0c687d38a6d2ccfbcbf0cc6aa738b12af6e9d142 - md5: 1dafce8548e38671bea82e3f5c6ce22f + run_exports: + weak: + - aws-c-common >=0.14.0,<0.14.1.0a0 + size: 226438 + timestamp: 1780161234587 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-compression-0.3.2-h61d3404_2.conda + sha256: 4289ff476103d109623bd413b12d61307d6267e87fc6a8c29b0aec71dfa8fd84 + md5: 497edff11fcb32865d8c5d6ab3aef6e0 depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - license: MIT - license_family: MIT + - __osx >=11.0 + - aws-c-common >=0.14.0,<0.14.1.0a0 + license: Apache-2.0 + license_family: APACHE purls: [] - size: 20591 - timestamp: 1762976546182 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hc919400_1.conda - sha256: f7fa0de519d8da589995a1fe78ef74556bb8bc4172079ae3a8d20c3c81354906 - md5: 9d1299ace1924aa8f4e0bc8e71dd0cf7 + run_exports: + weak: + - aws-c-compression >=0.3.2,<0.3.3.0a0 + size: 21529 + timestamp: 1780566290492 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-http-0.11.0-h0a63974_2.conda + sha256: 06d3b08ed19cd63fd75750e325f19ebf7183b22ee27cbe2ca7b7dd6725d34885 + md5: f0fc8139091eb8245209bb9ee8911a82 depends: - __osx >=11.0 - license: MIT - license_family: MIT + - aws-c-compression >=0.3.2,<0.3.3.0a0 + - aws-c-io >=0.26.3,<0.26.4.0a0 + - aws-c-common >=0.14.0,<0.14.1.0a0 + - aws-c-cal >=0.9.14,<0.9.15.0a0 + license: Apache-2.0 + license_family: APACHE purls: [] - size: 19156 - timestamp: 1762977035194 -- conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxdmcp-1.1.5-hba3369d_1.conda - sha256: 366b8ae202c3b48958f0b8784bbfdc37243d3ee1b1cd4b8e76c10abe41fa258b - md5: a7c03e38aa9c0e84d41881b9236eacfb + run_exports: + weak: + - aws-c-http >=0.11.0,<0.11.1.0a0 + size: 177282 + timestamp: 1780586850553 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-io-0.26.3-h58c0f83_5.conda + sha256: 82b51f24e391dcf4750a238ed84368e09bf00c8295d0206e92e85cc78ef3a3b9 + md5: 3f3d6b053bc85cf224ac53ee8a32fcf0 depends: - - libgcc >=14 - - libwinpthread >=12.0.0.r4.gg4f2fc60ca - - ucrt >=10.0.20348.0 - license: MIT - license_family: MIT + - __osx >=11.0 + - aws-c-common >=0.14.0,<0.14.1.0a0 + - aws-c-cal >=0.9.14,<0.9.15.0a0 + license: Apache-2.0 + license_family: APACHE purls: [] - size: 70691 - timestamp: 1762977015220 -- conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda - sha256: 6d9ea2f731e284e9316d95fa61869fe7bbba33df7929f82693c121022810f4ad - md5: a77f85f77be52ff59391544bfe73390a + run_exports: + weak: + - aws-c-io >=0.26.3,<0.26.4.0a0 + size: 176911 + timestamp: 1781649841117 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-s3-0.12.6-h43def2a_0.conda + sha256: 258678f29912d503e4301814f411b29bb2324f6a0131a06a385f2280b4916eeb + md5: 912c61c44a2782693d63af2272551455 depends: - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - license: MIT - license_family: MIT + - __osx >=11.0 + - aws-c-common >=0.14.0,<0.14.1.0a0 + - aws-c-cal >=0.9.14,<0.9.15.0a0 + - aws-checksums >=0.2.10,<0.2.11.0a0 + - aws-c-auth >=0.10.3,<0.10.4.0a0 + - aws-c-io >=0.26.3,<0.26.4.0a0 + - aws-c-http >=0.11.0,<0.11.1.0a0 + license: Apache-2.0 + license_family: APACHE purls: [] - size: 85189 - timestamp: 1753484064210 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda - sha256: b03433b13d89f5567e828ea9f1a7d5c5d697bf374c28a4168d71e9464f5dafac - md5: 78a0fe9e9c50d2c381e8ee47e3ea437d + run_exports: + weak: + - aws-c-s3 >=0.12.6,<0.12.7.0a0 + size: 132571 + timestamp: 1781253082057 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.2.5-h61d3404_0.conda + sha256: f47cd32244c77d12bfbf9ae1eecf6672d776f9df8f5357c365fd8254e3d2acb9 + md5: 4a91f77674daaa9e0a6bbcf9a45d23fd depends: - __osx >=11.0 - license: MIT - license_family: MIT + - aws-c-common >=0.14.0,<0.14.1.0a0 + license: Apache-2.0 + license_family: APACHE purls: [] - size: 83386 - timestamp: 1753484079473 -- conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda - sha256: 80ee68c1e7683a35295232ea79bcc87279d31ffeda04a1665efdb43cbd50a309 - md5: 433699cba6602098ae8957a323da2664 + run_exports: + weak: + - aws-c-sdkutils >=0.2.5,<0.2.6.0a0 + size: 58773 + timestamp: 1781798801665 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-checksums-0.2.10-h61d3404_2.conda + sha256: 9af1483700bb29870297e2390838d3c31293e8cf80fd8a8a9bd9a1446020a8d8 + md5: 7c5f6a6efce80e728c1f743e064ab657 depends: - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - - ucrt >=10.0.20348.0 + - __osx >=11.0 + - aws-c-common >=0.14.0,<0.14.1.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + run_exports: + weak: + - aws-checksums >=0.2.10,<0.2.11.0a0 + size: 91975 + timestamp: 1780568646105 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-1.2.0-h7d5ae5b_1.conda + sha256: 422ac5c91f8ef07017c594d9135b7ae068157393d2a119b1908c7e350938579d + md5: 48ece20aa479be6ac9a284772827d00c + depends: + - __osx >=11.0 + - brotli-bin 1.2.0 hc919400_1 + - libbrotlidec 1.2.0 hc919400_1 + - libbrotlienc 1.2.0 hc919400_1 license: MIT license_family: MIT purls: [] - size: 63944 - timestamp: 1753484092156 -- conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h41580af_10.conda - sha256: 325d370b28e2b9cc1f765c5b4cdb394c91a5d958fbd15da1a14607a28fee09f6 - md5: 755b096086851e1193f3b10347415d7c + run_exports: + weak: + - libbrotlicommon >=1.2.0,<1.3.0a0 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + size: 20237 + timestamp: 1764018058424 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-bin-1.2.0-hc919400_1.conda + sha256: e2d142052a83ff2e8eab3fe68b9079cad80d109696dc063a3f92275802341640 + md5: 377d015c103ad7f3371be1777f8b584c depends: - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - libstdcxx >=14 - - krb5 >=1.22.2,<1.23.0a0 - - libsodium >=1.0.21,<1.0.22.0a0 - license: MPL-2.0 - license_family: MOZILLA + - __osx >=11.0 + - libbrotlidec 1.2.0 hc919400_1 + - libbrotlienc 1.2.0 hc919400_1 + license: MIT + license_family: MIT purls: [] - size: 311150 - timestamp: 1772476812121 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h4818236_10.conda - sha256: 2705360c72d4db8de34291493379ffd13b09fd594d0af20c9eefa8a3f060d868 - md5: e85dcd3bde2b10081cdcaeae15797506 + run_exports: {} + size: 18628 + timestamp: 1764018033635 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.2.0-py314h3daef5d_1.conda + sha256: 5c2e471fd262fcc3c5a9d5ea4dae5917b885e0e9b02763dbd0f0d9635ed4cb99 + md5: f9501812fe7c66b6548c7fcaa1c1f252 depends: - __osx >=11.0 - libcxx >=19 - - krb5 >=1.22.2,<1.23.0a0 - - libsodium >=1.0.21,<1.0.22.0a0 - license: MPL-2.0 - license_family: MOZILLA + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python_abi 3.14.* *_cp314 + constrains: + - libbrotlicommon 1.2.0 hc919400_1 + license: MIT + license_family: MIT + purls: + - pkg:pypi/brotli?source=hash-mapping + run_exports: {} + size: 359854 + timestamp: 1764018178608 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda + sha256: 540fe54be35fac0c17feefbdc3e29725cce05d7367ffedfaaa1bdda234b019df + md5: 620b85a3f45526a8bc4d23fd78fc22f0 + depends: + - __osx >=11.0 + license: bzip2-1.0.6 + license_family: BSD purls: [] - size: 245246 - timestamp: 1772476886668 -- conda: https://conda.anaconda.org/conda-forge/win-64/zeromq-4.3.5-h507cc87_10.conda - sha256: b8568dfde46edf3455458912ea6ffb760e4456db8230a0cf34ecbc557d3c275f - md5: 1ab0237036bfb14e923d6107473b0021 + run_exports: + weak: + - bzip2 >=1.0.8,<2.0a0 + size: 124834 + timestamp: 1771350416561 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.6-hc919400_0.conda + sha256: 2995f2aed4e53725e5efbc28199b46bf311c3cab2648fc4f10c2227d6d5fa196 + md5: bcb3cba70cf1eec964a03b4ba7775f01 depends: - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - - ucrt >=10.0.20348.0 - - libsodium >=1.0.21,<1.0.22.0a0 - - krb5 >=1.22.2,<1.23.0a0 - license: MPL-2.0 - license_family: MOZILLA + - __osx >=11.0 + license: MIT + license_family: MIT purls: [] - size: 265665 - timestamp: 1772476832995 -- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - sha256: b4533f7d9efc976511a73ef7d4a2473406d7f4c750884be8e8620b0ce70f4dae - md5: 30cd29cb87d819caead4d55184c1d115 + run_exports: + weak: + - c-ares >=1.34.6,<2.0a0 + size: 180327 + timestamp: 1765215064054 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cairo-1.18.4-he0f2337_1.conda + sha256: cde9b79ee206fe3ba6ca2dc5906593fb7a1350515f85b2a1135a4ce8ec1539e3 + md5: 36200ecfbbfbcb82063c87725434161f + depends: + - __osx >=11.0 + - fontconfig >=2.15.0,<3.0a0 + - fonts-conda-ecosystem + - icu >=78.1,<79.0a0 + - libcxx >=19 + - libexpat >=2.7.3,<3.0a0 + - libfreetype >=2.14.1 + - libfreetype6 >=2.14.1 + - libglib >=2.86.3,<3.0a0 + - libpng >=1.6.53,<1.7.0a0 + - libzlib >=1.3.1,<2.0a0 + - pixman >=0.46.4,<1.0a0 + license: LGPL-2.1-only or MPL-1.1 + purls: [] + run_exports: + weak: + - cairo >=1.18.4,<2.0a0 + size: 900035 + timestamp: 1766416416791 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-2.0.0-py314h44086f9_1.conda + sha256: 5b5ee5de01eb4e4fd2576add5ec9edfc654fbaf9293e7b7ad2f893a67780aa98 + md5: 10dd19e4c797b8f8bdb1ec1fbb6821d7 + depends: + - __osx >=11.0 + - libffi >=3.5.2,<3.6.0a0 + - pycparser + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python_abi 3.14.* *_cp314 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + run_exports: {} + size: 292983 + timestamp: 1761203354051 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/contourpy-1.3.3-py314hf8a3a22_4.conda + sha256: 754ab72f1c1ae99ef7c57995f59224dc9632cbd6731fe7e6277437fd01d43156 + md5: cddc851000ce131d757678c2f329eaad + depends: + - numpy >=1.25 + - python + - python 3.14.* *_cp314 + - __osx >=11.0 + - libcxx >=19 + - python_abi 3.14.* *_cp314 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/contourpy?source=hash-mapping + run_exports: {} + size: 290405 + timestamp: 1769156069514 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/coverage-7.14.3-py314h6e9b3f0_0.conda + sha256: 8de3938e100bbbd775d3b0c6d121c29e7aa2cd0024a9b5ee8023706c0b8f28e6 + md5: cb60422148fa8d70cbb6fc290e79e21c + depends: + - __osx >=11.0 + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python_abi 3.14.* *_cp314 + - tomli + license: Apache-2.0 + purls: + - pkg:pypi/coverage?source=hash-mapping + run_exports: {} + size: 417888 + timestamp: 1782178502982 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/debugpy-1.8.21-py314he609de1_0.conda + sha256: fd6df772cdb30d01fa0d405ed637f420a9f2194fe931f967e8c67d95b504f8b4 + md5: da29307f59fb7a63f686ec20724fecf9 depends: - - python >=3.10 - python + - libcxx >=19 + - __osx >=11.0 + - python 3.14.* *_cp314 + - python_abi 3.14.* *_cp314 license: MIT license_family: MIT purls: - - pkg:pypi/zipp?source=hash-mapping - size: 24194 - timestamp: 1764460141901 -- conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda - sha256: ea4e50c465d70236408cb0bfe0115609fd14db1adcd8bd30d8918e0291f8a75f - md5: 2aadb0d17215603a82a2a6b0afd9a4cb + - pkg:pypi/debugpy?source=hash-mapping + run_exports: {} + size: 2776045 + timestamp: 1780390212997 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/fontconfig-2.18.1-h2b252f5_0.conda + sha256: 8607d8d0b32f9f6fc61ea8c06b537486b78428a04516658222fa4d1d521af765 + md5: 9d928e6a62192141fb6540a3125b1345 depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libstdcxx >=14 - license: Zlib - license_family: Other + - __osx >=11.0 + - libexpat >=2.8.1,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libintl >=0.25.1,<1.0a0 + - libzlib >=1.3.2,<2.0a0 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - fontconfig >=2.18.1,<3.0a0 + - fonts-conda-ecosystem + size: 248677 + timestamp: 1780450500773 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.14.3-hce30654_1.conda + sha256: 96b33f1e2a32c602b167f43719e3acf89ec742b4a1e25e99ffd0e6f99b38d277 + md5: 7bd06ab4ed807154c2d9031eb5ebf025 + depends: + - libfreetype 2.14.3 hce30654_1 + - libfreetype6 2.14.3 hdfa99f5_1 + license: GPL-2.0-only OR FTL purls: [] - size: 122618 - timestamp: 1770167931827 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-ng-2.3.3-hed4e4f5_1.conda - sha256: a339606a6b224bb230ff3d711e801934f3b3844271df9720165e0353716580d4 - md5: d99c2a23a31b0172e90f456f580b695e + run_exports: + weak: + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + size: 173518 + timestamp: 1780933616544 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/fribidi-1.0.16-hc919400_0.conda + sha256: d856dc6744ecfba78c5f7df3378f03a75c911aadac803fa2b41a583667b4b600 + md5: 04bdce8d93a4ed181d1d726163c2d447 + depends: + - __osx >=11.0 + license: LGPL-2.1-or-later + purls: [] + run_exports: + weak: + - fribidi >=1.0.16,<2.0a0 + size: 59391 + timestamp: 1757438897523 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/graphite2-1.3.15-hf6b4638_0.conda + sha256: c0a060d7b7a05669043ef3f68c7a1025c8594e1ab73735afb64c35e8baa41da5 + md5: 0d576cff278a2e60456d5b2c0a1ffda3 depends: - __osx >=11.0 - libcxx >=19 - license: Zlib - license_family: Other + license: LGPL-2.0-or-later + license_family: LGPL purls: [] - size: 94375 - timestamp: 1770168363685 -- conda: https://conda.anaconda.org/conda-forge/win-64/zlib-ng-2.3.3-h0261ad2_1.conda - sha256: 71332532332d13b5dbe57074ddcf82ae711bdc132affa5a2982a29ffa06dc234 - md5: 46a21c0a4e65f1a135251fc7c8663f83 + run_exports: + weak: + - graphite2 >=1.3.15,<2.0a0 + size: 82245 + timestamp: 1780454628763 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/h5py-3.16.0-nompi_py314h658a3ac_102.conda + sha256: 0762ed080bf45ca475da96796a8883a6c719603c44fa9b07a5883785649a4a0f + md5: ab9a6c652fd25407c9cf67b9b6b87496 depends: - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: Zlib - license_family: Other + - __osx >=11.0 + - cached-property + - hdf5 >=2.1.0,<3.0a0 + - numpy >=1.23,<3 + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python_abi 3.14.* *_cp314 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/h5py?source=hash-mapping + run_exports: {} + size: 1203956 + timestamp: 1775583125726 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/harfbuzz-14.2.1-h3103d1b_0.conda + sha256: 5593f4aad6580707eb268e8dbb4c562a736d87bea03f5e1551becaebfe1a6620 + md5: 389b1c7cb4738fa74f8a142336807a13 + depends: + - __osx >=11.0 + - cairo >=1.18.4,<2.0a0 + - graphite2 >=1.3.14,<2.0a0 + - icu >=78.3,<79.0a0 + - libcxx >=19 + - libexpat >=2.8.1,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libglib >=2.88.1,<3.0a0 + - libzlib >=1.3.2,<2.0a0 + license: MIT + license_family: MIT purls: [] - size: 124542 - timestamp: 1770167984883 -- conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - sha256: 68f0206ca6e98fea941e5717cec780ed2873ffabc0e1ed34428c061e2c6268c7 - md5: 4a13eeac0b5c8e5b8ab496e6c4ddd829 + run_exports: + weak: + - harfbuzz >=14.2.1 + size: 1721040 + timestamp: 1780451752518 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/hdf5-2.1.0-nompi_hb7e0c14_108.conda + sha256: 8f37c0185801b81a50e4e1430501ddd1c9bfe5e6a5e4ea3c61464e0f1d9199aa + md5: 5cc8ba7775f6694349b7a71837bbad90 depends: - - __glibc >=2.17,<3.0.a0 - - libzlib >=1.3.1,<2.0a0 + - __osx >=11.0 + - aws-c-auth >=0.10.3,<0.10.4.0a0 + - aws-c-common >=0.14.0,<0.14.1.0a0 + - aws-c-http >=0.11.0,<0.11.1.0a0 + - aws-c-io >=0.26.3,<0.26.4.0a0 + - aws-c-s3 >=0.12.6,<0.12.7.0a0 + - aws-c-sdkutils >=0.2.5,<0.2.6.0a0 + - libaec >=1.1.5,<2.0a0 + - libcurl >=8.20.0,<9.0a0 + - libcxx >=19 + - libgfortran + - libgfortran5 >=14.3.0 + - libzlib >=1.3.2,<2.0a0 + - openssl >=3.5.7,<4.0a0 license: BSD-3-Clause license_family: BSD purls: [] - size: 601375 - timestamp: 1764777111296 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - sha256: 9485ba49e8f47d2b597dd399e88f4802e100851b27c21d7525625b0b4025a5d9 - md5: ab136e4c34e97f34fb621d2592a393d8 + run_exports: + weak: + - hdf5 >=2.1.0,<3.0a0 + size: 3342788 + timestamp: 1781837329072 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda + sha256: 3a7907a17e9937d3a46dfd41cffaf815abad59a569440d1e25177c15fd0684e5 + md5: f1182c91c0de31a7abd40cedf6a5ebef depends: - __osx >=11.0 - - libzlib >=1.3.1,<2.0a0 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - icu >=78.3,<79.0a0 + size: 12361647 + timestamp: 1773822915649 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/kiwisolver-1.5.0-py314hf8a3a22_0.conda + sha256: 840de1b0ba2fa646475bc53ba0f723c8a13e66139633a070831b8279deaa7c64 + md5: eb1465d8a644ef290d18fb86af6e9bc4 + depends: + - python + - python 3.14.* *_cp314 + - libcxx >=19 + - __osx >=11.0 + - python_abi 3.14.* *_cp314 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/kiwisolver?source=hash-mapping + run_exports: {} + size: 69284 + timestamp: 1773067285911 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-hfd3d5f3_1.conda + sha256: c740e4a2e7247776a9883158fdab50ae0732c8f67f96d8f1db8ad9da5e0b5222 + md5: 8780f41b013d19219faef9c82260744b + depends: + - __osx >=11.0 + - libcxx >=19 + - libedit >=3.1.20250104,<3.2.0a0 + - libedit >=3.1.20250104,<4.0a0 + - openssl >=3.5.7,<4.0a0 + license: MIT + license_family: MIT purls: [] - size: 433413 - timestamp: 1764777166076 -- conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - sha256: 368d8628424966fd8f9c8018326a9c779e06913dd39e646cf331226acc90e5b2 - md5: 053b84beec00b71ea8ff7a4f84b55207 + run_exports: + weak: + - krb5 >=1.22.2,<1.23.0a0 + size: 1159780 + timestamp: 1781859501654 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.19.1-hdfa7624_1.conda + sha256: ccb5598fad3694e79bf54f0eb812e3b3c3dd63d1497e631f5978800eadb9bcc4 + md5: d2f2c7c10e2957647d45589b7701a453 depends: - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - - ucrt >=10.0.20348.0 - - libzlib >=1.3.1,<2.0a0 + - __osx >=11.0 + - libjpeg-turbo >=3.1.4.1,<4.0a0 + - libtiff >=4.7.1,<4.8.0a0 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - lcms2 >=2.19.1,<3.0a0 + size: 213747 + timestamp: 1780212240694 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.1.0-h1eee2c3_0.conda + sha256: 66e5ffd301a44da696f3efc2f25d6d94f42a9adc0db06c44ad753ab844148c51 + md5: 095e5749868adab9cae42d4b460e5443 + depends: + - __osx >=11.0 + - libcxx >=19 + license: Apache-2.0 + license_family: Apache + purls: [] + run_exports: + weak: + - lerc >=4.1.0,<5.0a0 + size: 164222 + timestamp: 1773114244984 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libaec-1.1.5-h8664d51_0.conda + sha256: af9cd8db11eb719e38a3340c88bb4882cf19b5b4237d93845224489fc2a13b46 + md5: 13e6d9ae0efbc9d2e9a01a91f4372b41 + depends: + - __osx >=11.0 + - libcxx >=19 + license: BSD-2-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - libaec >=1.1.5,<2.0a0 + size: 30390 + timestamp: 1769222133373 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.11.0-8_h51639a9_openblas.conda + build_number: 8 + sha256: 8f5ec18ead0619a9cf0f38b49796c22f6fc0f44850c0df2baea0f5277db16e75 + md5: dbfe729181a32741ae63ecb41eefbac6 + depends: + - libopenblas >=0.3.33,<0.3.34.0a0 + - libopenblas >=0.3.33,<1.0a0 + constrains: + - blas 2.308 openblas + - liblapack 3.11.0 8*_openblas + - liblapacke 3.11.0 8*_openblas + - libcblas 3.11.0 8*_openblas + - mkl <2027 license: BSD-3-Clause license_family: BSD purls: [] - size: 388453 + run_exports: + weak: + - libblas >=3.11.0,<4.0a0 + size: 18949 + timestamp: 1779859141315 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.2.0-hc919400_1.conda + sha256: a7cb9e660531cf6fbd4148cff608c85738d0b76f0975c5fc3e7d5e92840b7229 + md5: 006e7ddd8a110771134fcc4e1e3a6ffa + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - libbrotlicommon >=1.2.0,<1.3.0a0 + size: 79443 + timestamp: 1764017945924 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.2.0-hc919400_1.conda + sha256: 2eae444039826db0454b19b52a3390f63bfe24f6b3e63089778dd5a5bf48b6bf + md5: 079e88933963f3f149054eec2c487bc2 + depends: + - __osx >=11.0 + - libbrotlicommon 1.2.0 hc919400_1 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - libbrotlidec >=1.2.0,<1.3.0a0 + size: 29452 + timestamp: 1764017979099 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.2.0-hc919400_1.conda + sha256: 01436c32bb41f9cb4bcf07dda647ce4e5deb8307abfc3abdc8da5317db8189d1 + md5: b2b7c8288ca1a2d71ff97a8e6a1e8883 + depends: + - __osx >=11.0 + - libbrotlicommon 1.2.0 hc919400_1 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - libbrotlienc >=1.2.0,<1.3.0a0 + size: 290754 + timestamp: 1764018009077 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.11.0-8_hb0561ab_openblas.conda + build_number: 8 + sha256: f93efcd44bc24f97c2478c7474d3baa6801a057974f330e1d06bedc33e4c778f + md5: 03a2ef3491da9e5b4d18c03e9f4b3109 + depends: + - libblas 3.11.0 8_h51639a9_openblas + constrains: + - blas 2.308 openblas + - liblapack 3.11.0 8*_openblas + - liblapacke 3.11.0 8*_openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - libcblas >=3.11.0,<4.0a0 + size: 18911 + timestamp: 1779859147634 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.20.0-hd5a2499_0.conda + sha256: 38c0bc634b61e542776e97cfd15d5d41edd304d4e47c333004d2d622439b2381 + md5: 2f57b7d0c6adda88957586b7afd78438 + depends: + - __osx >=11.0 + - krb5 >=1.22.2,<1.23.0a0 + - libnghttp2 >=1.68.1,<2.0a0 + - libssh2 >=1.11.1,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - openssl >=3.5.6,<4.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: curl + license_family: MIT + purls: [] + run_exports: + weak: + - libcurl >=8.20.0,<9.0a0 + size: 400568 + timestamp: 1777462251987 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.8-h55c6f16_0.conda + sha256: a2e7abab5add9750fab064c024394de48e49f97631c605ad5db5c8ac3fc769ef + md5: 89f76a2a21a3ec3ec983b5eb237c4113 + depends: + - __osx >=11.0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: {} + size: 569349 + timestamp: 1781670209146 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.25-hc11a715_0.conda + sha256: 5e0b6961be3304a5f027a8c00bd0967fc46ae162cffb7553ff45c70f51b8314c + md5: a6130c709305cd9828b4e1bd9ba0000c + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - libdeflate >=1.25,<1.26.0a0 + size: 55420 + timestamp: 1761980066242 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda + sha256: 66aa216a403de0bb0c1340a88d1a06adaff66bae2cfd196731aa24db9859d631 + md5: 44083d2d2c2025afca315c7a172eab2b + depends: + - ncurses + - __osx >=11.0 + - ncurses >=6.5,<7.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - libedit >=3.1.20250104,<3.2.0a0 + size: 107691 + timestamp: 1738479560845 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda + sha256: 95cecb3902fbe0399c3a7e67a5bed1db813e5ab0e22f4023a5e0f722f2cc214f + md5: 36d33e440c31857372a72137f78bacf5 + license: BSD-2-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - libev >=4.33,<4.34.0a0 + size: 107458 + timestamp: 1702146414478 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.8.1-hf6b4638_1.conda + sha256: 5af74261101e3c777399c6294b2b5d290e508153268eb2e9ff99c4d69834612f + md5: a915151d5d3c5bf039f5ccc8402a436f + depends: + - __osx >=11.0 + constrains: + - expat 2.8.1.* + license: MIT + license_family: MIT + purls: [] + run_exports: {} + size: 69362 + timestamp: 1781203631990 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda + sha256: 6686a26466a527585e6a75cc2a242bf4a3d97d6d6c86424a441677917f28bec7 + md5: 43c04d9cb46ef176bb2a4c77e324d599 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - libffi >=3.5.2,<3.6.0a0 + size: 40979 + timestamp: 1769456747661 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype-2.14.3-hce30654_1.conda + sha256: d5637b01941c0fc8f5cbb1f170c238f4ee153b3c1708b9d50f4f1305438ff051 + md5: 0582e67cd14cfed773be2f3b1aba08e0 + depends: + - libfreetype6 >=2.14.3 + license: GPL-2.0-only OR FTL + purls: [] + run_exports: {} + size: 8365 + timestamp: 1780933612390 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype6-2.14.3-hdfa99f5_1.conda + sha256: abbfffd8a8c776bb8b59a10c8247fc3aa6b17ba0051e9f6d199dca38479f214f + md5: a0bb0678f67c464938d3693fa96f6884 + depends: + - __osx >=11.0 + - libpng >=1.6.58,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - freetype >=2.14.3 + license: GPL-2.0-only OR FTL + purls: [] + run_exports: {} + size: 338442 + timestamp: 1780933611662 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgcc-15.2.0-hcbb3090_19.conda + sha256: 06644fa4d34d57c9e48f4d84b1256f9e5f654fdb37f43acc8a58a396952d42b7 + md5: 644058123986582db33aebd4ae2ca184 + depends: + - _openmp_mutex + constrains: + - libgcc-ng ==15.2.0=*_19 + - libgomp 15.2.0 19 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + run_exports: {} + size: 404080 + timestamp: 1778273064154 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-h07b0088_19.conda + sha256: d4837b3b9b30af3132d260225e91ab9dde83be04c59513f500cc81050fb37486 + md5: 1ea03f87cdb1078fbc0e2b2deb63752c + depends: + - libgfortran5 15.2.0 hdae7583_19 + constrains: + - libgfortran-ng ==15.2.0=*_19 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + run_exports: {} + size: 139675 + timestamp: 1778273280875 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-hdae7583_19.conda + sha256: d0a68b7a121d115b80c169e24d1265dcc25a3fe58d107df1bbc430797e226d88 + md5: ba36d8c606a6a53fe0b8c12d47267b3d + depends: + - libgcc >=15.2.0 + constrains: + - libgfortran 15.2.0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + run_exports: {} + size: 599691 + timestamp: 1778273075448 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libglib-2.88.1-ha08bb59_2.conda + sha256: 3b32a7a710132d509f2ea38b2f0384414c863533e0fc7ac71b6a0763e4c67424 + md5: 62d6f3b832d7d79ae0c0aa1bb3c325fa + depends: + - __osx >=11.0 + - libintl >=0.25.1,<1.0a0 + - libffi >=3.5.2,<3.6.0a0 + - pcre2 >=10.47,<10.48.0a0 + - libiconv >=1.18,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - glib >2.66 + license: LGPL-2.1-or-later + purls: [] + run_exports: + weak: + - libglib >=2.88.1,<3.0a0 + size: 4439458 + timestamp: 1778508895255 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.18-h23cfdf5_2.conda + sha256: de0336e800b2af9a40bdd694b03870ac4a848161b35c8a2325704f123f185f03 + md5: 4d5a7445f0b25b6a3ddbb56e790f5251 + depends: + - __osx >=11.0 + license: LGPL-2.1-only + purls: [] + run_exports: + weak: + - libiconv >=1.18,<2.0a0 + size: 750379 + timestamp: 1754909073836 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libintl-0.25.1-h493aca8_0.conda + sha256: 99d2cebcd8f84961b86784451b010f5f0a795ed1c08f1e7c76fbb3c22abf021a + md5: 5103f6a6b210a3912faf8d7db516918c + depends: + - __osx >=11.0 + - libiconv >=1.18,<2.0a0 + license: LGPL-2.1-or-later + purls: [] + run_exports: + weak: + - libintl >=0.25.1,<1.0a0 + size: 90957 + timestamp: 1751558394144 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.1.4.1-h84a0fba_0.conda + sha256: 17e035ae6a520ff6a6bb5dd93a4a7c3895891f4f9743bcb8c6ef607445a31cd0 + md5: b8a7544c83a67258b0e8592ec6a5d322 + depends: + - __osx >=11.0 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + run_exports: + weak: + - libjpeg-turbo >=3.1.4.1,<4.0a0 + size: 555681 + timestamp: 1775962975624 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.11.0-8_hd9741b5_openblas.conda + build_number: 8 + sha256: 8a076fe82142a00fe85f5a5a5351e286e8064f0100fe13608d19182cd0018c25 + md5: 85adeb3d469d082dbd9c8c39e36dec57 + depends: + - libblas 3.11.0 8_h51639a9_openblas + constrains: + - libcblas 3.11.0 8*_openblas + - blas 2.308 openblas + - liblapacke 3.11.0 8*_openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - liblapack >=3.11.0,<3.12.0a0 + size: 18925 + timestamp: 1779859153970 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.3-h8088a28_0.conda + sha256: 34878d87275c298f1a732c6806349125cebbf340d24c6c23727268184bba051e + md5: b1fd823b5ae54fbec272cea0811bd8a9 + depends: + - __osx >=11.0 + constrains: + - xz 5.8.3.* + license: 0BSD + purls: [] + run_exports: + weak: + - liblzma >=5.8.3,<6.0a0 + size: 92472 + timestamp: 1775825802659 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda + sha256: 1089c7f15d5b62c622625ec6700732ece83be8b705da8c6607f4dabb0c4bd6d2 + md5: 57c4be259f5e0b99a5983799a228ae55 + depends: + - __osx >=11.0 + license: BSD-2-Clause + license_family: BSD + purls: [] + run_exports: {} + size: 73690 + timestamp: 1769482560514 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.68.1-h8f3e76b_0.conda + sha256: 2bc7bc3978066f2c274ebcbf711850cc9ab92e023e433b9631958a098d11e10a + md5: 6ea18834adbc3b33df9bd9fb45eaf95b + depends: + - __osx >=11.0 + - c-ares >=1.34.6,<2.0a0 + - libcxx >=19 + - libev >=4.33,<4.34.0a0 + - libev >=4.33,<5.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.5,<4.0a0 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - libnghttp2 >=1.68.1,<2.0a0 + size: 576526 + timestamp: 1773854624224 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.33-openmp_he657e61_0.conda + sha256: 9dd455b2d172aeedfa2058d324b5b5822b0bc1b7c1f32cd183d7078540d2f6eb + md5: 909e41855c29f0d52ae630198cd57135 + depends: + - __osx >=11.0 + - libgfortran + - libgfortran5 >=14.3.0 + - llvm-openmp >=19.1.7 + constrains: + - openblas >=0.3.33,<0.3.34.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - libopenblas >=0.3.33,<1.0a0 + size: 4304965 + timestamp: 1776995497368 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.58-h132b30e_0.conda + sha256: 66eae34546df1f098a67064970c92aa14ae7a7505091889e00468294d2882c36 + md5: 2259ae0949dbe20c0665850365109b27 + depends: + - __osx >=11.0 + - libzlib >=1.3.2,<2.0a0 + license: zlib-acknowledgement + purls: [] + run_exports: + weak: + - libpng >=1.6.58,<1.7.0a0 + size: 289546 + timestamp: 1776315246750 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libraqm-0.10.5-h29bd36a_0.conda + sha256: 9a28d495e12638bda33a43c236c4089beef11e09b7a7a5ba52f86e3605264eb1 + md5: 4c7999b62691f4ed6e0650832b7b6cff + depends: + - __osx >=11.0 + - fribidi >=1.0.16,<2.0a0 + - harfbuzz >=14.2.1 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - libraqm >=0.10.5,<0.11.0a0 + size: 27339 + timestamp: 1780835892821 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.22-h1a92334_1.conda + sha256: 202be45db5726757a8ea1f374f85aacc18c504f5ff15b2558496dff4c8779c48 + md5: 9ed5ab909c449bdcae72322e44875a18 + depends: + - __osx >=11.0 + license: ISC + purls: [] + run_exports: + weak: + - libsodium >=1.0.22,<1.0.23.0a0 + size: 247352 + timestamp: 1779164136206 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.2-h1ae2325_0.conda + sha256: 862463917e8ef5ac3ebdaf8f19914634b457609cc27ba678b7197124cefeb1f7 + md5: 1ebde5c677f00765233a17e278571177 + depends: + - __osx >=11.0 + - icu >=78.3,<79.0a0 + - libzlib >=1.3.2,<2.0a0 + license: blessing + purls: [] + run_exports: + weak: + - libsqlite >=3.53.2,<4.0a0 + size: 927724 + timestamp: 1780575223548 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h1590b86_0.conda + sha256: 8bfe837221390ffc6f111ecca24fa12d4a6325da0c8d131333d63d6c37f27e0a + md5: b68e8f66b94b44aaa8de4583d3d4cc40 + depends: + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.0,<4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - libssh2 >=1.11.1,<2.0a0 + size: 279193 + timestamp: 1745608793272 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.1-h4030677_1.conda + sha256: e9248077b3fa63db94caca42c8dbc6949c6f32f94d1cafad127f9005d9b1507f + md5: e2a72ab2fa54ecb6abab2b26cde93500 + depends: + - __osx >=11.0 + - lerc >=4.0.0,<5.0a0 + - libcxx >=19 + - libdeflate >=1.25,<1.26.0a0 + - libjpeg-turbo >=3.1.0,<4.0a0 + - liblzma >=5.8.1,<6.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: HPND + purls: [] + run_exports: + weak: + - libtiff >=4.7.1,<4.8.0a0 + size: 373892 + timestamp: 1762022345545 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.6.0-h07db88b_0.conda + sha256: a4de3f371bb7ada325e1f27a4ef7bcc81b2b6a330e46fac9c2f78ac0755ea3dd + md5: e5e7d467f80da752be17796b87fe6385 + depends: + - __osx >=11.0 + constrains: + - libwebp 1.6.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - libwebp-base >=1.6.0,<2.0a0 + size: 294974 + timestamp: 1752159906788 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda + sha256: bd3816218924b1e43b275863e21a3e13a5db4a6da74cca8e60bc3c213eb62f71 + md5: af523aae2eca6dfa1c8eec693f5b9a79 + depends: + - __osx >=11.0 + - pthread-stubs + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - libxcb >=1.17.0,<2.0a0 + size: 323658 + timestamp: 1727278733917 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda + sha256: 361415a698514b19a852f5d1123c5da746d4642139904156ddfca7c922d23a05 + md5: bc5a5721b6439f2f62a84f2548136082 + depends: + - __osx >=11.0 + constrains: + - zlib 1.3.2 *_2 + license: Zlib + license_family: Other + purls: [] + run_exports: + weak: + - libzlib >=1.3.2,<2.0a0 + size: 47759 + timestamp: 1774072956767 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-22.1.8-hc7d1edf_0.conda + sha256: ccbaad6bbc88f135ab849bc36af5fa6eda36a9ed18ce6f58e3dde3d11784c156 + md5: a9c118f6343fb6301b6f3b4e94c4c562 + depends: + - __osx >=11.0 + constrains: + - intel-openmp <0.0a0 + - openmp 22.1.8|22.1.8.* + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + purls: [] + run_exports: + strong: + - llvm-openmp >=22.1.8 + size: 286313 + timestamp: 1781736516782 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.10.0-h286801f_1.conda + sha256: 94d3e2a485dab8bdfdd4837880bde3dd0d701e2b97d6134b8806b7c8e69c8652 + md5: 01511afc6cc1909c5303cf31be17b44f + depends: + - __osx >=11.0 + - libcxx >=18 + license: BSD-2-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - lz4-c >=1.10.0,<1.11.0a0 + size: 148824 + timestamp: 1733741047892 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.3-py314h6e9b3f0_1.conda + sha256: 411153d14ee0d98be6e3751cf5cc0502db17bce2deebebb8779e33d29d0e525f + md5: d33c0a15882b70255abdd54711b06a45 + depends: + - __osx >=11.0 + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python_abi 3.14.* *_cp314 + constrains: + - jinja2 >=3.0.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/markupsafe?source=hash-mapping + run_exports: {} + size: 27256 + timestamp: 1772445397216 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/matplotlib-base-3.11.0-py314ha5eae4c_0.conda + sha256: 725c41bcca60f81937ebafd438208f3041042ee79feea629d0800ec382c5287d + md5: be491edfb88200e074cee944c46a4296 + depends: + - __osx >=11.0 + - contourpy >=1.0.1 + - cycler >=0.10 + - fonttools >=4.22.0 + - freetype + - kiwisolver >=1.3.1 + - libcxx >=19 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libraqm >=0.10.5,<0.11.0a0 + - numpy >=1.23 + - numpy >=1.23,<3 + - packaging >=20.0 + - pillow >=8 + - pyparsing >=2.3.1 + - python >=3.14,<3.15.0a0 + - python-dateutil >=2.7 + - python_abi 3.14.* *_cp314 + - qhull >=2020.2,<2020.3.0a0 + license: PSF-2.0 + license_family: PSF + purls: + - pkg:pypi/matplotlib?source=hash-mapping + run_exports: {} + size: 8831714 + timestamp: 1781626884129 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/memray-1.19.3-py314h44d60dd_0.conda + sha256: 0b75d44b3c55e19ba7fb74f0dc26facd0bff3e2bbf8743b92cd2e18310535353 + md5: 2352ec0b6412ca6145b1a1ef3f9b9081 + depends: + - python + - rich >=11.2.0 + - jinja2 + - textual >=0.34.0 + - python 3.14.* *_cp314 + - __osx >=11.0 + - libcxx >=19 + - python_abi 3.14.* *_cp314 + - lz4-c >=1.10.0,<1.11.0a0 + license: Apache-2.0 AND BSD-3-Clause + purls: + - pkg:pypi/memray?source=hash-mapping + run_exports: {} + size: 1747945 + timestamp: 1775683364389 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.6-h1d4f5a5_0.conda + sha256: 4ea6c620b87bd1d42bb2ccc2c87cd2483fa2d7f9e905b14c223f11ff3f4c455d + md5: 343d10ed5b44030a2f67193905aea159 + depends: + - __osx >=11.0 + license: X11 AND BSD-3-Clause + purls: [] + run_exports: + weak: + - ncurses >=6.6,<7.0a0 + size: 805509 + timestamp: 1777423252320 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.5.0-py314hb79c6fa_0.conda + sha256: dfd260fce05ff833ac121a1b1e4aa22d9c346a781c1e883dd871338cc1d9f8b0 + md5: 5283d56d01517fa1780c72f2544e8603 + depends: + - python + - __osx >=11.0 + - libcxx >=19 + - libblas >=3.9.0,<4.0a0 + - python_abi 3.14.* *_cp314 + - liblapack >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/numpy?source=compressed-mapping + run_exports: + weak: + - numpy >=1.25,<3 + size: 7123654 + timestamp: 1782112549976 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.4-hd9e9057_0.conda + sha256: 60aca8b9f94d06b852b296c276b3cf0efba5a6eb9f25feb8708570d3a74f00e4 + md5: 4b5d3a91320976eec71678fad1e3569b + depends: + - __osx >=11.0 + - libcxx >=19 + - libpng >=1.6.55,<1.7.0a0 + - libtiff >=4.7.1,<4.8.0a0 + - libzlib >=1.3.1,<2.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - openjpeg >=2.5.4,<3.0a0 + size: 319697 + timestamp: 1772625397692 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.3-hd24854e_0.conda + sha256: b3e3ca895c336d4eb91c5d2f244a312bdb59a0de8cfa0cc4c179225ab2f6bbfb + md5: 8187a86242741725bfa74785fe812979 + depends: + - __osx >=11.0 + - ca-certificates + license: Apache-2.0 + license_family: Apache + purls: [] + run_exports: + weak: + - openssl >=3.6.3,<4.0a0 + size: 3102584 + timestamp: 1781069820667 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.47-h30297fc_0.conda + sha256: 5e2e443f796f2fd92adf7978286a525fb768c34e12b1ee9ded4000a41b2894ba + md5: 9b4190c4055435ca3502070186eba53a + depends: + - __osx >=11.0 + - bzip2 >=1.0.8,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - pcre2 >=10.47,<10.48.0a0 + size: 850231 + timestamp: 1763655726735 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-12.2.0-py314hab283cf_0.conda + sha256: 3d8a86c8cf69ea4bdfeaa3e89e7218bcdc1522e58c9c6298263bfede8ab48cee + md5: adf49537da0e0c34cf735e71fe579506 + depends: + - python + - __osx >=11.0 + - python 3.14.* *_cp314 + - tk >=8.6.13,<8.7.0a0 + - openjpeg >=2.5.4,<3.0a0 + - libxcb >=1.17.0,<2.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - python_abi 3.14.* *_cp314 + - libtiff >=4.7.1,<4.8.0a0 + - libjpeg-turbo >=3.1.2,<4.0a0 + - zlib-ng >=2.3.3,<2.4.0a0 + - lcms2 >=2.18,<3.0a0 + license: HPND + purls: + - pkg:pypi/pillow?source=hash-mapping + run_exports: {} + size: 1006294 + timestamp: 1775060469004 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pixman-0.46.4-h81086ad_1.conda + sha256: 29c9b08a9b8b7810f9d4f159aecfd205fce051633169040005c0b7efad4bc718 + md5: 17c3d745db6ea72ae2fce17e7338547f + depends: + - __osx >=11.0 + - libcxx >=19 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - pixman >=0.46.4,<1.0a0 + size: 248045 + timestamp: 1754665282033 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/prek-0.4.5-h6fdd925_0.conda + sha256: a91f822644bcb308fd8e3dbd079f03fb047784adaff0326768c4746e328d72e3 + md5: 4ce75f6117de1747a3dbe9c9009956d7 + depends: + - __osx >=11.0 + constrains: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + run_exports: {} + size: 5645361 + timestamp: 1781546839263 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-7.2.2-py314ha14b1ff_0.conda + sha256: e0f31c053eb11803d63860c213b2b1b57db36734f5f84a3833606f7c91fedff9 + md5: fc4c7ab223873eee32080d51600ce7e7 + depends: + - python + - __osx >=11.0 + - python 3.14.* *_cp314 + - python_abi 3.14.* *_cp314 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/psutil?source=hash-mapping + run_exports: {} + size: 245502 + timestamp: 1769678303655 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-hd74edd7_1002.conda + sha256: 8ed65e17fbb0ca944bfb8093b60086e3f9dd678c3448b5de212017394c247ee3 + md5: 415816daf82e0b23a736a069a75e9da7 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + run_exports: {} + size: 8381 + timestamp: 1726802424786 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-core-12.1-py314h3a4d195_0.conda + sha256: df5af268c5a74b7160d772c263ece6f43257faff571783443e34b5f1d5a61cf2 + md5: 75a84fc8337557347252cc4fd3ba2a93 + depends: + - __osx >=11.0 + - libffi >=3.5.2,<3.6.0a0 + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python_abi 3.14.* *_cp314 + - setuptools + license: MIT + license_family: MIT + purls: + - pkg:pypi/pyobjc-core?source=hash-mapping + run_exports: {} + size: 483374 + timestamp: 1763151489724 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-framework-cocoa-12.1-py314h36abed7_0.conda + sha256: aa76ee4328d0514d7c1c455dcd2d3b547db1c59797e54ce0a3f27de5b970e508 + md5: 4219bb3408016e22316cf8b443b5ef93 + depends: + - __osx >=11.0 + - libffi >=3.5.2,<3.6.0a0 + - pyobjc-core 12.1.* + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python_abi 3.14.* *_cp314 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pyobjc-framework-cocoa?source=hash-mapping + run_exports: {} + size: 374792 + timestamp: 1763160601898 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.14.6-h156bc91_100_cp314.conda + build_number: 100 + sha256: 984081c9fae3a3944c6f2707bbbbc70e8b961f02cdb7c640d9745e2636235632 + md5: 4841be3d0cf616a860efc6e60af66f8b + depends: + - __osx >=11.0 + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.8.1,<3.0a0 + - libffi >=3.5.2,<3.6.0a0 + - liblzma >=5.8.3,<6.0a0 + - libmpdec >=4.0.0,<5.0a0 + - libsqlite >=3.53.2,<4.0a0 + - libzlib >=1.3.2,<2.0a0 + - ncurses >=6.6,<7.0a0 + - openssl >=3.5.7,<4.0a0 + - python_abi 3.14.* *_cp314 + - readline >=8.3,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - zstd >=1.5.7,<1.6.0a0 + license: Python-2.0 + purls: [] + run_exports: + weak: + - python_abi 3.14.* *_cp314 + noarch: + - python + size: 14059371 + timestamp: 1781254578985 + python_site_packages_path: lib/python3.14/site-packages +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.3-py314h6e9b3f0_1.conda + sha256: 95f385f9606e30137cf0b5295f63855fd22223a4cf024d306cf9098ea1c4a252 + md5: dcf51e564317816cb8d546891019b3ab + depends: + - __osx >=11.0 + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python_abi 3.14.* *_cp314 + - yaml >=0.2.5,<0.3.0a0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pyyaml?source=hash-mapping + run_exports: {} + size: 189475 + timestamp: 1770223788648 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312h022ad19_3.conda + noarch: python + sha256: 086cc67ec57afb7c9c09b5e09e7356b536b5b1af6c2e97117dc022cd22f0d472 + md5: 73f22bde4991f30ae2bfac3811577c15 + depends: + - python + - libcxx >=19 + - __osx >=11.0 + - zeromq >=4.3.5,<4.4.0a0 + - _python_abi3_support 1.* + - cpython >=3.12 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pyzmq?source=hash-mapping + run_exports: {} + size: 191432 + timestamp: 1779484184540 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/qhull-2020.2-h420ef59_5.conda + sha256: 873ac689484262a51fd79bc6103c1a1bedbf524924d7f0088fb80703042805e4 + md5: 6483b1f59526e05d7d894e466b5b6924 + depends: + - __osx >=11.0 + - libcxx >=16 + license: LicenseRef-Qhull + purls: [] + run_exports: + weak: + - qhull >=2020.2,<2020.3.0a0 + size: 516376 + timestamp: 1720814307311 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda + sha256: a77010528efb4b548ac2a4484eaf7e1c3907f2aec86123ed9c5212ae44502477 + md5: f8381319127120ce51e081dce4865cf4 + depends: + - __osx >=11.0 + - ncurses >=6.5,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + run_exports: + weak: + - readline >=8.3,<9.0a0 + size: 313930 + timestamp: 1765813902568 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/rpds-py-2026.5.1-py314he1d1ac0_0.conda + sha256: 764b78892f8ba2a7d5cb24c2911bd5718753ba5b130bf4e0d9a0bb0001c139b1 + md5: 58fe40c3bba570ac2cbfac4f4ea983b7 + depends: + - python + - __osx >=11.0 + - python_abi 3.14.* *_cp314 + constrains: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/rpds-py?source=hash-mapping + run_exports: {} + size: 292087 + timestamp: 1779977082395 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-learn-1.9.0-np2py314h15f0f0f_0.conda + sha256: c5dc417c26c46eecf7e8931c53a4c18bcd2c274c994ee80bae4767baeed4807c + md5: 72cd17b6f8016221faaa96123711f8c9 + depends: + - python + - numpy >=1.24.1 + - scipy >=1.10.0 + - joblib >=1.4.0 + - threadpoolctl >=3.5.0 + - narwhals >=2.0.1 + - python 3.14.* *_cp314 + - __osx >=11.0 + - llvm-openmp >=19.1.7 + - libcxx >=19 + - python_abi 3.14.* *_cp314 + - numpy >=1.23,<3 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/scikit-learn?source=compressed-mapping + run_exports: {} + size: 9667030 + timestamp: 1780401292916 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/scipy-1.18.0-py314h18e1515_0.conda + sha256: 7ce218a4e1c55775547835d21a7ead0d50e5ac348fd638ce6ba316c48c8547b7 + md5: e55fe08bb5d43e7120672338dd129030 + depends: + - __osx >=11.0 + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libcxx >=19 + - libgfortran + - libgfortran5 >=14.3.0 + - liblapack >=3.9.0,<4.0a0 + - numpy <2.7 + - numpy >=1.23,<3 + - numpy >=2.0.0 + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/scipy?source=compressed-mapping + run_exports: {} + size: 14122215 + timestamp: 1781912992503 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda + sha256: 799cab4b6cde62f91f750149995d149bc9db525ec12595e8a1d91b9317f038b3 + md5: a9d86bc62f39b94c4661716624eb21b0 + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: TCL + license_family: BSD + purls: [] + run_exports: + weak: + - tk >=8.6.13,<8.7.0a0 + size: 3127137 + timestamp: 1769460817696 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.7-py314h6c2aa35_0.conda + sha256: 1a4f3d940cf239acde2fc61674b7cf80219a7f22a369e92b95b245be2d47caf1 + md5: cc1d84777343f00f01c08a2d9550f639 + depends: + - __osx >=11.0 + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python_abi 3.14.* *_cp314 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/tornado?source=hash-mapping + run_exports: {} + size: 915857 + timestamp: 1781007345425 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/unicodedata2-17.0.1-py314h6c2aa35_0.conda + sha256: 09bfbee5a2bcf4df06f21a2aa9eb40a7af97864a569beb5ea85fd6baf6e03ce7 + md5: 4fffb3ba871bb05f34ffb705534dfef5 + depends: + - __osx >=11.0 + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python_abi 3.14.* *_cp314 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/unicodedata2?source=hash-mapping + run_exports: {} + size: 416130 + timestamp: 1770909728445 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.12-hc919400_1.conda + sha256: adae11db0f66f86156569415ed79cda75b2dbf4bea48d1577831db701438164f + md5: 78b548eed8227a689f93775d5d23ae09 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - xorg-libxau >=1.0.12,<2.0a0 + size: 14105 + timestamp: 1762976976084 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hc919400_1.conda + sha256: f7fa0de519d8da589995a1fe78ef74556bb8bc4172079ae3a8d20c3c81354906 + md5: 9d1299ace1924aa8f4e0bc8e71dd0cf7 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - xorg-libxdmcp >=1.1.5,<2.0a0 + size: 19156 + timestamp: 1762977035194 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda + sha256: b03433b13d89f5567e828ea9f1a7d5c5d697bf374c28a4168d71e9464f5dafac + md5: 78a0fe9e9c50d2c381e8ee47e3ea437d + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - yaml >=0.2.5,<0.3.0a0 + size: 83386 + timestamp: 1753484079473 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h10816f8_11.conda + sha256: 01fd50d2801b23b59fafea6bf704a6c5faf0f5969104400eae0e6572cb2e5304 + md5: d31c0e54c4f9c51100ec8c812ee925d1 + depends: + - libcxx >=19 + - __osx >=11.0 + - krb5 >=1.22.2,<1.23.0a0 + - libsodium >=1.0.22,<1.0.23.0a0 + license: MPL-2.0 + license_family: MOZILLA + purls: [] + run_exports: + weak: + - zeromq >=4.3.5,<4.4.0a0 + size: 245404 + timestamp: 1779124076307 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-ng-2.3.3-hed4e4f5_1.conda + sha256: a339606a6b224bb230ff3d711e801934f3b3844271df9720165e0353716580d4 + md5: d99c2a23a31b0172e90f456f580b695e + depends: + - __osx >=11.0 + - libcxx >=19 + license: Zlib + license_family: Other + purls: [] + run_exports: + weak: + - zlib-ng >=2.3.3,<2.4.0a0 + size: 94375 + timestamp: 1770168363685 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda + sha256: 9485ba49e8f47d2b597dd399e88f4802e100851b27c21d7525625b0b4025a5d9 + md5: ab136e4c34e97f34fb621d2592a393d8 + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - zstd >=1.5.7,<1.6.0a0 + size: 433413 + timestamp: 1764777166076 +- conda: https://conda.anaconda.org/conda-forge/win-64/_openmp_mutex-4.5-20_gnu.conda + build_number: 20 + sha256: 8a1cee28bd0ee7451ada1cd50b64720e57e17ff994fc62dd8329bef570d382e4 + md5: 1626967b574d1784b578b52eaeb071e7 + depends: + - libgomp >=7.5.0 + - libwinpthread >=12.0.0.r4.gg4f2fc60ca + constrains: + - openmp_impl <0.0a0 + - msys2-conda-epoch <0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: + strong: + - _openmp_mutex >=4.5 + size: 52252 + timestamp: 1770943776666 +- conda: https://conda.anaconda.org/conda-forge/win-64/argon2-cffi-bindings-25.1.0-py314h5a2d7ad_2.conda + sha256: a742e7cd0d5534bfff3fd550a0c1e430411fad60a24f88930d261056ab08096f + md5: ffa247e46f47e157851dc547f4c513e4 + depends: + - cffi >=2.0.0b1 + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + purls: + - pkg:pypi/argon2-cffi-bindings?source=hash-mapping + run_exports: {} + size: 38653 + timestamp: 1762509771011 +- conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-auth-0.10.3-h4ad2c79_3.conda + sha256: 590ab6432edcbd9cab6e48bb10f22f42c4a5d17592c3d8b88beebe53249c42ce + md5: 6aedfd77c6667e5b107c7907002e98a4 + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - aws-c-cal >=0.9.14,<0.9.15.0a0 + - aws-c-sdkutils >=0.2.5,<0.2.6.0a0 + - aws-c-io >=0.26.3,<0.26.4.0a0 + - aws-c-http >=0.11.0,<0.11.1.0a0 + - aws-c-common >=0.14.0,<0.14.1.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + run_exports: + weak: + - aws-c-auth >=0.10.3,<0.10.4.0a0 + size: 127434 + timestamp: 1781802978944 +- conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-cal-0.9.14-h270aff2_2.conda + sha256: 5a5135cc6058ee3ef137eca20ee034e632f5bbc324ceedd931ddffe20c1dac71 + md5: 190c386d7a6c6c53ea819d3e5078c502 + depends: + - aws-c-common >=0.14.0,<0.14.1.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: Apache-2.0 + license_family: Apache + purls: [] + run_exports: + weak: + - aws-c-cal >=0.9.14,<0.9.15.0a0 + size: 53946 + timestamp: 1780566762774 +- conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-common-0.14.0-hfd05255_0.conda + sha256: 72d414cfaf47911467d5c5b4bb196f0ab1c3106053dda04d03ffbdef94ce7714 + md5: 535d224f288e8b2366b71f390f5d52fd + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: Apache-2.0 + license_family: Apache + purls: [] + run_exports: + weak: + - aws-c-common >=0.14.0,<0.14.1.0a0 + size: 240292 + timestamp: 1780160988434 +- conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-compression-0.3.2-h1f21522_2.conda + sha256: d46d9152e81d566666520fe751d7d063bc14a6d57c267f5aca0c882d2425f106 + md5: bf8202d63ba3ccf63f8f0d560b484611 + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - aws-c-common >=0.14.0,<0.14.1.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + run_exports: + weak: + - aws-c-compression >=0.3.2,<0.3.3.0a0 + size: 23102 + timestamp: 1780566266559 +- conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-http-0.11.0-h4721ae0_2.conda + sha256: 121556c3169b5b9a3e458ce8d7f438f7dfaf583820727ec53c2d0c216bbad73a + md5: 8292db4a8957ea01e74ad9c2bf75b45f + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - aws-c-common >=0.14.0,<0.14.1.0a0 + - aws-c-cal >=0.9.14,<0.9.15.0a0 + - aws-c-compression >=0.3.2,<0.3.3.0a0 + - aws-c-io >=0.26.3,<0.26.4.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + run_exports: + weak: + - aws-c-http >=0.11.0,<0.11.1.0a0 + size: 213110 + timestamp: 1780586788750 +- conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-io-0.26.3-h1a62f66_5.conda + sha256: 7e11866b0bd0d39e023e7b7fc8b39b080c6aaf51dc6569cd5328d5b463a34ef0 + md5: ecbc4dc70e523b6990f4994b618d6142 + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - aws-c-cal >=0.9.14,<0.9.15.0a0 + - aws-c-common >=0.14.0,<0.14.1.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + run_exports: + weak: + - aws-c-io >=0.26.3,<0.26.4.0a0 + size: 182284 + timestamp: 1781649836283 +- conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-s3-0.12.6-h425879c_0.conda + sha256: 79480a3e2cdc9996bcf956c40da69af7f0c381025d3a3767bca3bfd9ab7ad5a7 + md5: d48ab0822e0cd063f28f9bdc3b131025 + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - aws-c-io >=0.26.3,<0.26.4.0a0 + - aws-c-common >=0.14.0,<0.14.1.0a0 + - aws-c-auth >=0.10.3,<0.10.4.0a0 + - aws-c-http >=0.11.0,<0.11.1.0a0 + - aws-c-cal >=0.9.14,<0.9.15.0a0 + - aws-checksums >=0.2.10,<0.2.11.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + run_exports: + weak: + - aws-c-s3 >=0.12.6,<0.12.7.0a0 + size: 144210 + timestamp: 1781253046025 +- conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-sdkutils-0.2.5-h1f21522_0.conda + sha256: d81e792b5196631fb94bebe889dbb553934c82395c83da434fe20c0931b279a0 + md5: a9f7e722616c9d49c1bfd50907f96af4 + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - aws-c-common >=0.14.0,<0.14.1.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + run_exports: + weak: + - aws-c-sdkutils >=0.2.5,<0.2.6.0a0 + size: 62623 + timestamp: 1781063655067 +- conda: https://conda.anaconda.org/conda-forge/win-64/aws-checksums-0.2.10-h1f21522_2.conda + sha256: 11fa04b860b263503478dc9ef5d9516fc12078b60ec845e58f2e8fb7076fe264 + md5: f4f71178b5be79f887b2d575400c4133 + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - aws-c-common >=0.14.0,<0.14.1.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + run_exports: + weak: + - aws-checksums >=0.2.10,<0.2.11.0a0 + size: 116849 + timestamp: 1780568566902 +- conda: https://conda.anaconda.org/conda-forge/win-64/brotli-1.2.0-h2d644bc_1.conda + sha256: a4fffdf1c9b9d3d0d787e20c724cff3a284dfa3773f9ce609c93b1cfd0ce8933 + md5: bc58fdbced45bb096364de0fba1637af + depends: + - brotli-bin 1.2.0 hfd05255_1 + - libbrotlidec 1.2.0 hfd05255_1 + - libbrotlienc 1.2.0 hfd05255_1 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - libbrotlicommon >=1.2.0,<1.3.0a0 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + size: 20342 + timestamp: 1764017988883 +- conda: https://conda.anaconda.org/conda-forge/win-64/brotli-bin-1.2.0-hfd05255_1.conda + sha256: e76966232ef9612de33c2087e3c92c2dc42ea5f300050735a3c646f33bce0429 + md5: 6abd7089eb3f0c790235fe469558d190 + depends: + - libbrotlidec 1.2.0 hfd05255_1 + - libbrotlienc 1.2.0 hfd05255_1 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + purls: [] + run_exports: {} + size: 22714 + timestamp: 1764017952449 +- conda: https://conda.anaconda.org/conda-forge/win-64/brotli-python-1.2.0-py314he701e3d_1.conda + sha256: 6854ee7675135c57c73a04849c29cbebc2fb6a3a3bfee1f308e64bf23074719b + md5: 1302b74b93c44791403cbeee6a0f62a3 + depends: + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - libbrotlicommon 1.2.0 hfd05255_1 + license: MIT + license_family: MIT + purls: + - pkg:pypi/brotli?source=hash-mapping + run_exports: {} + size: 335782 + timestamp: 1764018443683 +- conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda + sha256: 76dfb71df5e8d1c4eded2dbb5ba15bb8fb2e2b0fe42d94145d5eed4c75c35902 + md5: 4cb8e6b48f67de0b018719cdf1136306 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + run_exports: + weak: + - bzip2 >=1.0.8,<2.0a0 + size: 56115 + timestamp: 1771350256444 +- conda: https://conda.anaconda.org/conda-forge/win-64/cairo-1.18.4-h477c42c_1.conda + sha256: 9ee4ad706c5d3e1c6c469785d60e3c2b263eec569be0eac7be33fbaef978bccc + md5: 52ea1beba35b69852d210242dd20f97d + depends: + - fontconfig >=2.15.0,<3.0a0 + - fonts-conda-ecosystem + - icu >=78.1,<79.0a0 + - libexpat >=2.7.3,<3.0a0 + - libfreetype >=2.14.1 + - libfreetype6 >=2.14.1 + - libglib >=2.86.3,<3.0a0 + - libpng >=1.6.53,<1.7.0a0 + - libzlib >=1.3.1,<2.0a0 + - pixman >=0.46.4,<1.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: LGPL-2.1-only or MPL-1.1 + purls: [] + run_exports: + weak: + - cairo >=1.18.4,<2.0a0 + size: 1537783 + timestamp: 1766416059188 +- conda: https://conda.anaconda.org/conda-forge/win-64/cffi-2.0.0-py314h5a2d7ad_1.conda + sha256: 924f2f01fa7a62401145ef35ab6fc95f323b7418b2644a87fea0ea68048880ed + md5: c360170be1c9183654a240aadbedad94 + depends: + - pycparser + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + run_exports: {} + size: 294731 + timestamp: 1761203441365 +- conda: https://conda.anaconda.org/conda-forge/win-64/contourpy-1.3.3-py314hf309875_4.conda + sha256: f141bcbf8e490b49b2f53f517173d13a64d75e43cfae170e0d931cb0b66f4bce + md5: c26934035616f7d578f9da0491aed3d8 + depends: + - numpy >=1.25 + - python + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.14.* *_cp314 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/contourpy?source=hash-mapping + run_exports: {} + size: 247437 + timestamp: 1769155978556 +- conda: https://conda.anaconda.org/conda-forge/win-64/coverage-7.14.3-py314h2359020_0.conda + sha256: 1879a89f00d90166db5d3eaa455aa329f5a2fbeab5662630548e477047074125 + md5: 2d2497e3c3b759375810139e7ccc0328 + depends: + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + - tomli + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: Apache-2.0 + purls: + - pkg:pypi/coverage?source=hash-mapping + run_exports: {} + size: 443224 + timestamp: 1782178194098 +- conda: https://conda.anaconda.org/conda-forge/win-64/debugpy-1.8.21-py314hb98de8c_0.conda + sha256: daa9397ffba6722f27c21b2f0a02b197f3ba9baedb484a155539743ec5ea3ac3 + md5: 945786ac874b8e821a675fbdd885f844 + depends: + - python + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.14.* *_cp314 + license: MIT + license_family: MIT + purls: + - pkg:pypi/debugpy?source=hash-mapping + run_exports: {} + size: 4022782 + timestamp: 1780390190830 +- conda: https://conda.anaconda.org/conda-forge/win-64/fontconfig-2.18.1-hd47e2ca_0.conda + sha256: 9217184c4a8e82101b0e512b059ae3ff67e3913133b9031edad89ab5341284e4 + md5: abd79bad98c99c1a116154d6de74ea89 + depends: + - libexpat >=2.8.1,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libiconv >=1.18,<2.0a0 + - libintl >=0.22.5,<1.0a0 + - libzlib >=1.3.2,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - fontconfig >=2.18.1,<3.0a0 + - fonts-conda-ecosystem + size: 202630 + timestamp: 1780450217840 +- conda: https://conda.anaconda.org/conda-forge/win-64/freetype-2.14.3-h57928b3_1.conda + sha256: a0e419e96146159f12344c870dca608d11bca36841f228092b986ffc2e1e0f02 + md5: e77293b32225b136a8be300f93d0e89f + depends: + - libfreetype 2.14.3 h57928b3_1 + - libfreetype6 2.14.3 hdbac1cb_1 + - zlib + license: GPL-2.0-only OR FTL + purls: [] + run_exports: + weak: + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + size: 185584 + timestamp: 1780934817461 +- conda: https://conda.anaconda.org/conda-forge/win-64/fribidi-1.0.16-hfd05255_0.conda + sha256: 15011071ee56c216ffe276c8d734427f1f893f275ef733f728d13f610ed89e6e + md5: c27bd87e70f970010c1c6db104b88b18 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: LGPL-2.1-or-later + purls: [] + run_exports: + weak: + - fribidi >=1.0.16,<2.0a0 + size: 64394 + timestamp: 1757438741305 +- conda: https://conda.anaconda.org/conda-forge/win-64/graphite2-1.3.15-hac47afa_0.conda + sha256: 88b6601f8edae59834b59b521e293ff3b58361dc1603240f5a8328c24e6936ad + md5: ff9a9bfe791f56b0227597a7651a6af0 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: LGPL-2.0-or-later + license_family: LGPL + purls: [] + run_exports: + weak: + - graphite2 >=1.3.15,<2.0a0 + size: 97308 + timestamp: 1780454389458 +- conda: https://conda.anaconda.org/conda-forge/win-64/h5py-3.16.0-nompi_py314h02517ec_102.conda + sha256: 5ee88f1f691829d2430761a26a690c3d880e7cd41e40a4057131360a8904e0bd + md5: 19bdd6358ce2be9ef29f92b1564db61d + depends: + - cached-property + - hdf5 >=2.1.0,<3.0a0 + - numpy >=1.23,<3 + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/h5py?source=hash-mapping + run_exports: {} + size: 1101679 + timestamp: 1775582027560 +- conda: https://conda.anaconda.org/conda-forge/win-64/harfbuzz-14.2.1-h5a1b470_0.conda + sha256: 55d6d483e089afe68bdbb38a003d7b76002e65341665b80f38e6ce4b494beef6 + md5: 0bcbb7f911590beec914555c6b82050d + depends: + - cairo >=1.18.4,<2.0a0 + - graphite2 >=1.3.14,<2.0a0 + - icu >=78.3,<79.0a0 + - libexpat >=2.8.1,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libglib >=2.88.1,<3.0a0 + - libzlib >=1.3.2,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - harfbuzz >=14.2.1 + size: 1304897 + timestamp: 1780450940279 +- conda: https://conda.anaconda.org/conda-forge/win-64/hdf5-2.1.0-nompi_ha9ae7cf_108.conda + sha256: 3c13bd2e6c2b3946cace7b3b09518002fc61109629ec46040c7df14392e35847 + md5: a5f85ab8aa403db6a0a78075b6bc4ff5 + depends: + - aws-c-auth >=0.10.3,<0.10.4.0a0 + - aws-c-common >=0.14.0,<0.14.1.0a0 + - aws-c-http >=0.11.0,<0.11.1.0a0 + - aws-c-io >=0.26.3,<0.26.4.0a0 + - aws-c-s3 >=0.12.6,<0.12.7.0a0 + - aws-c-sdkutils >=0.2.5,<0.2.6.0a0 + - libaec >=1.1.5,<2.0a0 + - libcurl >=8.20.0,<9.0a0 + - libzlib >=1.3.2,<2.0a0 + - openssl >=3.5.7,<4.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - hdf5 >=2.1.0,<3.0a0 + size: 2557385 + timestamp: 1781836888760 +- conda: https://conda.anaconda.org/conda-forge/win-64/icu-78.3-h637d24d_0.conda + sha256: 1bda728d70a619731b278c859eda364146cb5b4b8c739a64da8128353d81d1c4 + md5: 0097b24800cb696915c3dbd1f5335d3f + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - icu >=78.3,<79.0a0 + size: 14954024 + timestamp: 1773822508646 +- conda: https://conda.anaconda.org/conda-forge/win-64/kiwisolver-1.5.0-py314hf309875_0.conda + sha256: 37cbc49fd7255532d09fb3bc9cc699554693e632fa90678a9b3d0ed12557d0d7 + md5: 0508c8dabeab91311e5c59b5e3f6d278 + depends: + - python + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.14.* *_cp314 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/kiwisolver?source=hash-mapping + run_exports: {} + size: 73330 + timestamp: 1773067062280 +- conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.22.2-h719d79b_1.conda + sha256: c55745796e762ba9e817ab1fc0f21f1a049e202f90fa762df39578f37923f6c2 + md5: 00335c2c4a98656554771aaf6f1a7400 + depends: + - openssl >=3.5.7,<4.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - krb5 >=1.22.2,<1.23.0a0 + size: 750320 + timestamp: 1781859644591 +- conda: https://conda.anaconda.org/conda-forge/win-64/lcms2-2.19.1-hf2c6c5f_1.conda + sha256: 5ed63a32639a130564a870becb679fd52dfb816666a61ed3c023917389010480 + md5: 1df4012c8a2478699d07bc26af66d41e + depends: + - libjpeg-turbo >=3.1.4.1,<4.0a0 + - libtiff >=4.7.1,<4.8.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - lcms2 >=2.19.1,<3.0a0 + size: 523194 + timestamp: 1780211799997 +- conda: https://conda.anaconda.org/conda-forge/win-64/lerc-4.1.0-hd936e49_0.conda + sha256: 45df58fca800b552b17c3914cc9ab0d55a82c5172d72b5c44a59c710c06c5473 + md5: 54b231d595bc1ff9bff668dd443ee012 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: Apache-2.0 + license_family: Apache + purls: [] + run_exports: + weak: + - lerc >=4.1.0,<5.0a0 + size: 172395 + timestamp: 1773113455582 +- conda: https://conda.anaconda.org/conda-forge/win-64/libaec-1.1.5-haf901d7_0.conda + sha256: e54c08964262c73671d9e80e400333e59c617e0b454476ad68933c0c458156c8 + md5: 43b6385cfad52a7083f2c41984eb4e91 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: BSD-2-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - libaec >=1.1.5,<2.0a0 + size: 34463 + timestamp: 1769221960556 +- conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.11.0-8_h8455456_mkl.conda + build_number: 8 + sha256: 43a87b59e6d4c68d80b2e4de487b1b54d66fe1f9a06636909b5a5ab9eae27269 + md5: 4a0ce24b1a946ff77ae9eaa7ef015a33 + depends: + - mkl >=2026.0.0,<2027.0a0 + constrains: + - libcblas 3.11.0 8*_mkl + - liblapacke 3.11.0 8*_mkl + - blas 2.308 mkl + - liblapack 3.11.0 8*_mkl + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - libblas >=3.11.0,<4.0a0 + size: 68103 + timestamp: 1779859688049 +- conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlicommon-1.2.0-hfd05255_1.conda + sha256: 5097303c2fc8ebf9f9ea9731520aa5ce4847d0be41764edd7f6dee2100b82986 + md5: 444b0a45bbd1cb24f82eedb56721b9c4 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - libbrotlicommon >=1.2.0,<1.3.0a0 + size: 82042 + timestamp: 1764017799966 +- conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlidec-1.2.0-hfd05255_1.conda + sha256: 3239ce545cf1c32af6fffb7fc7c75cb1ef5b6ea8221c66c85416bb2d46f5cccb + md5: 450e3ae947fc46b60f1d8f8f318b40d4 + depends: + - libbrotlicommon 1.2.0 hfd05255_1 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - libbrotlidec >=1.2.0,<1.3.0a0 + size: 34449 + timestamp: 1764017851337 +- conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlienc-1.2.0-hfd05255_1.conda + sha256: 3226df6b7df98734440739f75527d585d42ca2bfe912fbe8d1954c512f75341a + md5: ccd93cfa8e54fd9df4e83dbe55ff6e8c + depends: + - libbrotlicommon 1.2.0 hfd05255_1 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - libbrotlienc >=1.2.0,<1.3.0a0 + size: 252903 + timestamp: 1764017901735 +- conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.11.0-8_h2a3cdd5_mkl.conda + build_number: 8 + sha256: 2a5b6555b481df4603e44cba49a6ef727584fd2f3c5235dd4bcb3028fffbdfb5 + md5: 09f1d8e4d2675d34ad2acb115211d10c + depends: + - libblas 3.11.0 8_h8455456_mkl + constrains: + - liblapacke 3.11.0 8*_mkl + - blas 2.308 mkl + - liblapack 3.11.0 8*_mkl + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - libcblas >=3.11.0,<4.0a0 + size: 68443 + timestamp: 1779859701498 +- conda: https://conda.anaconda.org/conda-forge/win-64/libcurl-8.20.0-h8206538_0.conda + sha256: f4ce5aa835a698532feaa368e804365a7e45a9edebe006a8e1c80505d893c24e + md5: 7bee27a8f0a295117ccb864f30d2d87e + depends: + - krb5 >=1.22.2,<1.23.0a0 + - libssh2 >=1.11.1,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: curl + license_family: MIT + purls: [] + run_exports: + weak: + - libcurl >=8.20.0,<9.0a0 + size: 393114 + timestamp: 1777461635732 +- conda: https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.25-h51727cc_0.conda + sha256: 834e4881a18b690d5ec36f44852facd38e13afe599e369be62d29bd675f107ee + md5: e77030e67343e28b084fabd7db0ce43e + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - libdeflate >=1.25,<1.26.0a0 + size: 156818 + timestamp: 1761979842440 +- conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.8.1-hac47afa_1.conda + sha256: 1a54d874addda73b6f7164d5f3905821277a1831bcc05edd74b3085391688571 + md5: ccc490c81ffe14181861beac0e8f3169 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - expat 2.8.1.* + license: MIT + license_family: MIT + purls: [] + run_exports: {} + size: 71631 + timestamp: 1781203724164 +- conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h3d046cb_0.conda + sha256: 59d01f2dfa8b77491b5888a5ab88ff4e1574c9359f7e229da254cdfe27ddc190 + md5: 720b39f5ec0610457b725eb3f396219a + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - libffi >=3.5.2,<3.6.0a0 + size: 45831 + timestamp: 1769456418774 +- conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype-2.14.3-h57928b3_1.conda + sha256: 035d0c67bf9f7a16f4a1764f420c120f1a995d071bb265fcc66ef688ef709d7b + md5: e45b52fb9a81c9e2708465a706e05952 + depends: + - libfreetype6 >=2.14.3 + license: GPL-2.0-only OR FTL + purls: [] + run_exports: {} + size: 8711 + timestamp: 1780934891782 +- conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype6-2.14.3-hdbac1cb_1.conda + sha256: 0bbd19c9f7c4d0232b31892e6a4d1f82b8d19d1b84d89725f1f491b336447758 + md5: 4e4d54f9f98383d977ba56ef39ebf46d + depends: + - libpng >=1.6.58,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - freetype >=2.14.3 + license: GPL-2.0-only OR FTL + purls: [] + run_exports: {} + size: 340411 + timestamp: 1780934813224 +- conda: https://conda.anaconda.org/conda-forge/win-64/libgcc-15.2.0-h8ee18e1_19.conda + sha256: 80e80ef5e31b00b12539db3c5aaecde60dab91381abfc1060e323d5c3b016dce + md5: cc5d690fc1c629038f13c68e88e65f44 + depends: + - _openmp_mutex >=4.5 + - libwinpthread >=12.0.0.r4.gg4f2fc60ca + constrains: + - msys2-conda-epoch <0.0a0 + - libgcc-ng ==15.2.0=*_19 + - libgomp 15.2.0 h8ee18e1_19 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + run_exports: {} + size: 821854 + timestamp: 1778273037795 +- conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.88.1-h7ce1215_2.conda + sha256: f61277e224e9889c221bb2eac0f57d5aeeb82fc45d3dc326957d251c97444f7c + md5: 5fb838786a8317ebb38056bbe236d3ff + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - libiconv >=1.18,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - pcre2 >=10.47,<10.48.0a0 + - libintl >=0.22.5,<1.0a0 + - libffi >=3.5.2,<3.6.0a0 + constrains: + - glib >2.66 + license: LGPL-2.1-or-later + purls: [] + run_exports: + weak: + - libglib >=2.88.1,<3.0a0 + size: 4522891 + timestamp: 1778508851933 +- conda: https://conda.anaconda.org/conda-forge/win-64/libgomp-15.2.0-h8ee18e1_19.conda + sha256: 4dc958ced2fc7f42bc675b07e2c9abe3e150875ffdf62ca551d94fc6facf1fd7 + md5: f1147651e3fdd585e2f442c0c2fc8f2d + depends: + - libwinpthread >=12.0.0.r4.gg4f2fc60ca + constrains: + - msys2-conda-epoch <0.0a0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + run_exports: + strong: + - _openmp_mutex >=4.5 + - libgomp >=15.2.0 + size: 664640 + timestamp: 1778272979661 +- conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.13.0-default_h049141e_1000.conda + sha256: 2ee12e37223dfcd0acd050c80a91150c482b6e2899198521e1800dce66662467 + md5: 6a01c986e30292c715038d2788aa1385 + depends: + - libwinpthread >=12.0.0.r4.gg4f2fc60ca + - libxml2 + - libxml2-16 >=2.14.6 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - libhwloc >=2.13.0,<2.13.1.0a0 + size: 2396128 + timestamp: 1770954127918 +- conda: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.18-hc1393d2_2.conda + sha256: 0dcdb1a5f01863ac4e8ba006a8b0dc1a02d2221ec3319b5915a1863254d7efa7 + md5: 64571d1dd6cdcfa25d0664a5950fdaa2 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: LGPL-2.1-only + purls: [] + run_exports: + weak: + - libiconv >=1.18,<2.0a0 + size: 696926 + timestamp: 1754909290005 +- conda: https://conda.anaconda.org/conda-forge/win-64/libintl-0.22.5-h5728263_3.conda + sha256: c7e4600f28bcada8ea81456a6530c2329312519efcf0c886030ada38976b0511 + md5: 2cf0cf76cc15d360dfa2f17fd6cf9772 + depends: + - libiconv >=1.17,<2.0a0 + license: LGPL-2.1-or-later + purls: [] + run_exports: + weak: + - libintl >=0.22.5,<1.0a0 + size: 95568 + timestamp: 1723629479451 +- conda: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.1.4.1-hfd05255_0.conda + sha256: 698d57b5b90120270eaa401298319fcb25ea186ae95b340c2f4813ed9171083d + md5: 25a127bad5470852b30b239f030ec95b + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + run_exports: + weak: + - libjpeg-turbo >=3.1.4.1,<4.0a0 + size: 842806 + timestamp: 1775962811457 +- conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.11.0-8_hf9ab0e9_mkl.conda + build_number: 8 + sha256: 44999ed04bc0a56de44ee0ac8bd5b3702efd411a8b29491c0e3d3deb8619c94e + md5: d584799b920ecae9b75a2b70743a3de7 + depends: + - libblas 3.11.0 8_h8455456_mkl + constrains: + - libcblas 3.11.0 8*_mkl + - liblapacke 3.11.0 8*_mkl + - blas 2.308 mkl + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - liblapack >=3.11.0,<3.12.0a0 + size: 81027 + timestamp: 1779859714698 +- conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.3-hfd05255_0.conda + sha256: d636d1a25234063642f9c531a7bb58d84c1c496411280a36ea000bd122f078f1 + md5: 8f83619ab1588b98dd99c90b0bfc5c6d + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - xz 5.8.3.* + license: 0BSD + purls: [] + run_exports: + weak: + - liblzma >=5.8.3,<6.0a0 + size: 106486 + timestamp: 1775825663227 +- conda: https://conda.anaconda.org/conda-forge/win-64/libmpdec-4.0.0-hfd05255_1.conda + sha256: 40dcd0b9522a6e0af72a9db0ced619176e7cfdb114855c7a64f278e73f8a7514 + md5: e4a9fc2bba3b022dad998c78856afe47 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: BSD-2-Clause + license_family: BSD + purls: [] + run_exports: {} + size: 89411 + timestamp: 1769482314283 +- conda: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.58-h7351971_0.conda + sha256: 218913aeee391460bd0e341b834dbd9c6fa6ae0a4276c0c300266cc99a816a28 + md5: 52f1280563f3b48b5f75414cd2d15dd1 + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - libzlib >=1.3.2,<2.0a0 + license: zlib-acknowledgement + purls: [] + run_exports: + weak: + - libpng >=1.6.58,<1.7.0a0 + size: 385227 + timestamp: 1776315248638 +- conda: https://conda.anaconda.org/conda-forge/win-64/libraqm-0.10.5-h781ae3c_0.conda + sha256: 7fc56b16f0379dfa73fef5741264565de621005e2f8d529523f5c33f0cec9daf + md5: df06465614f67f7e41233d356aa7a927 + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - harfbuzz >=14.2.1 + - fribidi >=1.0.16,<2.0a0 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - libraqm >=0.10.5,<0.11.0a0 + size: 29178 + timestamp: 1780835195143 +- conda: https://conda.anaconda.org/conda-forge/win-64/libsodium-1.0.22-h6a83c73_1.conda + sha256: de45b71224da77a1c3a7dd48d8885eb957c9f05455d4f0828463293e7144330f + md5: 7d5abf7ca1bd00b43d273f44d93d05dc + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + license: ISC + purls: [] + run_exports: + weak: + - libsodium >=1.0.22,<1.0.23.0a0 + size: 280234 + timestamp: 1779164124739 +- conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.2-hf5d6505_0.conda + sha256: 4cd81319dcc58fb758da20a6d5595950c021adc2c18d7cffeadcfb590529629f + md5: df294e7f9f24a6063f0e226f4d028fda + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: blessing + purls: [] + run_exports: + weak: + - libsqlite >=3.53.2,<4.0a0 + size: 1313306 + timestamp: 1780574491977 +- conda: https://conda.anaconda.org/conda-forge/win-64/libssh2-1.11.1-h9aa295b_0.conda + sha256: cbdf93898f2e27cefca5f3fe46519335d1fab25c4ea2a11b11502ff63e602c09 + md5: 9dce2f112bfd3400f4f432b3d0ac07b2 + depends: + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.0,<4.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - libssh2 >=1.11.1,<2.0a0 + size: 292785 + timestamp: 1745608759342 +- conda: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.1-h8f73337_1.conda + sha256: f1b8cccaaeea38a28b9cd496694b2e3d372bb5be0e9377c9e3d14b330d1cba8a + md5: 549845d5133100142452812feb9ba2e8 + depends: + - lerc >=4.0.0,<5.0a0 + - libdeflate >=1.25,<1.26.0a0 + - libjpeg-turbo >=3.1.0,<4.0a0 + - liblzma >=5.8.1,<6.0a0 + - libzlib >=1.3.1,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - zstd >=1.5.7,<1.6.0a0 + license: HPND + purls: [] + run_exports: + weak: + - libtiff >=4.7.1,<4.8.0a0 + size: 993166 + timestamp: 1762022118895 +- conda: https://conda.anaconda.org/conda-forge/win-64/libwebp-base-1.6.0-h4d5522a_0.conda + sha256: 7b6316abfea1007e100922760e9b8c820d6fc19df3f42fb5aca684cfacb31843 + md5: f9bbae5e2537e3b06e0f7310ba76c893 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - libwebp 1.6.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - libwebp-base >=1.6.0,<2.0a0 + size: 279176 + timestamp: 1752159543911 +- conda: https://conda.anaconda.org/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_10.conda + sha256: 0fccf2d17026255b6e10ace1f191d0a2a18f2d65088fd02430be17c701f8ffe0 + md5: 8a86073cf3b343b87d03f41790d8b4e5 + depends: + - ucrt + constrains: + - pthreads-win32 <0.0a0 + - msys2-conda-epoch <0.0a0 + license: MIT AND BSD-3-Clause-Clear + purls: [] + run_exports: {} + size: 36621 + timestamp: 1759768399557 +- conda: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.17.0-h0e4246c_0.conda + sha256: 08dec73df0e161c96765468847298a420933a36bc4f09b50e062df8793290737 + md5: a69bbf778a462da324489976c84cfc8c + depends: + - libgcc >=13 + - libwinpthread >=12.0.0.r4.gg4f2fc60ca + - pthread-stubs + - ucrt >=10.0.20348.0 + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - libxcb >=1.17.0,<2.0a0 + size: 1208687 + timestamp: 1727279378819 +- conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.3-h3cfd58e_0.conda + sha256: 3b61ee3caba702d2ff432fa3920835db963026e5c99c4e6fdca0c6114f59e7ce + md5: 9e8dd0d90ed830107b2c36801035b7db + depends: + - icu >=78.3,<79.0a0 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libzlib >=1.3.2,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - libxml2 2.15.3 + license: MIT + license_family: MIT + purls: [] + run_exports: {} + size: 519871 + timestamp: 1776376969852 +- conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.3-h8ef44ab_0.conda + sha256: a4599c6bbbbdd7db570896e520c557eec8e66d94e839a59d17dc1f24a3d5f82b + md5: 95591ca5671d2213f5b2d5aa7818420d + depends: + - icu >=78.3,<79.0a0 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libxml2-16 2.15.3 h3cfd58e_0 + - libzlib >=1.3.2,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - libxml2 + - libxml2-16 >=2.15.3 + size: 43684 + timestamp: 1776376992865 +- conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.2-hfd05255_2.conda + sha256: 88609816e0cc7452bac637aaf65783e5edf4fee8a9f8e22bdc3a75882c536061 + md5: dbabbd6234dea34040e631f87676292f + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - zlib 1.3.2 *_2 + license: Zlib + license_family: Other + purls: [] + run_exports: + weak: + - libzlib >=1.3.2,<2.0a0 + size: 58347 + timestamp: 1774072851498 +- conda: https://conda.anaconda.org/conda-forge/win-64/llvm-openmp-22.1.8-h4fa8253_0.conda + sha256: 50c02902bb516eeb56680358f052be38b5bf74b40e78ea4b2a675e84957e7307 + md5: de3551bf6508d45ca46b714639e52823 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - openmp 22.1.8|22.1.8.* + - intel-openmp <0.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + purls: [] + run_exports: + strong: + - llvm-openmp >=22.1.8 + size: 348002 + timestamp: 1781737042070 +- conda: https://conda.anaconda.org/conda-forge/win-64/markupsafe-3.0.3-py314h2359020_1.conda + sha256: 02805a0f3cd168dbf13afc5e4aed75cc00fe538ce143527a6471485b36f5887c + md5: 8de7b40f8b30a8fcaa423c2537fe4199 + depends: + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - jinja2 >=3.0.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/markupsafe?source=hash-mapping + run_exports: {} + size: 30022 + timestamp: 1772445159549 +- conda: https://conda.anaconda.org/conda-forge/win-64/matplotlib-base-3.11.0-py314h6cfc8ec_0.conda + sha256: 8369ba3f2d4f8d6546d5eb18594f410ac67f465c541bfa60c29ab0b1e2fe5e24 + md5: 9a095cd224b2c19c73a2dbbb0cd9fed2 + depends: + - contourpy >=1.0.1 + - cycler >=0.10 + - fonttools >=4.22.0 + - freetype + - kiwisolver >=1.3.1 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libraqm >=0.10.5,<0.11.0a0 + - numpy >=1.23 + - numpy >=1.23,<3 + - packaging >=20.0 + - pillow >=8 + - pyparsing >=2.3.1 + - python >=3.14,<3.15.0a0 + - python-dateutil >=2.7 + - python_abi 3.14.* *_cp314 + - qhull >=2020.2,<2020.3.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: PSF-2.0 + license_family: PSF + purls: + - pkg:pypi/matplotlib?source=hash-mapping + run_exports: {} + size: 8652168 + timestamp: 1781627111884 +- conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2026.0.0-hac47afa_908.conda + sha256: f997bfc9bc4d4e14261cdcd1ad195d64a72ee44dca3145d24c1349f8d1311aa5 + md5: 36ea6e1292e9d5e89374201da79646ef + depends: + - llvm-openmp >=22.1.5 + - onemkl-license 2026.0.0 h57928b3_908 + - tbb >=2023.0.0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: LicenseRef-IntelSimplifiedSoftwareOct2022 + license_family: Proprietary + purls: [] + run_exports: {} + size: 114354729 + timestamp: 1779293121860 +- conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.5.0-py314h02f10f6_0.conda + sha256: 86c3e926fa1d6f27ebe6b9db11ff12e9a3b6e4b0343bf4a9b489dafd9614da3f + md5: f92585b1624ecdd117b6d13fd4d691ed + depends: + - python + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - liblapack >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libblas >=3.9.0,<4.0a0 + - python_abi 3.14.* *_cp314 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/numpy?source=compressed-mapping + run_exports: + weak: + - numpy >=1.25,<3 + size: 7436159 + timestamp: 1782112573833 +- conda: https://conda.anaconda.org/conda-forge/win-64/onemkl-license-2026.0.0-h57928b3_908.conda + sha256: 42ad15cbb3bf31830efa04d4b86dd2d5c0dd590c86f98adcd3c8c1f75acf5dd5 + md5: 9c9303e08b50e09f5c23e1dac99d0936 + license: LicenseRef-IntelSimplifiedSoftwareOct2022 + license_family: Proprietary + purls: [] + run_exports: {} + size: 41580 + timestamp: 1779292867015 +- conda: https://conda.anaconda.org/conda-forge/win-64/openjpeg-2.5.4-h0e57b4f_0.conda + sha256: 24342dee891a49a9ba92e2018ec0bde56cc07fdaec95275f7a55b96f03ea4252 + md5: e723ab7cc2794c954e1b22fde51c16e4 + depends: + - libpng >=1.6.55,<1.7.0a0 + - libtiff >=4.7.1,<4.8.0a0 + - libzlib >=1.3.1,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: BSD-2-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - openjpeg >=2.5.4,<3.0a0 + size: 245594 + timestamp: 1772624841727 +- conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.3-hf411b9b_0.conda + sha256: cb6e7ba0d010ee0d3249ce9886de3d7613d26d9965d4c95666fa66b9c4c31001 + md5: e99f95734a326c0fd4d02bbd995150d4 + depends: + - ca-certificates + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: Apache-2.0 + license_family: Apache + purls: [] + run_exports: + weak: + - openssl >=3.6.3,<4.0a0 + size: 9414790 + timestamp: 1781071745579 +- conda: https://conda.anaconda.org/conda-forge/win-64/pcre2-10.47-hd2b5f0e_0.conda + sha256: 3e9e02174edf02cb4bcdd75668ad7b74b8061791a3bc8bdb8a52ae336761ba3e + md5: 77eaf2336f3ae749e712f63e36b0f0a1 + depends: + - bzip2 >=1.0.8,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - pcre2 >=10.47,<10.48.0a0 + size: 995992 + timestamp: 1763655708300 +- conda: https://conda.anaconda.org/conda-forge/win-64/pillow-12.2.0-py314h61b30b5_0.conda + sha256: d122b2a91402d72cf7f9d256e805e3533b2cf307c067e0072d9cc83ae789da48 + md5: 23ce08e46c625eb523ffef8939cb3ca9 + depends: + - python + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - openjpeg >=2.5.4,<3.0a0 + - python_abi 3.14.* *_cp314 + - lcms2 >=2.18,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - zlib-ng >=2.3.3,<2.4.0a0 + - libjpeg-turbo >=3.1.2,<4.0a0 + - libtiff >=4.7.1,<4.8.0a0 + - libxcb >=1.17.0,<2.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - tk >=8.6.13,<8.7.0a0 + license: HPND + purls: + - pkg:pypi/pillow?source=hash-mapping + run_exports: {} + size: 983791 + timestamp: 1775060119774 +- conda: https://conda.anaconda.org/conda-forge/win-64/pixman-0.46.4-h5112557_1.conda + sha256: 246fce4706b3f8b247a7d6142ba8d732c95263d3c96e212b9d63d6a4ab4aff35 + md5: 08c8fa3b419df480d985e304f7884d35 + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - pixman >=0.46.4,<1.0a0 + size: 542795 + timestamp: 1754665193489 +- conda: https://conda.anaconda.org/conda-forge/win-64/prek-0.4.5-h18a1a76_0.conda + sha256: f5b7217b597f915e8d50b012913694710ecdd54ab0eb0421ed94b4c25165acaf + md5: 58c2448fd3d4610e05491b8083fc0372 + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + license: MIT + license_family: MIT + purls: [] + run_exports: {} + size: 6451677 + timestamp: 1781546686901 +- conda: https://conda.anaconda.org/conda-forge/win-64/psutil-7.2.2-py314hc5dbbe4_0.conda + sha256: 17c8274ce5a32c9793f73a5a0094bd6188f3a13026a93147655143d4df034214 + md5: fd539ac231820f64066839251aa9fa48 + depends: + - python + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.14.* *_cp314 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/psutil?source=hash-mapping + run_exports: {} + size: 249950 + timestamp: 1769678167309 +- conda: https://conda.anaconda.org/conda-forge/win-64/pthread-stubs-0.4-h0e40799_1002.conda + sha256: 7e446bafb4d692792310ed022fe284e848c6a868c861655a92435af7368bae7b + md5: 3c8f2573569bb816483e5cf57efbbe29 + depends: + - libgcc >=13 + - libwinpthread >=12.0.0.r4.gg4f2fc60ca + - ucrt >=10.0.20348.0 + license: MIT + license_family: MIT + purls: [] + run_exports: {} + size: 9389 + timestamp: 1726802555076 +- conda: https://conda.anaconda.org/conda-forge/win-64/python-3.14.6-h4b44e0e_100_cp314.conda + build_number: 100 + sha256: f1acb89cb1a6bec9a94ae9f8e7411839de009cd64d3ac6a6aec4f3d8a481099a + md5: 8333e3ca6f8d1ebcd30b678dd53f0a25 + depends: + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.8.1,<3.0a0 + - libffi >=3.5.2,<3.6.0a0 + - liblzma >=5.8.3,<6.0a0 + - libmpdec >=4.0.0,<5.0a0 + - libsqlite >=3.53.2,<4.0a0 + - libzlib >=1.3.2,<2.0a0 + - openssl >=3.5.7,<4.0a0 + - python_abi 3.14.* *_cp314 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - zstd >=1.5.7,<1.6.0a0 + license: Python-2.0 + purls: [] + run_exports: + weak: + - python_abi 3.14.* *_cp314 + noarch: + - python + size: 18481352 + timestamp: 1781256034828 + python_site_packages_path: Lib/site-packages +- conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-312-py314hcaaf0b2_0.conda + sha256: 71f9617186f5e2273bcefc4f3a258df5784886077ad36fe14f1d16b1c2c506eb + md5: 4d49ac91c23c4b1878daf5ea9e7c767a + depends: + - python + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.14.* *_cp314 + license: PSF-2.0 + license_family: PSF + purls: + - pkg:pypi/pywin32?source=compressed-mapping + run_exports: {} + size: 4472831 + timestamp: 1781362876741 +- conda: https://conda.anaconda.org/conda-forge/win-64/pywinpty-2.0.15-py314h51f0985_1.conda + sha256: 048e20641da680aedaab285640a2aca56b7b5baf7a18f8f164f2796e13628c1f + md5: dd84e8748bd3c85a5c751b0576488080 + depends: + - python >=3.14.0rc3,<3.15.0a0 + - python_abi 3.14.* *_cp314 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - winpty + license: MIT + license_family: MIT + purls: + - pkg:pypi/pywinpty?source=hash-mapping + run_exports: {} + size: 216325 + timestamp: 1759557436167 +- conda: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.3-py314h2359020_1.conda + sha256: a2aff34027aa810ff36a190b75002d2ff6f9fbef71ec66e567616ac3a679d997 + md5: 0cd9b88826d0f8db142071eb830bce56 + depends: + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - yaml >=0.2.5,<0.3.0a0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pyyaml?source=hash-mapping + run_exports: {} + size: 181257 + timestamp: 1770223460931 +- conda: https://conda.anaconda.org/conda-forge/win-64/pyzmq-27.1.0-py312h343a6d4_3.conda + noarch: python + sha256: d7e65c44ea8a92f80cc0e424b4b7dbe63b8a9ec04ea774b7d4f7aed4c34cce4c + md5: ebbda9a4e5161d6e1f98146ad057dc10 + depends: + - python + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - _python_abi3_support 1.* + - cpython >=3.12 + - zeromq >=4.3.5,<4.3.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pyzmq?source=compressed-mapping + run_exports: {} + size: 182831 + timestamp: 1779483925948 +- conda: https://conda.anaconda.org/conda-forge/win-64/qhull-2020.2-hc790b64_5.conda + sha256: 887d53486a37bd870da62b8fa2ebe3993f912ad04bd755e7ed7c47ced97cbaa8 + md5: 854fbdff64b572b5c0b470f334d34c11 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: LicenseRef-Qhull + purls: [] + run_exports: + weak: + - qhull >=2020.2,<2020.3.0a0 + size: 1377020 + timestamp: 1720814433486 +- conda: https://conda.anaconda.org/conda-forge/win-64/rpds-py-2026.5.1-py314hc980628_0.conda + sha256: 5ecab2511a0ec8d2ea11ff337d83bf8bad8da1e167ae0b6336ac2e56abae10de + md5: f56d0b6c5af9a03320a5884efa3c5764 + depends: + - python + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.14.* *_cp314 + license: MIT + license_family: MIT + purls: + - pkg:pypi/rpds-py?source=hash-mapping + run_exports: {} + size: 229575 + timestamp: 1779977051010 +- conda: https://conda.anaconda.org/conda-forge/win-64/scikit-learn-1.9.0-np2py314h1b5b07a_0.conda + sha256: 3e30cc784bd5af6aa035807e5c2f12a1ecbc298d755561f6ce968b3b598b940a + md5: 74bafde39f688cb95c111e74bfad6669 + depends: + - python + - numpy >=1.24.1 + - scipy >=1.10.0 + - joblib >=1.4.0 + - threadpoolctl >=3.5.0 + - narwhals >=2.0.1 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.23,<3 + - python_abi 3.14.* *_cp314 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/scikit-learn?source=compressed-mapping + run_exports: {} + size: 9411356 + timestamp: 1780401101875 +- conda: https://conda.anaconda.org/conda-forge/win-64/scipy-1.18.0-py314h221f224_0.conda + sha256: 952db1642d707d2572b511b1207bfd8e8c114fdc99930c400b547eb8ab92ac19 + md5: a925cfb1429da2b1312c86516ae7c418 + depends: + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - liblapack >=3.9.0,<4.0a0 + - numpy <2.7 + - numpy >=1.23,<3 + - numpy >=2.0.0 + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/scipy?source=compressed-mapping + run_exports: {} + size: 15353018 + timestamp: 1781914001107 +- conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2023.0.0-hd3d4ead_2.conda + sha256: 8a4053839b8e997a5965e2dff7d6cf3c77be62d82c0e48c8a04a5ed2d2e73035 + md5: 8ee01a693aecff5432069eaaf1183c45 + depends: + - libhwloc >=2.13.0,<2.13.1.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: Apache-2.0 + license_family: APACHE + purls: [] + run_exports: {} + size: 156515 + timestamp: 1778673901757 +- conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h6ed50ae_3.conda + sha256: 0e79810fae28f3b69fe7391b0d43f5474d6bd91d451d5f2bde02f55ae481d5e3 + md5: 0481bfd9814bf525bd4b3ee4b51494c4 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: TCL + license_family: BSD + purls: [] + run_exports: + weak: + - tk >=8.6.13,<8.7.0a0 + size: 3526350 + timestamp: 1769460339384 +- conda: https://conda.anaconda.org/conda-forge/win-64/tornado-6.5.7-py314h5a2d7ad_0.conda + sha256: 6b9f5a195ca148f7c6b9a4a0a026631979b3112c43cd7c1064085ff833dfa4f0 + md5: b1b9bf11a82e608c5649d7462de94c5f + depends: + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/tornado?source=hash-mapping + run_exports: {} + size: 919275 + timestamp: 1781006902968 +- conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda + sha256: 3005729dce6f3d3f5ec91dfc49fc75a0095f9cd23bab49efb899657297ac91a5 + md5: 71b24316859acd00bdb8b38f5e2ce328 + constrains: + - vc14_runtime >=14.29.30037 + - vs2015_runtime >=14.29.30037 + license: LicenseRef-MicrosoftWindowsSDK10 + purls: [] + run_exports: {} + size: 694692 + timestamp: 1756385147981 +- conda: https://conda.anaconda.org/conda-forge/win-64/unicodedata2-17.0.1-py314h5a2d7ad_0.conda + sha256: 9041e463044944460f73f9528f2ec491180f0ffe857e3555aa8160b81050b8d9 + md5: d6b580a13384df5155c6ca19ee66854e + depends: + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/unicodedata2?source=hash-mapping + run_exports: {} + size: 406126 + timestamp: 1770909191618 +- conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.5-h1b7c187_39.conda + sha256: 17693b60cb54f80c60275f003f3bfc1b128af56dbfd65c4fae37c64eeb755ce1 + md5: 2eacea63f545b97342da520df6854276 + depends: + - vc14_runtime >=14.51.36231 + track_features: + - vc14 + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: {} + size: 20362 + timestamp: 1781320968457 +- conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.51.36231-h1b9f54f_39.conda + sha256: 8153ed849c92e891eacac0f2f8d7ecb79f9b5fd7f7917fbb896f252a60a40390 + md5: 06a5bf5a1ca16cce0df6eaa91fc42bc2 + depends: + - ucrt >=10.0.20348.0 + - vcomp14 14.51.36231 h1b9f54f_39 + constrains: + - vs2015_runtime 14.51.36231.* *_39 + license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime + license_family: Proprietary + purls: [] + run_exports: {} + size: 737434 + timestamp: 1781320964561 +- conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.51.36231-h1b9f54f_39.conda + sha256: 07fb14713c4bc62e2533a2e23a363abfb0e65650681fba0ae4c840e2219350f3 + md5: 8b53a83fda40ec679e4d63fa32fae989 + depends: + - ucrt >=10.0.20348.0 + constrains: + - vs2015_runtime 14.51.36231.* *_39 + license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime + license_family: Proprietary + purls: [] + run_exports: + strong: + - vcomp14 >=14.51.36231 + size: 120684 + timestamp: 1781320948530 +- conda: https://conda.anaconda.org/conda-forge/win-64/winpty-0.4.3-4.tar.bz2 + sha256: 9df10c5b607dd30e05ba08cbd940009305c75db242476f4e845ea06008b0a283 + md5: 1cee351bf20b830d991dbe0bc8cd7dfe + license: MIT + license_family: MIT + purls: [] + run_exports: {} + size: 1176306 +- conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxau-1.0.12-hba3369d_1.conda + sha256: 156a583fa43609507146de1c4926172286d92458c307bb90871579601f6bc568 + md5: 8436cab9a76015dfe7208d3c9f97c156 + depends: + - libgcc >=14 + - libwinpthread >=12.0.0.r4.gg4f2fc60ca + - ucrt >=10.0.20348.0 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - xorg-libxau >=1.0.12,<2.0a0 + size: 109246 + timestamp: 1762977105140 +- conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxdmcp-1.1.5-hba3369d_1.conda + sha256: 366b8ae202c3b48958f0b8784bbfdc37243d3ee1b1cd4b8e76c10abe41fa258b + md5: a7c03e38aa9c0e84d41881b9236eacfb + depends: + - libgcc >=14 + - libwinpthread >=12.0.0.r4.gg4f2fc60ca + - ucrt >=10.0.20348.0 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - xorg-libxdmcp >=1.1.5,<2.0a0 + size: 70691 + timestamp: 1762977015220 +- conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda + sha256: 80ee68c1e7683a35295232ea79bcc87279d31ffeda04a1665efdb43cbd50a309 + md5: 433699cba6602098ae8957a323da2664 + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - yaml >=0.2.5,<0.3.0a0 + size: 63944 + timestamp: 1753484092156 +- conda: https://conda.anaconda.org/conda-forge/win-64/zeromq-4.3.5-h3a581c9_11.conda + sha256: c3e279cb309b153152fcdd6ee6d039ad996d563c849f06be39d85b8e3351df25 + md5: f016c0c5f9c01549b259146614786192 + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - libsodium >=1.0.22,<1.0.23.0a0 + - krb5 >=1.22.2,<1.23.0a0 + license: MPL-2.0 + license_family: MOZILLA + purls: [] + run_exports: + weak: + - zeromq >=4.3.5,<4.3.6.0a0 + size: 265717 + timestamp: 1779124031378 +- conda: https://conda.anaconda.org/conda-forge/win-64/zlib-1.3.2-hfd05255_2.conda + sha256: ef408f85f664a4b9c9dac3cb2e36154d9baa15a88984ea800e11060e0f2394a1 + md5: 5187ecf958be3c39110fe691cbd6873e + depends: + - libzlib 1.3.2 hfd05255_2 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: Zlib + license_family: Other + purls: [] + run_exports: + weak: + - libzlib >=1.3.2,<2.0a0 + size: 850351 + timestamp: 1774072891049 +- conda: https://conda.anaconda.org/conda-forge/win-64/zlib-ng-2.3.3-h0261ad2_1.conda + sha256: 71332532332d13b5dbe57074ddcf82ae711bdc132affa5a2982a29ffa06dc234 + md5: 46a21c0a4e65f1a135251fc7c8663f83 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: Zlib + license_family: Other + purls: [] + run_exports: + weak: + - zlib-ng >=2.3.3,<2.4.0a0 + size: 124542 + timestamp: 1770167984883 +- conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda + sha256: 368d8628424966fd8f9c8018326a9c779e06913dd39e646cf331226acc90e5b2 + md5: 053b84beec00b71ea8ff7a4f84b55207 + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - zstd >=1.5.7,<1.6.0a0 + size: 388453 timestamp: 1764777142545 +- pypi: . + name: skillmodels + requires_dist: + - beartype>=0.22 + - dags>=0.5.1 + - jax>=0.9 + - jaxopt>=0.8.5 + - jupyter-book>=2 + - kaleido>=1.2 + - numpy>=2.4 + - optimagic>=0.5.3 + - pandas>=3 + - plotly>=6.6 + - pytask-parallel>=0.5.2 + - pytask>=0.5.8 + - scikit-learn>=1.5 + requires_python: '>=3.14,<3.15' +- pypi: git+https://github.com/optimagic-dev/optimagic.git?branch=probability-allow-fixed-entries#ecd9ebe0dfb3abc09ab015d78774a30794d779d0 + name: optimagic + version: 0.5.4.dev9+gecd9ebe0d + requires_dist: + - annotated-types>=0.4 + - cloudpickle>=2.2 + - joblib>=1.1 + - numpy>=1.26 + - pandas>=2.1 + - plotly>=5.14 + - pybaum>=0.1.2 + - scipy>=1.11 + - sqlalchemy>=2.0 + - typing-extensions>=4.5 + requires_python: '>=3.12' +- pypi: https://files.pythonhosted.org/packages/01/8a/f767031dcd0d24c2bbab4b696dbcf004da4f3284e5e4649fc47bc0e2bb78/nvidia_nvvm-13.3.33-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl + name: nvidia-nvvm + version: 13.3.33 + sha256: aafaf73246b6126bc88f521e5dab1d196395ee87739d9f5b7c39c9fee0ead9c7 + requires_python: '>=3' +- pypi: https://files.pythonhosted.org/packages/02/ac/85bc07d7a0766c7999f9bdfcf7f7cb2487fd0eb5d6bbe2bd41a3a54cd379/jax_cuda12_plugin-0.10.2-cp314-cp314-manylinux_2_27_x86_64.whl + name: jax-cuda12-plugin + version: 0.10.2 + sha256: 0c7a0204155585cc1c4fcb30c66b7f881b38e57e1f0d8e97d48e1654bf0d27f8 + requires_dist: + - jax-cuda12-pjrt==0.10.2 + - nvidia-cublas-cu12>=12.1.3.1 ; sys_platform == 'linux' and extra == 'with-cuda' + - nvidia-cuda-cupti-cu12>=12.1.105 ; sys_platform == 'linux' and extra == 'with-cuda' + - nvidia-cuda-nvcc-cu12>=12.6.85 ; sys_platform == 'linux' and extra == 'with-cuda' + - nvidia-cuda-runtime-cu12>=12.1.105 ; sys_platform == 'linux' and extra == 'with-cuda' + - nvidia-cudnn-cu12>=9.8,<10.0 ; sys_platform == 'linux' and extra == 'with-cuda' + - nvidia-cufft-cu12>=11.0.2.54 ; sys_platform == 'linux' and extra == 'with-cuda' + - nvidia-cusolver-cu12>=11.4.5.107 ; sys_platform == 'linux' and extra == 'with-cuda' + - nvidia-cusparse-cu12>=12.1.0.106 ; sys_platform == 'linux' and extra == 'with-cuda' + - nvidia-nccl-cu12>=2.18.1 ; sys_platform == 'linux' and extra == 'with-cuda' + - nvidia-nvjitlink-cu12>=12.1.105 ; sys_platform == 'linux' and extra == 'with-cuda' + - nvidia-cuda-nvrtc-cu12>=12.1.55 ; sys_platform == 'linux' and extra == 'with-cuda' + - nvidia-nvshmem-cu12>=3.2.5 ; sys_platform == 'linux' and extra == 'with-cuda' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/0a/a7/b63e19b0cfb1ef4d2a6053aad1b1cc7344d1f14548c4dffd28b8416fc178/nvidia_cusparse-12.8.1.7-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: nvidia-cusparse + version: 12.8.1.7 + sha256: bf56df502219a71068d938a1d8035343446fe1cd93e4595bc0da5ea88dc47345 + requires_dist: + - nvidia-nvjitlink + requires_python: '>=3' +- pypi: https://files.pythonhosted.org/packages/0b/e0/99ec5b02203c4e9ce878bc63d8caa06ac1f891e4d63bded9a5ced70fcb4f/pandas_stubs-3.0.3.260530-py3-none-any.whl + name: pandas-stubs + version: 3.0.3.260530 + sha256: a6277eb1c8cebf48d9b2413fcd2e9a6b4ff479c934a223c29eacbc3058c4cb55 + requires_dist: + - numpy>=1.23.5 + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/0d/7d/c592d1fa69c210be0d2743fffc598dfc2f54efa9671c5f6f5d1e151c6f4a/jaxlib-0.10.2-cp314-cp314-win_amd64.whl + name: jaxlib + version: 0.10.2 + sha256: 99818b0a18adc0b899abf4873795e8d65169441d87ab2e5cbb228e73d0f25808 + requires_dist: + - scipy>=1.14 + - numpy>=2.0 + - ml-dtypes>=0.5.0 + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/12/46/b0fd4b04f86577921feb97d8e2cf028afe04f614d17fb5013de9282c9216/nvidia_cusparse_cu12-12.5.10.65-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: nvidia-cusparse-cu12 + version: 12.5.10.65 + sha256: 73060ce019ac064a057267c585bf1fd5a353734151f87472ff02b2c5c9984e78 + requires_dist: + - nvidia-nvjitlink-cu12 + requires_python: '>=3' +- pypi: https://files.pythonhosted.org/packages/13/4a/02a64ee1f4708ad28f49ffa92735cb1a8325f617cb59f33951a07a8c4cca/nvidia_cusolver-12.2.2.18-py3-none-manylinux_2_27_x86_64.whl + name: nvidia-cusolver + version: 12.2.2.18 + sha256: cd449f75e0005d51d964291101f92c7963c73f86a30c90c522ae5c2ace0e0fa4 + requires_dist: + - nvidia-cublas + - nvidia-nvjitlink + - nvidia-cusparse + requires_python: '>=3' +- pypi: https://files.pythonhosted.org/packages/18/2a/d4cd8506d2044e082f8cd921be57392e6a9b5ccd3ffdf050362430a3d5d5/nvidia_cuda_cccl_cu12-12.9.27-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: nvidia-cuda-cccl-cu12 + version: 12.9.27 + sha256: 37869e17ce2e1ecec6eddf1927cca0f8c34e64fd848d40453df559091e2d7117 + requires_python: '>=3' +- pypi: https://files.pythonhosted.org/packages/18/72/ec1b5cbdcb140c132e6c7bdf99bd73e4f675439e77126c88f472fcffa09c/simplejson-4.1.1-cp314-cp314-win_amd64.whl + name: simplejson + version: 4.1.1 + sha256: cc0442dea71cd9cbf30a0b8b9929ab5aa6c02c0443a3d977351e6ec5bada4388 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,!=3.7.*' +- pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl + name: opt-einsum + version: 3.4.0 + sha256: 69bb92469f86a1565195ece4ac0323943e83477171b91d24c35afe028a90d7cd + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/25/1f/cca084ca2572810fff12ea9dbdcbe39eac048f40daf4a9077b49fcbe8cee/msgspec-0.21.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: msgspec + version: 0.21.1 + sha256: 3d6b9dc50948eaf65df54d2fd0ff66e6d8c32f116037209ee861810eb9b676cb + requires_dist: + - tomli ; python_full_version < '3.11' and extra == 'toml' + - tomli-w ; extra == 'toml' + - pyyaml ; extra == 'yaml' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/25/48/b54a06168a2190572a312bfe4ce443687773eb61367ced31e064953dd2f7/nvidia_cuda_nvcc_cu12-12.9.86-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl + name: nvidia-cuda-nvcc-cu12 + version: 12.9.86 + sha256: 5d6a0d32fdc7ea39917c20065614ae93add6f577d840233237ff08e9a38f58f0 + requires_python: '>=3' +- pypi: https://files.pythonhosted.org/packages/2c/1a/aff8bb287a4b1400f69e09a53bd65de96aa5cee5691925b38731c67fc695/click_default_group-1.2.4-py2.py3-none-any.whl + name: click-default-group + version: 1.2.4 + sha256: 9b60486923720e7fc61731bdb32b617039aba820e22e1c88766b1125592eaa5f + requires_dist: + - click + - pytest ; extra == 'test' + requires_python: '>=2.7' +- pypi: https://files.pythonhosted.org/packages/2d/44/b3a11f7aa34cb38f1b7f3df8bcd9fcd09bac9d342c2a2c9b8686c804bcd2/greenlet-3.5.2-cp314-cp314-win_amd64.whl + name: greenlet + version: 3.5.2 + sha256: c674a1dd4fe41f6a93febe7ab366ceabf15080ea31a9307811c56dac5f435f73 + requires_dist: + - sphinx ; extra == 'docs' + - furo ; extra == 'docs' + - objgraph ; extra == 'test' + - psutil ; extra == 'test' + - setuptools ; extra == 'test' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/33/40/79b0c64d44d6c166c0964ec1d803d067f4a145cca23e23925fd351d0e642/nvidia_cusolver_cu12-11.7.5.82-py3-none-manylinux_2_27_x86_64.whl + name: nvidia-cusolver-cu12 + version: 11.7.5.82 + sha256: 15da72d1340d29b5b3cf3fd100e3cd53421dde36002eda6ed93811af63c40d88 + requires_dist: + - nvidia-cublas-cu12 + - nvidia-nvjitlink-cu12 + - nvidia-cusparse-cu12 + requires_python: '>=3' +- pypi: https://files.pythonhosted.org/packages/38/55/792619469bab9882d8bbd5865d45a72f6478762d04a9af4bf0d08c503e95/pandas-3.0.3-cp314-cp314-win_amd64.whl + name: pandas + version: 3.0.3 + sha256: 3c20a521bbb85902f79f7270c80a59e1b5452d96d170c034f207181870f97ac5 + requires_dist: + - numpy>=1.26.0 ; python_full_version < '3.14' + - numpy>=2.3.3 ; python_full_version >= '3.14' + - python-dateutil>=2.8.2 + - tzdata ; sys_platform == 'win32' + - tzdata ; sys_platform == 'emscripten' + - hypothesis>=6.116.0 ; extra == 'test' + - pytest>=8.3.4 ; extra == 'test' + - pytest-xdist>=3.6.1 ; extra == 'test' + - pyarrow>=13.0.0 ; extra == 'pyarrow' + - bottleneck>=1.4.2 ; extra == 'performance' + - numba>=0.60.0 ; extra == 'performance' + - numexpr>=2.10.2 ; extra == 'performance' + - scipy>=1.14.1 ; extra == 'computation' + - xarray>=2024.10.0 ; extra == 'computation' + - fsspec>=2024.10.0 ; extra == 'fss' + - s3fs>=2024.10.0 ; extra == 'aws' + - gcsfs>=2024.10.0 ; extra == 'gcp' + - odfpy>=1.4.1 ; extra == 'excel' + - openpyxl>=3.1.5 ; extra == 'excel' + - python-calamine>=0.3.0 ; extra == 'excel' + - pyxlsb>=1.0.10 ; extra == 'excel' + - xlrd>=2.0.1 ; extra == 'excel' + - xlsxwriter>=3.2.0 ; extra == 'excel' + - pyarrow>=13.0.0 ; extra == 'parquet' + - pyarrow>=13.0.0 ; extra == 'feather' + - pyiceberg>=0.8.1 ; extra == 'iceberg' + - tables>=3.10.1 ; extra == 'hdf5' + - pyreadstat>=1.2.8 ; extra == 'spss' + - sqlalchemy>=2.0.36 ; extra == 'postgresql' + - psycopg2>=2.9.10 ; extra == 'postgresql' + - adbc-driver-postgresql>=1.2.0 ; extra == 'postgresql' + - sqlalchemy>=2.0.36 ; extra == 'mysql' + - pymysql>=1.1.1 ; extra == 'mysql' + - sqlalchemy>=2.0.36 ; extra == 'sql-other' + - adbc-driver-postgresql>=1.2.0 ; extra == 'sql-other' + - adbc-driver-sqlite>=1.2.0 ; extra == 'sql-other' + - beautifulsoup4>=4.12.3 ; extra == 'html' + - html5lib>=1.1 ; extra == 'html' + - lxml>=5.3.0 ; extra == 'html' + - lxml>=5.3.0 ; extra == 'xml' + - matplotlib>=3.9.3 ; extra == 'plot' + - jinja2>=3.1.5 ; extra == 'output-formatting' + - tabulate>=0.9.0 ; extra == 'output-formatting' + - pyqt5>=5.15.9 ; extra == 'clipboard' + - qtpy>=2.4.2 ; extra == 'clipboard' + - zstandard>=0.23.0 ; extra == 'compression' + - pytz>=2020.1 ; extra == 'timezone' + - adbc-driver-postgresql>=1.2.0 ; extra == 'all' + - adbc-driver-sqlite>=1.2.0 ; extra == 'all' + - beautifulsoup4>=4.12.3 ; extra == 'all' + - bottleneck>=1.4.2 ; extra == 'all' + - fastparquet>=2024.11.0 ; extra == 'all' + - fsspec>=2024.10.0 ; extra == 'all' + - gcsfs>=2024.10.0 ; extra == 'all' + - html5lib>=1.1 ; extra == 'all' + - hypothesis>=6.116.0 ; extra == 'all' + - jinja2>=3.1.5 ; extra == 'all' + - lxml>=5.3.0 ; extra == 'all' + - matplotlib>=3.9.3 ; extra == 'all' + - numba>=0.60.0 ; extra == 'all' + - numexpr>=2.10.2 ; extra == 'all' + - odfpy>=1.4.1 ; extra == 'all' + - openpyxl>=3.1.5 ; extra == 'all' + - psycopg2>=2.9.10 ; extra == 'all' + - pyarrow>=13.0.0 ; extra == 'all' + - pyiceberg>=0.8.1 ; extra == 'all' + - pymysql>=1.1.1 ; extra == 'all' + - pyqt5>=5.15.9 ; extra == 'all' + - pyreadstat>=1.2.8 ; extra == 'all' + - pytest>=8.3.4 ; extra == 'all' + - pytest-xdist>=3.6.1 ; extra == 'all' + - python-calamine>=0.3.0 ; extra == 'all' + - pytz>=2020.1 ; extra == 'all' + - pyxlsb>=1.0.10 ; extra == 'all' + - qtpy>=2.4.2 ; extra == 'all' + - scipy>=1.14.1 ; extra == 'all' + - s3fs>=2024.10.0 ; extra == 'all' + - sqlalchemy>=2.0.36 ; extra == 'all' + - tables>=3.10.1 ; extra == 'all' + - tabulate>=0.9.0 ; extra == 'all' + - xarray>=2024.10.0 ; extra == 'all' + - xlrd>=2.0.1 ; extra == 'all' + - xlsxwriter>=3.2.0 ; extra == 'all' + - zstandard>=0.23.0 ; extra == 'all' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/3e/85/1c12e849e4d50624e75496378a3fb168389f768d3ec7cb694fba873ff9a8/nvidia_nvshmem_cu12-3.7.0-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: nvidia-nvshmem-cu12 + version: 3.7.0 + sha256: ca643cb87a214c0f7ad8396def747adcaa0c8dfb0cb7e5012338ac3b0d76404b + requires_dist: + - nvidia-cuda-cccl-cu12 + requires_python: '>=3' +- pypi: https://files.pythonhosted.org/packages/3f/34/c500f90c7ae641b8e0f98965b36b8a7ac79cc8b296e8d251fe3eb592ee54/nvidia_nccl_cu13-2.30.7-py3-none-manylinux_2_18_x86_64.whl + name: nvidia-nccl-cu13 + version: 2.30.7 + sha256: cefa7fdb9710efd0f39c5f1be1d61ff6fc9a996c451265bd7fbdcf9455ed4b50 + requires_python: '>=3' +- pypi: https://files.pythonhosted.org/packages/3f/af/e1b107f034f7c133255c162b922bbad3da5be20ebf76df17662ae4bd31f6/nvidia_cuda_nvcc-13.3.33-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: nvidia-cuda-nvcc + version: 13.3.33 + sha256: 53b5f1be1731574368b8be931b77b6313492266c464aef3dd3f431569ce90deb + requires_dist: + - nvidia-nvvm + - nvidia-cuda-runtime + - nvidia-cuda-crt + requires_python: '>=3' +- pypi: https://files.pythonhosted.org/packages/45/d8/55e0901103c93d57bab3b932294c216f0cbd49054187ce29f8f13808d530/jaxopt-0.8.5-py3-none-any.whl + name: jaxopt + version: 0.8.5 + sha256: ff221d1a86908ec759eb1e219ee1d12bf208a70707e961bf7401076fe7cf4d5e + requires_dist: + - jax>=0.2.18 + - jaxlib>=0.1.69 + - numpy>=1.18.4 + - scipy>=1.0.0 +- pypi: https://files.pythonhosted.org/packages/46/0c/c75bbfb967457a0b7670b8ad267bfc4fffdf341c074e0a80db06c24ccfd4/nvidia_nvjitlink_cu12-12.9.86-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl + name: nvidia-nvjitlink-cu12 + version: 12.9.86 + sha256: e3f1171dbdc83c5932a45f0f4c99180a70de9bd2718c1ab77d14104f6d7147f9 + requires_python: '>=3' +- pypi: https://files.pythonhosted.org/packages/49/cc/14dd93887295859457e507fc46a847b68ae8f20c42b2fde4d8a749c94bbc/optree-0.19.1-cp314-cp314-macosx_11_0_arm64.whl + name: optree + version: 0.19.1 + sha256: b17a7b70ff8bd406c2142914c5ab0a57f8bcfb9f52181f7012e32406bbdbfdda + requires_dist: + - typing-extensions>=4.6.0 + - typing-extensions>=4.12.0 ; python_full_version >= '3.13' + - attrs ; extra == 'attrs' + - jax ; extra == 'jax' + - numpy ; extra == 'numpy' + - torch ; extra == 'torch' + - cpplint ; extra == 'lint' + - doc8 ; extra == 'lint' + - mypy ; extra == 'lint' + - pre-commit ; extra == 'lint' + - pyenchant ; extra == 'lint' + - pylint[spelling] ; extra == 'lint' + - ruff ; extra == 'lint' + - xdoctest ; extra == 'lint' + - pytest ; extra == 'test' + - pytest-cov ; extra == 'test' + - covdefaults ; extra == 'test' + - rich ; extra == 'test' + - typing-extensions==4.6.0 ; python_full_version < '3.13' and sys_platform == 'linux' and extra == 'test' + - typing-extensions==4.6.0 ; python_full_version < '3.13' and sys_platform == 'darwin' and extra == 'test' + - typing-extensions==4.6.0 ; python_full_version < '3.13' and sys_platform == 'win32' and extra == 'test' + - typing-extensions==4.12.0 ; python_full_version >= '3.13' and sys_platform == 'linux' and extra == 'test' + - typing-extensions==4.12.0 ; python_full_version >= '3.13' and sys_platform == 'darwin' and extra == 'test' + - typing-extensions==4.12.0 ; python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'test' + - sphinx~=8.0 ; extra == 'docs' + - sphinx-autoapi ; extra == 'docs' + - sphinx-autobuild ; extra == 'docs' + - sphinx-autodoc-typehints ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - sphinx-rtd-theme ; extra == 'docs' + - sphinxcontrib-bibtex ; extra == 'docs' + - docutils ; extra == 'docs' + - attrs ; extra == 'docs' + - jax[cpu] ; extra == 'docs' + - numpy ; extra == 'docs' + - torch ; extra == 'docs' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/50/32/e7ffa9c324ae260e5dbb4af2cd557bf7a8d155c8ac7b79a785fe1796fb92/nvidia_nccl_cu12-2.30.7-py3-none-manylinux_2_18_x86_64.whl + name: nvidia-nccl-cu12 + version: 2.30.7 + sha256: 8ce1b8213f61f2bfac132e6df890af6450b77cbd140c6ce4e98cb0c2d8e678c9 + requires_python: '>=3' +- pypi: https://files.pythonhosted.org/packages/51/fe/53ac0cd932db5dcaf55961bc7cb7afdca8d80d8cc7406ed661f0c7dc111a/pdbp-1.8.2-py3-none-any.whl + name: pdbp + version: 1.8.2 + sha256: d4fd05e177636b5ccd0b2e03e378cec57afc06149e5fd975de6f8ddb3d0109a8 + requires_dist: + - pygments>=2.19.2 + - tabcompleter>=1.4.0 + - colorama>=0.4.6 ; sys_platform == 'win32' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl + name: pluggy + version: 1.6.0 + sha256: e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746 + requires_dist: + - pre-commit ; extra == 'dev' + - tox ; extra == 'dev' + - pytest ; extra == 'testing' + - pytest-benchmark ; extra == 'testing' + - coverage ; extra == 'testing' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/54/20/6aa79ba3570bddd1bf7e951c6123f806751e58e8cce736bad77b2cf348d7/logistro-2.0.1-py3-none-any.whl + name: logistro + version: 2.0.1 + sha256: 06ffa127b9fb4ac8b1972ae6b2a9d7fde57598bf5939cd708f43ec5bba2d31eb + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/55/09/17733fa3ef4f183b70d5e55f7fe7c712017fac7ec7a22e39dab1539acdb8/jax_cuda13_pjrt-0.10.2-py3-none-manylinux_2_27_x86_64.whl + name: jax-cuda13-pjrt + version: 0.10.2 + sha256: a97e9cabe0e21d8dbcc70bd909ca1c34cd546d3ce2d94b4cd907a8d4f6179f6a +- pypi: https://files.pythonhosted.org/packages/58/3b/1cdec6772bdbaf7b25dab360c59f03cadf05492dd724c6540af905389b07/pandas-3.0.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + name: pandas + version: 3.0.3 + sha256: 9d71c63ae4ebdbf70209742096f1fc46a83a0613c99d4b23766cced9ff8cd62a + requires_dist: + - numpy>=1.26.0 ; python_full_version < '3.14' + - numpy>=2.3.3 ; python_full_version >= '3.14' + - python-dateutil>=2.8.2 + - tzdata ; sys_platform == 'win32' + - tzdata ; sys_platform == 'emscripten' + - hypothesis>=6.116.0 ; extra == 'test' + - pytest>=8.3.4 ; extra == 'test' + - pytest-xdist>=3.6.1 ; extra == 'test' + - pyarrow>=13.0.0 ; extra == 'pyarrow' + - bottleneck>=1.4.2 ; extra == 'performance' + - numba>=0.60.0 ; extra == 'performance' + - numexpr>=2.10.2 ; extra == 'performance' + - scipy>=1.14.1 ; extra == 'computation' + - xarray>=2024.10.0 ; extra == 'computation' + - fsspec>=2024.10.0 ; extra == 'fss' + - s3fs>=2024.10.0 ; extra == 'aws' + - gcsfs>=2024.10.0 ; extra == 'gcp' + - odfpy>=1.4.1 ; extra == 'excel' + - openpyxl>=3.1.5 ; extra == 'excel' + - python-calamine>=0.3.0 ; extra == 'excel' + - pyxlsb>=1.0.10 ; extra == 'excel' + - xlrd>=2.0.1 ; extra == 'excel' + - xlsxwriter>=3.2.0 ; extra == 'excel' + - pyarrow>=13.0.0 ; extra == 'parquet' + - pyarrow>=13.0.0 ; extra == 'feather' + - pyiceberg>=0.8.1 ; extra == 'iceberg' + - tables>=3.10.1 ; extra == 'hdf5' + - pyreadstat>=1.2.8 ; extra == 'spss' + - sqlalchemy>=2.0.36 ; extra == 'postgresql' + - psycopg2>=2.9.10 ; extra == 'postgresql' + - adbc-driver-postgresql>=1.2.0 ; extra == 'postgresql' + - sqlalchemy>=2.0.36 ; extra == 'mysql' + - pymysql>=1.1.1 ; extra == 'mysql' + - sqlalchemy>=2.0.36 ; extra == 'sql-other' + - adbc-driver-postgresql>=1.2.0 ; extra == 'sql-other' + - adbc-driver-sqlite>=1.2.0 ; extra == 'sql-other' + - beautifulsoup4>=4.12.3 ; extra == 'html' + - html5lib>=1.1 ; extra == 'html' + - lxml>=5.3.0 ; extra == 'html' + - lxml>=5.3.0 ; extra == 'xml' + - matplotlib>=3.9.3 ; extra == 'plot' + - jinja2>=3.1.5 ; extra == 'output-formatting' + - tabulate>=0.9.0 ; extra == 'output-formatting' + - pyqt5>=5.15.9 ; extra == 'clipboard' + - qtpy>=2.4.2 ; extra == 'clipboard' + - zstandard>=0.23.0 ; extra == 'compression' + - pytz>=2020.1 ; extra == 'timezone' + - adbc-driver-postgresql>=1.2.0 ; extra == 'all' + - adbc-driver-sqlite>=1.2.0 ; extra == 'all' + - beautifulsoup4>=4.12.3 ; extra == 'all' + - bottleneck>=1.4.2 ; extra == 'all' + - fastparquet>=2024.11.0 ; extra == 'all' + - fsspec>=2024.10.0 ; extra == 'all' + - gcsfs>=2024.10.0 ; extra == 'all' + - html5lib>=1.1 ; extra == 'all' + - hypothesis>=6.116.0 ; extra == 'all' + - jinja2>=3.1.5 ; extra == 'all' + - lxml>=5.3.0 ; extra == 'all' + - matplotlib>=3.9.3 ; extra == 'all' + - numba>=0.60.0 ; extra == 'all' + - numexpr>=2.10.2 ; extra == 'all' + - odfpy>=1.4.1 ; extra == 'all' + - openpyxl>=3.1.5 ; extra == 'all' + - psycopg2>=2.9.10 ; extra == 'all' + - pyarrow>=13.0.0 ; extra == 'all' + - pyiceberg>=0.8.1 ; extra == 'all' + - pymysql>=1.1.1 ; extra == 'all' + - pyqt5>=5.15.9 ; extra == 'all' + - pyreadstat>=1.2.8 ; extra == 'all' + - pytest>=8.3.4 ; extra == 'all' + - pytest-xdist>=3.6.1 ; extra == 'all' + - python-calamine>=0.3.0 ; extra == 'all' + - pytz>=2020.1 ; extra == 'all' + - pyxlsb>=1.0.10 ; extra == 'all' + - qtpy>=2.4.2 ; extra == 'all' + - scipy>=1.14.1 ; extra == 'all' + - s3fs>=2024.10.0 ; extra == 'all' + - sqlalchemy>=2.0.36 ; extra == 'all' + - tables>=3.10.1 ; extra == 'all' + - tabulate>=0.9.0 ; extra == 'all' + - xarray>=2024.10.0 ; extra == 'all' + - xlrd>=2.0.1 ; extra == 'all' + - xlsxwriter>=3.2.0 ; extra == 'all' + - zstandard>=0.23.0 ; extra == 'all' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/5b/f2/44a7dd795a52d34d033b1cb1a6b1162eada650079e557e236fb6b88943be/pytask_parallel-0.5.4-py3-none-any.whl + name: pytask-parallel + version: 0.5.4 + sha256: f05ca8e3251e25621b260659e01bceec43875155afa3dab84a912e1bbd9971d0 + requires_dist: + - attrs>=21.3.0 + - click>=8.1.8,!=8.2.0 + - cloudpickle + - loky + - pluggy>=1.0.0 + - pytask>=0.5.2 + - rich + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/5f/0f/f9434b616c38ffaf50b389f68e9b7b9977e35b964d8b7bded939369905bc/nvidia_cudnn_cu13-9.23.2.1-py3-none-manylinux_2_27_x86_64.whl + name: nvidia-cudnn-cu13 + version: 9.23.2.1 + sha256: 0c38408c043d67ea8a3cbe61fe272c3cf5c7f5ec466adfe8ac63e91d4f11cdc7 + requires_dist: + - nvidia-cublas + requires_python: '>=3' +- pypi: https://files.pythonhosted.org/packages/62/89/41e80670779a223d8bc8bc83019a619988cfa5c432cedac5cec23884fbc4/types_pytz-2026.2.0.20260518-py3-none-any.whl + name: types-pytz + version: 2026.2.0.20260518 + sha256: 3a12eaa38f476bd650902a9c9bb442f03f3c7dee2be5c5848bce61bd708d205a + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/68/10/bf2d6738d72748b961a3751ab89522d58c54efc36a8e1a12161216cd45cf/pandas-3.0.3-cp314-cp314-macosx_11_0_arm64.whl + name: pandas + version: 3.0.3 + sha256: bab900348131a7db1f69a7309ef141fd5680f1487094193bcbbb61791573bf8f + requires_dist: + - numpy>=1.26.0 ; python_full_version < '3.14' + - numpy>=2.3.3 ; python_full_version >= '3.14' + - python-dateutil>=2.8.2 + - tzdata ; sys_platform == 'win32' + - tzdata ; sys_platform == 'emscripten' + - hypothesis>=6.116.0 ; extra == 'test' + - pytest>=8.3.4 ; extra == 'test' + - pytest-xdist>=3.6.1 ; extra == 'test' + - pyarrow>=13.0.0 ; extra == 'pyarrow' + - bottleneck>=1.4.2 ; extra == 'performance' + - numba>=0.60.0 ; extra == 'performance' + - numexpr>=2.10.2 ; extra == 'performance' + - scipy>=1.14.1 ; extra == 'computation' + - xarray>=2024.10.0 ; extra == 'computation' + - fsspec>=2024.10.0 ; extra == 'fss' + - s3fs>=2024.10.0 ; extra == 'aws' + - gcsfs>=2024.10.0 ; extra == 'gcp' + - odfpy>=1.4.1 ; extra == 'excel' + - openpyxl>=3.1.5 ; extra == 'excel' + - python-calamine>=0.3.0 ; extra == 'excel' + - pyxlsb>=1.0.10 ; extra == 'excel' + - xlrd>=2.0.1 ; extra == 'excel' + - xlsxwriter>=3.2.0 ; extra == 'excel' + - pyarrow>=13.0.0 ; extra == 'parquet' + - pyarrow>=13.0.0 ; extra == 'feather' + - pyiceberg>=0.8.1 ; extra == 'iceberg' + - tables>=3.10.1 ; extra == 'hdf5' + - pyreadstat>=1.2.8 ; extra == 'spss' + - sqlalchemy>=2.0.36 ; extra == 'postgresql' + - psycopg2>=2.9.10 ; extra == 'postgresql' + - adbc-driver-postgresql>=1.2.0 ; extra == 'postgresql' + - sqlalchemy>=2.0.36 ; extra == 'mysql' + - pymysql>=1.1.1 ; extra == 'mysql' + - sqlalchemy>=2.0.36 ; extra == 'sql-other' + - adbc-driver-postgresql>=1.2.0 ; extra == 'sql-other' + - adbc-driver-sqlite>=1.2.0 ; extra == 'sql-other' + - beautifulsoup4>=4.12.3 ; extra == 'html' + - html5lib>=1.1 ; extra == 'html' + - lxml>=5.3.0 ; extra == 'html' + - lxml>=5.3.0 ; extra == 'xml' + - matplotlib>=3.9.3 ; extra == 'plot' + - jinja2>=3.1.5 ; extra == 'output-formatting' + - tabulate>=0.9.0 ; extra == 'output-formatting' + - pyqt5>=5.15.9 ; extra == 'clipboard' + - qtpy>=2.4.2 ; extra == 'clipboard' + - zstandard>=0.23.0 ; extra == 'compression' + - pytz>=2020.1 ; extra == 'timezone' + - adbc-driver-postgresql>=1.2.0 ; extra == 'all' + - adbc-driver-sqlite>=1.2.0 ; extra == 'all' + - beautifulsoup4>=4.12.3 ; extra == 'all' + - bottleneck>=1.4.2 ; extra == 'all' + - fastparquet>=2024.11.0 ; extra == 'all' + - fsspec>=2024.10.0 ; extra == 'all' + - gcsfs>=2024.10.0 ; extra == 'all' + - html5lib>=1.1 ; extra == 'all' + - hypothesis>=6.116.0 ; extra == 'all' + - jinja2>=3.1.5 ; extra == 'all' + - lxml>=5.3.0 ; extra == 'all' + - matplotlib>=3.9.3 ; extra == 'all' + - numba>=0.60.0 ; extra == 'all' + - numexpr>=2.10.2 ; extra == 'all' + - odfpy>=1.4.1 ; extra == 'all' + - openpyxl>=3.1.5 ; extra == 'all' + - psycopg2>=2.9.10 ; extra == 'all' + - pyarrow>=13.0.0 ; extra == 'all' + - pyiceberg>=0.8.1 ; extra == 'all' + - pymysql>=1.1.1 ; extra == 'all' + - pyqt5>=5.15.9 ; extra == 'all' + - pyreadstat>=1.2.8 ; extra == 'all' + - pytest>=8.3.4 ; extra == 'all' + - pytest-xdist>=3.6.1 ; extra == 'all' + - python-calamine>=0.3.0 ; extra == 'all' + - pytz>=2020.1 ; extra == 'all' + - pyxlsb>=1.0.10 ; extra == 'all' + - qtpy>=2.4.2 ; extra == 'all' + - scipy>=1.14.1 ; extra == 'all' + - s3fs>=2024.10.0 ; extra == 'all' + - sqlalchemy>=2.0.36 ; extra == 'all' + - tables>=3.10.1 ; extra == 'all' + - tabulate>=0.9.0 ; extra == 'all' + - xarray>=2024.10.0 ; extra == 'all' + - xlrd>=2.0.1 ; extra == 'all' + - xlsxwriter>=3.2.0 ; extra == 'all' + - zstandard>=0.23.0 ; extra == 'all' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/68/31/9a5432c433a7671107182cdc9a20ea78a70f99c4e5334aa54b6d4d0d79ed/simplejson-4.1.1-cp314-cp314-macosx_11_0_arm64.whl + name: simplejson + version: 4.1.1 + sha256: 95407269340c7f22f09776ea7b717a52cf56cfcf119b5e45f66faa4a26445bea + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,!=3.7.*' +- pypi: https://files.pythonhosted.org/packages/69/77/ac054882c220872512df28d16aeb648fe0e651efbb5be4fd7c4817fd88b0/jaxlib-0.10.2-cp314-cp314-manylinux_2_27_x86_64.whl + name: jaxlib + version: 0.10.2 + sha256: ca34f363197fb0ac4082582ca755007910369e33f8a8ba3d35ed94b71070107d + requires_dist: + - scipy>=1.14 + - numpy>=2.0 + - ml-dtypes>=0.5.0 + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/6c/97/3b1a80c97d1a1aad8133ce601a6cf4f238f41e11c2bd4860a69543a5d365/jax_cuda13_plugin-0.10.2-cp314-cp314-manylinux_2_27_x86_64.whl + name: jax-cuda13-plugin + version: 0.10.2 + sha256: 661d3dd23b9aa8fa86647472e7b1303460f4643ee516fe707912e5ab90dfd3ff + requires_dist: + - jax-cuda13-pjrt==0.10.2 + - nvidia-cublas>=13.0.0.19 ; sys_platform == 'linux' and extra == 'with-cuda' + - nvidia-cuda-cupti>=13.0.48 ; sys_platform == 'linux' and extra == 'with-cuda' + - nvidia-cuda-nvcc>=13.0.48 ; sys_platform == 'linux' and extra == 'with-cuda' + - nvidia-cuda-runtime>=13.0.48 ; sys_platform == 'linux' and extra == 'with-cuda' + - nvidia-cudnn-cu13>=9.12.0.46,<10.0 ; sys_platform == 'linux' and extra == 'with-cuda' + - nvidia-cufft>=12.0.0.15 ; sys_platform == 'linux' and extra == 'with-cuda' + - nvidia-cusolver>=12.0.3.29 ; sys_platform == 'linux' and extra == 'with-cuda' + - nvidia-cusparse>=12.6.2.49 ; sys_platform == 'linux' and extra == 'with-cuda' + - nvidia-nccl-cu13>=2.27.7 ; sys_platform == 'linux' and extra == 'with-cuda' + - nvidia-nvjitlink>=13.0.39 ; sys_platform == 'linux' and extra == 'with-cuda' + - nvidia-cuda-nvrtc>=13.0.48 ; sys_platform == 'linux' and extra == 'with-cuda' + - nvidia-nvshmem-cu13>=3.3.20 ; sys_platform == 'linux' and extra == 'with-cuda' + - nvidia-nvvm ; extra == 'with-cuda' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/71/cc/18245721fa7747065ab478316c7fea7c74777d07f37ae60db2e84f8172e8/beartype-0.22.9-py3-none-any.whl + name: beartype + version: 0.22.9 + sha256: d16c9bbc61ea14637596c5f6fbff2ee99cbe3573e46a716401734ef50c3060c2 + requires_dist: + - autoapi>=0.9.0 ; extra == 'dev' + - celery ; extra == 'dev' + - click ; extra == 'dev' + - coverage>=5.5 ; extra == 'dev' + - docutils>=0.22.0 ; extra == 'dev' + - equinox ; python_full_version < '3.15' and sys_platform == 'linux' and extra == 'dev' + - fastmcp ; python_full_version < '3.14' and extra == 'dev' + - jax[cpu] ; python_full_version < '3.15' and sys_platform == 'linux' and extra == 'dev' + - jaxtyping ; sys_platform == 'linux' and extra == 'dev' + - langchain ; python_full_version < '3.14' and platform_python_implementation != 'PyPy' and sys_platform != 'darwin' and extra == 'dev' + - mypy>=0.800 ; platform_python_implementation != 'PyPy' and extra == 'dev' + - nuitka>=1.2.6 ; python_full_version < '3.14' and sys_platform == 'linux' and extra == 'dev' + - numba ; python_full_version < '3.14' and extra == 'dev' + - numpy ; python_full_version < '3.15' and platform_python_implementation != 'PyPy' and sys_platform != 'darwin' and extra == 'dev' + - pandera>=0.26.0 ; python_full_version < '3.14' and extra == 'dev' + - poetry ; extra == 'dev' + - polars ; python_full_version < '3.14' and extra == 'dev' + - pydata-sphinx-theme<=0.7.2 ; extra == 'dev' + - pygments ; extra == 'dev' + - pyinstaller ; extra == 'dev' + - pyright>=1.1.370 ; extra == 'dev' + - pytest>=6.2.0 ; extra == 'dev' + - redis ; extra == 'dev' + - rich-click ; extra == 'dev' + - setuptools ; extra == 'dev' + - sphinx ; extra == 'dev' + - sphinx>=4.2.0,<6.0.0 ; extra == 'dev' + - sphinxext-opengraph>=0.7.5 ; extra == 'dev' + - sqlalchemy ; extra == 'dev' + - torch ; python_full_version < '3.14' and sys_platform == 'linux' and extra == 'dev' + - tox>=3.20.1 ; extra == 'dev' + - typer ; extra == 'dev' + - typing-extensions>=3.10.0.0 ; extra == 'dev' + - xarray ; python_full_version < '3.15' and extra == 'dev' + - mkdocs-material[imaging]>=9.6.0 ; extra == 'doc-ghp' + - mkdocstrings-python-xref>=1.16.0 ; extra == 'doc-ghp' + - mkdocstrings-python>=1.16.0 ; extra == 'doc-ghp' + - autoapi>=0.9.0 ; extra == 'doc-rtd' + - pydata-sphinx-theme<=0.7.2 ; extra == 'doc-rtd' + - setuptools ; extra == 'doc-rtd' + - sphinx>=4.2.0,<6.0.0 ; extra == 'doc-rtd' + - sphinxext-opengraph>=0.7.5 ; extra == 'doc-rtd' + - celery ; extra == 'test' + - click ; extra == 'test' + - coverage>=5.5 ; extra == 'test' + - docutils>=0.22.0 ; extra == 'test' + - equinox ; python_full_version < '3.15' and sys_platform == 'linux' and extra == 'test' + - fastmcp ; python_full_version < '3.14' and extra == 'test' + - jax[cpu] ; python_full_version < '3.15' and sys_platform == 'linux' and extra == 'test' + - jaxtyping ; sys_platform == 'linux' and extra == 'test' + - langchain ; python_full_version < '3.14' and platform_python_implementation != 'PyPy' and sys_platform != 'darwin' and extra == 'test' + - mypy>=0.800 ; platform_python_implementation != 'PyPy' and extra == 'test' + - nuitka>=1.2.6 ; python_full_version < '3.14' and sys_platform == 'linux' and extra == 'test' + - numba ; python_full_version < '3.14' and extra == 'test' + - numpy ; python_full_version < '3.15' and platform_python_implementation != 'PyPy' and sys_platform != 'darwin' and extra == 'test' + - pandera>=0.26.0 ; python_full_version < '3.14' and extra == 'test' + - poetry ; extra == 'test' + - polars ; python_full_version < '3.14' and extra == 'test' + - pygments ; extra == 'test' + - pyinstaller ; extra == 'test' + - pyright>=1.1.370 ; extra == 'test' + - pytest>=6.2.0 ; extra == 'test' + - redis ; extra == 'test' + - rich-click ; extra == 'test' + - sphinx ; extra == 'test' + - sqlalchemy ; extra == 'test' + - torch ; python_full_version < '3.14' and sys_platform == 'linux' and extra == 'test' + - tox>=3.20.1 ; extra == 'test' + - typer ; extra == 'test' + - typing-extensions>=3.10.0.0 ; extra == 'test' + - xarray ; python_full_version < '3.15' and extra == 'test' + - celery ; extra == 'test-tox' + - click ; extra == 'test-tox' + - docutils>=0.22.0 ; extra == 'test-tox' + - equinox ; python_full_version < '3.15' and sys_platform == 'linux' and extra == 'test-tox' + - fastmcp ; python_full_version < '3.14' and extra == 'test-tox' + - jax[cpu] ; python_full_version < '3.15' and sys_platform == 'linux' and extra == 'test-tox' + - jaxtyping ; sys_platform == 'linux' and extra == 'test-tox' + - langchain ; python_full_version < '3.14' and platform_python_implementation != 'PyPy' and sys_platform != 'darwin' and extra == 'test-tox' + - mypy>=0.800 ; platform_python_implementation != 'PyPy' and extra == 'test-tox' + - nuitka>=1.2.6 ; python_full_version < '3.14' and sys_platform == 'linux' and extra == 'test-tox' + - numba ; python_full_version < '3.14' and extra == 'test-tox' + - numpy ; python_full_version < '3.15' and platform_python_implementation != 'PyPy' and sys_platform != 'darwin' and extra == 'test-tox' + - pandera>=0.26.0 ; python_full_version < '3.14' and extra == 'test-tox' + - poetry ; extra == 'test-tox' + - polars ; python_full_version < '3.14' and extra == 'test-tox' + - pygments ; extra == 'test-tox' + - pyinstaller ; extra == 'test-tox' + - pyright>=1.1.370 ; extra == 'test-tox' + - pytest>=6.2.0 ; extra == 'test-tox' + - redis ; extra == 'test-tox' + - rich-click ; extra == 'test-tox' + - sphinx ; extra == 'test-tox' + - sqlalchemy ; extra == 'test-tox' + - torch ; python_full_version < '3.14' and sys_platform == 'linux' and extra == 'test-tox' + - typer ; extra == 'test-tox' + - typing-extensions>=3.10.0.0 ; extra == 'test-tox' + - xarray ; python_full_version < '3.15' and extra == 'test-tox' + - coverage>=5.5 ; extra == 'test-tox-coverage' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/72/4e/1339dc6e2557a344f5ba5590872e80346f76f6cb2ac3dd16e4666e88818c/ml_dtypes-0.5.4-cp314-cp314-macosx_10_13_universal2.whl + name: ml-dtypes + version: 0.5.4 + sha256: 2b857d3af6ac0d39db1de7c706e69c7f9791627209c3d6dedbfca8c7e5faec22 + requires_dist: + - numpy>=1.21 + - numpy>=1.21.2 ; python_full_version >= '3.10' + - numpy>=1.23.3 ; python_full_version >= '3.11' + - numpy>=1.26.0 ; python_full_version >= '3.12' + - numpy>=2.1.0 ; python_full_version >= '3.13' + - absl-py ; extra == 'dev' + - pytest ; extra == 'dev' + - pytest-xdist ; extra == 'dev' + - pylint>=2.6.0 ; extra == 'dev' + - pyink ; extra == 'dev' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/72/9f/485516087cd8c44183aaf9ab850247a28e2e4a42a4d62eab77c21f673450/flatten_dict-0.5.0-py3-none-any.whl + name: flatten-dict + version: 0.5.0 + sha256: c4bd2010052e4d33241433720d054322403fa7ad914fdc5cb1b31a713d4c561e + requires_python: '>=3.10,<4.0' +- pypi: https://files.pythonhosted.org/packages/76/3e/c0b690253f0b82d86e99949af13533363acfb5432ecb5d53dd5b3bce9c34/orjson-3.11.9-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: orjson + version: 3.11.9 + sha256: aaea64f3f467d22e70eeed68bdccb3bc4f83f650446c4a03c59f2cba28a108db + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/77/00/326facd192b7dc0731e43b30f5ada5ef235e2a3325a151d94ed3db041536/jax_cuda12_pjrt-0.10.2-py3-none-manylinux_2_27_x86_64.whl + name: jax-cuda12-pjrt + version: 0.10.2 + sha256: 806d1fd29038b6acf5a2b289dd62192abea977ee26aef60ea295b1d28a23acf8 +- pypi: https://files.pythonhosted.org/packages/78/91/3635cdb13318cb0a328abaa69e2b91251caad39d6779aa308098f341f6cb/simplejson-4.1.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + name: simplejson + version: 4.1.1 + sha256: 3851658d642c1184d2023f0e6c9ce44a21eb1629e74e7c84ef956b128841fe12 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,!=3.7.*' +- pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + name: annotated-types + version: 0.7.0 + sha256: 1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53 + requires_dist: + - typing-extensions>=4.0.0 ; python_full_version < '3.9' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/7b/78/55b12e70f45bccc40d9e483925c065027b3b98ea4cbbdf6f8c2546feaf6c/sqlalchemy-2.0.51-cp314-cp314-win_amd64.whl + name: sqlalchemy + version: 2.0.51 + sha256: 96747bfbadb055466e5b46d572618170046b45ce5a4879167f50d70a5319a499 + requires_dist: + - importlib-metadata ; python_full_version < '3.8' + - greenlet>=1 ; platform_machine == 'AMD64' or platform_machine == 'WIN32' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'ppc64le' or platform_machine == 'win32' or platform_machine == 'x86_64' + - typing-extensions>=4.6.0 + - greenlet>=1 ; extra == 'asyncio' + - mypy>=0.910 ; extra == 'mypy' + - pyodbc ; extra == 'mssql' + - pymssql ; extra == 'mssql-pymssql' + - pyodbc ; extra == 'mssql-pyodbc' + - mysqlclient>=1.4.0 ; extra == 'mysql' + - mysql-connector-python ; extra == 'mysql-connector' + - mariadb>=1.0.1,!=1.1.2,!=1.1.5,!=1.1.10 ; extra == 'mariadb-connector' + - cx-oracle>=8 ; extra == 'oracle' + - oracledb>=1.0.1 ; extra == 'oracle-oracledb' + - psycopg2>=2.7 ; extra == 'postgresql' + - pg8000>=1.29.1 ; extra == 'postgresql-pg8000' + - greenlet>=1 ; extra == 'postgresql-asyncpg' + - asyncpg ; extra == 'postgresql-asyncpg' + - psycopg2-binary ; extra == 'postgresql-psycopg2binary' + - psycopg2cffi ; extra == 'postgresql-psycopg2cffi' + - psycopg>=3.0.7 ; extra == 'postgresql-psycopg' + - psycopg[binary]>=3.0.7 ; extra == 'postgresql-psycopgbinary' + - pymysql ; extra == 'pymysql' + - greenlet>=1 ; extra == 'aiomysql' + - aiomysql>=0.2.0 ; extra == 'aiomysql' + - greenlet>=1 ; extra == 'aioodbc' + - aioodbc ; extra == 'aioodbc' + - greenlet>=1 ; extra == 'asyncmy' + - asyncmy>=0.2.3,!=0.2.4,!=0.2.6 ; extra == 'asyncmy' + - greenlet>=1 ; extra == 'aiosqlite' + - aiosqlite ; extra == 'aiosqlite' + - typing-extensions!=3.10.0.1 ; extra == 'aiosqlite' + - sqlcipher3-binary ; extra == 'sqlcipher' + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/7f/86/99ac757b96255b1446bf307e1396567fd355b5ebe89ca04d01fa0a6bb704/nvidia_cuda_cupti-13.3.35-py3-none-manylinux_2_25_x86_64.whl + name: nvidia-cuda-cupti + version: 13.3.35 + sha256: 50eaf329ee2b5830a51d078c24375cba791570779b953580b259ec0cf0cdbdc0 + requires_python: '>=3' +- pypi: https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl + name: rich + version: 15.0.0 + sha256: 33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb + requires_dist: + - ipywidgets>=7.5.1,<9 ; extra == 'jupyter' + - markdown-it-py>=2.2.0 + - pygments>=2.13.0,<3.0.0 + requires_python: '>=3.9.0' +- pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl + name: cloudpickle + version: 3.1.2 + sha256: 9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl + name: nodeenv + version: 1.10.0 + sha256: 5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*' +- pypi: https://files.pythonhosted.org/packages/89/82/5ab5211079a151b6f661529369c0c8e98ec64cabf5c0cf22a0a05af124d8/jax-0.10.2-py3-none-any.whl + name: jax + version: 0.10.2 + sha256: 724d73c4678d8b06f6a6ab4db1b8a2fea8cd4f1e2c2564f99601634ec7b8d1c6 + requires_dist: + - jaxlib>=0.10.1,<=0.10.2 + - ml-dtypes>=0.5.0 + - numpy>=2.0 + - opt-einsum + - scipy>=1.14 + - jaxlib==0.10.1 ; extra == 'minimum-jaxlib' + - jaxlib==0.10.1 ; extra == 'ci' + - jaxlib<=0.10.2,>=0.10.2 ; extra == 'tpu' + - libtpu==0.0.42.* ; extra == 'tpu' + - requests ; extra == 'tpu' + - jaxlib<=0.10.2,>=0.10.2 ; extra == 'cuda' + - jax-cuda12-plugin[with-cuda]<=0.10.2,>=0.10.2 ; extra == 'cuda' + - jaxlib<=0.10.2,>=0.10.2 ; extra == 'cuda12' + - jax-cuda12-plugin[with-cuda]<=0.10.2,>=0.10.2 ; extra == 'cuda12' + - jaxlib<=0.10.2,>=0.10.2 ; extra == 'cuda13' + - jax-cuda13-plugin[with-cuda]<=0.10.2,>=0.10.2 ; extra == 'cuda13' + - jaxlib<=0.10.2,>=0.10.2 ; extra == 'cuda12-local' + - jax-cuda12-plugin<=0.10.2,>=0.10.2 ; extra == 'cuda12-local' + - jaxlib<=0.10.2,>=0.10.2 ; extra == 'cuda13-local' + - jax-cuda13-plugin<=0.10.2,>=0.10.2 ; extra == 'cuda13-local' + - jaxlib<=0.10.2,>=0.10.2 ; extra == 'rocm7-local' + - jax-rocm7-plugin==0.10.2.* ; extra == 'rocm7-local' + - kubernetes ; extra == 'k8s' + - xprof ; extra == 'xprof' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/8b/2c/86916c8a34dcdb0c3ddd1c0e30545041bd781184e437b9cb76fcda70560b/nvidia_cuda_nvrtc-13.3.33-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl + name: nvidia-cuda-nvrtc + version: 13.3.33 + sha256: 82530788b8c6164a54d3fd9ae8bcca8893d397c4aeb998861982a03bbe41e204 + requires_python: '>=3' +- pypi: https://files.pythonhosted.org/packages/8d/a7/998af901511d5efdc6e42fc597d32a69f34eecf86f1591a9d230ab3ab951/nvidia_cuda_crt-13.3.33-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: nvidia-cuda-crt + version: 13.3.33 + sha256: 01ff37600c7b880a14cab4ade763b4c10c0ff92f25cc9dca30f0881ce52693c4 + requires_python: '>=3' +- pypi: https://files.pythonhosted.org/packages/8e/eb/5da01e356015aee6ecfa1187ced87aef51364e306f5e695dd52719bf0e78/orjson-3.11.9-cp314-cp314-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl + name: orjson + version: 3.11.9 + sha256: b6ef1979adc4bc243523f1a2ba91418030a8e29b0a99cbe7e0e2d6807d4dce6e + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/93/09/2de17f86c0a94401687d8f62fc35499bb894455ca05150fa7bb6b41ea1e6/nvidia_nvshmem_cu13-3.7.0-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: nvidia-nvshmem-cu13 + version: 3.7.0 + sha256: 0d2405b559a8affd7ce4daeb7202e872cce6db14df2ab397894ea24edbf5473e + requires_dist: + - nvidia-cuda-cccl + requires_python: '>=3' +- pypi: https://files.pythonhosted.org/packages/95/f4/61e6996dd20481ee834f57a8e9dca28b1869366a135e0d42e2aa8493bdd4/nvidia_cufft_cu12-11.4.1.4-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: nvidia-cufft-cu12 + version: 11.4.1.4 + sha256: c67884f2a7d276b4b80eb56a79322a95df592ae5e765cf1243693365ccab4e28 + requires_dist: + - nvidia-nvjitlink-cu12 + requires_python: '>=3' +- pypi: https://files.pythonhosted.org/packages/96/c3/4f2f318b98465376bbb7a06a33da553c688b3ed39dafbb8307f824eef74a/optree-0.19.1-cp314-cp314-win_amd64.whl + name: optree + version: 0.19.1 + sha256: 50d77b91a8cd01adf422472b7edf39fc445b0268816176a868a385d28f8367c2 + requires_dist: + - typing-extensions>=4.6.0 + - typing-extensions>=4.12.0 ; python_full_version >= '3.13' + - attrs ; extra == 'attrs' + - jax ; extra == 'jax' + - numpy ; extra == 'numpy' + - torch ; extra == 'torch' + - cpplint ; extra == 'lint' + - doc8 ; extra == 'lint' + - mypy ; extra == 'lint' + - pre-commit ; extra == 'lint' + - pyenchant ; extra == 'lint' + - pylint[spelling] ; extra == 'lint' + - ruff ; extra == 'lint' + - xdoctest ; extra == 'lint' + - pytest ; extra == 'test' + - pytest-cov ; extra == 'test' + - covdefaults ; extra == 'test' + - rich ; extra == 'test' + - typing-extensions==4.6.0 ; python_full_version < '3.13' and sys_platform == 'linux' and extra == 'test' + - typing-extensions==4.6.0 ; python_full_version < '3.13' and sys_platform == 'darwin' and extra == 'test' + - typing-extensions==4.6.0 ; python_full_version < '3.13' and sys_platform == 'win32' and extra == 'test' + - typing-extensions==4.12.0 ; python_full_version >= '3.13' and sys_platform == 'linux' and extra == 'test' + - typing-extensions==4.12.0 ; python_full_version >= '3.13' and sys_platform == 'darwin' and extra == 'test' + - typing-extensions==4.12.0 ; python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'test' + - sphinx~=8.0 ; extra == 'docs' + - sphinx-autoapi ; extra == 'docs' + - sphinx-autobuild ; extra == 'docs' + - sphinx-autodoc-typehints ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - sphinx-rtd-theme ; extra == 'docs' + - sphinxcontrib-bibtex ; extra == 'docs' + - docutils ; extra == 'docs' + - attrs ; extra == 'docs' + - jax[cpu] ; extra == 'docs' + - numpy ; extra == 'docs' + - torch ; extra == 'docs' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/97/be/5699b6e642b372f7d24c59c2f41383e2696825e20bab85f7399c7c6a56f7/nvidia_cuda_runtime-13.3.29-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: nvidia-cuda-runtime + version: 13.3.29 + sha256: e04420616e72f563167a7733272992d7e6df6dc5cb54b2f94f9f1520ea9e30c1 + requires_python: '>=3' +- pypi: https://files.pythonhosted.org/packages/99/69/d6c99db15dc0b5e892ac3cc7b942c8b21f4a9cc3bd9ea0bc3b0f339ffbd4/greenlet-3.5.2-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + name: greenlet + version: 3.5.2 + sha256: 26aed8d9503ca78889141a9739d71b383efea5f472a7c522b5410f7eb2a1b163 + requires_dist: + - sphinx ; extra == 'docs' + - furo ; extra == 'docs' + - objgraph ; extra == 'test' + - psutil ; extra == 'test' + - setuptools ; extra == 'test' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/9c/1a/4834b1f2fb1847412353d7342eb7a1d001a4f3bd9d24155e057135a4aa44/optree-0.19.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: optree + version: 0.19.1 + sha256: 3d0e1493429ae1d1a5e34855774ee604c974a8f76656bd0e562cdbf9466c9b1f + requires_dist: + - typing-extensions>=4.6.0 + - typing-extensions>=4.12.0 ; python_full_version >= '3.13' + - attrs ; extra == 'attrs' + - jax ; extra == 'jax' + - numpy ; extra == 'numpy' + - torch ; extra == 'torch' + - cpplint ; extra == 'lint' + - doc8 ; extra == 'lint' + - mypy ; extra == 'lint' + - pre-commit ; extra == 'lint' + - pyenchant ; extra == 'lint' + - pylint[spelling] ; extra == 'lint' + - ruff ; extra == 'lint' + - xdoctest ; extra == 'lint' + - pytest ; extra == 'test' + - pytest-cov ; extra == 'test' + - covdefaults ; extra == 'test' + - rich ; extra == 'test' + - typing-extensions==4.6.0 ; python_full_version < '3.13' and sys_platform == 'linux' and extra == 'test' + - typing-extensions==4.6.0 ; python_full_version < '3.13' and sys_platform == 'darwin' and extra == 'test' + - typing-extensions==4.6.0 ; python_full_version < '3.13' and sys_platform == 'win32' and extra == 'test' + - typing-extensions==4.12.0 ; python_full_version >= '3.13' and sys_platform == 'linux' and extra == 'test' + - typing-extensions==4.12.0 ; python_full_version >= '3.13' and sys_platform == 'darwin' and extra == 'test' + - typing-extensions==4.12.0 ; python_full_version >= '3.13' and sys_platform == 'win32' and extra == 'test' + - sphinx~=8.0 ; extra == 'docs' + - sphinx-autoapi ; extra == 'docs' + - sphinx-autobuild ; extra == 'docs' + - sphinx-autodoc-typehints ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - sphinx-rtd-theme ; extra == 'docs' + - sphinxcontrib-bibtex ; extra == 'docs' + - docutils ; extra == 'docs' + - attrs ; extra == 'docs' + - jax[cpu] ; extra == 'docs' + - numpy ; extra == 'docs' + - torch ; extra == 'docs' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/9e/b9/a6d8bb7d228940f01885bd9f327ab7f9d366a9be775c4bf366bf9d9477ae/kaleido-1.3.0-py3-none-any.whl + name: kaleido + version: 1.3.0 + sha256: 52714dfd38e8f2a114831826200c40bb10d0ca0c11d4272f3f48ad499cd8f8ea + requires_dist: + - choreographer>=1.3.0 + - logistro>=1.0.8 + - orjson>=3.10.15 + - packaging + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/9e/dd/b04e4a733637d370831e328a356254cfc9c875195269b234cc8ca31ff674/dags-0.6.0-py3-none-any.whl + name: dags + version: 0.6.0 + sha256: 701ddeb2155a0898a14317ccb1f6680397f732f9a632e48c3718aee953ce9e57 + requires_dist: + - flatten-dict + - networkx>=3.6 + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/b1/29/c028a0731e202035f0e2e0bfbf1a3e46ad6c628cbb17f6f1cc9eea5d9ff1/pathlib_abc-0.5.2-py3-none-any.whl + name: pathlib-abc + version: 0.5.2 + sha256: 4c9d94cf1b23af417ce7c0417b43333b06a106c01000b286c99de230d95eefbb + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/b1/49/a739be2e1d02a96a658eb71ab45d921c874249252358ad24a5bffdd02525/sqlalchemy-2.0.51-cp314-cp314-macosx_11_0_arm64.whl + name: sqlalchemy + version: 2.0.51 + sha256: 6ea306caaae6bd5afd0a46050003c88f6bf33227377a49298c498c3cb88ff491 + requires_dist: + - importlib-metadata ; python_full_version < '3.8' + - greenlet>=1 ; platform_machine == 'AMD64' or platform_machine == 'WIN32' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'ppc64le' or platform_machine == 'win32' or platform_machine == 'x86_64' + - typing-extensions>=4.6.0 + - greenlet>=1 ; extra == 'asyncio' + - mypy>=0.910 ; extra == 'mypy' + - pyodbc ; extra == 'mssql' + - pymssql ; extra == 'mssql-pymssql' + - pyodbc ; extra == 'mssql-pyodbc' + - mysqlclient>=1.4.0 ; extra == 'mysql' + - mysql-connector-python ; extra == 'mysql-connector' + - mariadb>=1.0.1,!=1.1.2,!=1.1.5,!=1.1.10 ; extra == 'mariadb-connector' + - cx-oracle>=8 ; extra == 'oracle' + - oracledb>=1.0.1 ; extra == 'oracle-oracledb' + - psycopg2>=2.7 ; extra == 'postgresql' + - pg8000>=1.29.1 ; extra == 'postgresql-pg8000' + - greenlet>=1 ; extra == 'postgresql-asyncpg' + - asyncpg ; extra == 'postgresql-asyncpg' + - psycopg2-binary ; extra == 'postgresql-psycopg2binary' + - psycopg2cffi ; extra == 'postgresql-psycopg2cffi' + - psycopg>=3.0.7 ; extra == 'postgresql-psycopg' + - psycopg[binary]>=3.0.7 ; extra == 'postgresql-psycopgbinary' + - pymysql ; extra == 'pymysql' + - greenlet>=1 ; extra == 'aiomysql' + - aiomysql>=0.2.0 ; extra == 'aiomysql' + - greenlet>=1 ; extra == 'aioodbc' + - aioodbc ; extra == 'aioodbc' + - greenlet>=1 ; extra == 'asyncmy' + - asyncmy>=0.2.3,!=0.2.4,!=0.2.6 ; extra == 'asyncmy' + - greenlet>=1 ; extra == 'aiosqlite' + - aiosqlite ; extra == 'aiosqlite' + - typing-extensions!=3.10.0.1 ; extra == 'aiosqlite' + - sqlcipher3-binary ; extra == 'sqlcipher' + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl + name: mdurl + version: 0.1.2 + sha256: 84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl + name: markdown-it-py + version: 4.2.0 + sha256: 9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a + requires_dist: + - mdurl~=0.1 + - psutil ; extra == 'benchmarking' + - pytest ; extra == 'benchmarking' + - pytest-benchmark ; extra == 'benchmarking' + - commonmark~=0.9 ; extra == 'compare' + - markdown~=3.4 ; extra == 'compare' + - mistletoe~=1.0 ; extra == 'compare' + - mistune~=3.0 ; extra == 'compare' + - panflute~=2.3 ; extra == 'compare' + - markdown-it-pyrs ; extra == 'compare' + - linkify-it-py>=1,<3 ; extra == 'linkify' + - mdit-py-plugins>=0.5.0 ; extra == 'plugins' + - gprof2dot ; extra == 'profiling' + - mdit-py-plugins>=0.5.0 ; extra == 'rtd' + - myst-parser ; extra == 'rtd' + - pyyaml ; extra == 'rtd' + - sphinx ; extra == 'rtd' + - sphinx-copybutton ; extra == 'rtd' + - sphinx-design ; extra == 'rtd' + - sphinx-book-theme~=1.0 ; extra == 'rtd' + - jupyter-sphinx ; extra == 'rtd' + - ipykernel ; extra == 'rtd' + - coverage ; extra == 'testing' + - pytest ; extra == 'testing' + - pytest-cov ; extra == 'testing' + - pytest-regressions ; extra == 'testing' + - pytest-timeout ; extra == 'testing' + - requests ; extra == 'testing' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/b5/83/205e7af4153d9690c3cb94fa9cea670c0d26ce7f022aaa589a9e136f1491/jupyter_book-2.1.5-py3-none-any.whl + name: jupyter-book + version: 2.1.5 + sha256: 19eedc70bb8d5ed5de0f7f3cb8de312da3a50900dcdda9b0c5a9704410a7758d + requires_dist: + - ipykernel + - jupyter-core + - jupyter-server + - platformdirs>=4.2.2 + - nodeenv>=1.9.1 + - markdown ; extra == 'docs' + - pandas ; extra == 'docs' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/b8/85/e4af82cc9202023862090bfca4ea827d533329e925c758f0cde964cb54b7/nvidia_cuda_nvrtc_cu12-12.9.86-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl + name: nvidia-cuda-nvrtc-cu12 + version: 12.9.86 + sha256: 210cf05005a447e29214e9ce50851e83fc5f4358df8b453155d5e1918094dcb4 + requires_python: '>=3' +- pypi: https://files.pythonhosted.org/packages/ba/6c/ff8bf52315064dbeb55cb5067e191120a5b2e58bb648d0d34cf7969dc2c2/choreographer-1.3.0-py3-none-any.whl + name: choreographer + version: 1.3.0 + sha256: cea4cb739e4f61625e4b53888a8d3fa1d3bf73948b56753e460ab44da7d8d44f + requires_dist: + - logistro>=2.0.1 + - platformdirs>=4.3.6 + - simplejson>=3.19.3 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/bc/46/a92db19b8309581092a3add7e6fceb4c301a3fd233969856a8cbf042cd3c/nvidia_cuda_runtime_cu12-12.9.79-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: nvidia-cuda-runtime-cu12 + version: 12.9.79 + sha256: 25bba2dfb01d48a9b59ca474a1ac43c6ebf7011f1b0b8cc44f54eb6ac48a96c3 + requires_python: '>=3' +- pypi: https://files.pythonhosted.org/packages/c1/2e/b84e32197e33f39907b455b83395a017e697c07a449a2b15fd07fc1c9981/nvidia_cuda_cupti_cu12-12.9.79-py3-none-manylinux_2_25_x86_64.whl + name: nvidia-cuda-cupti-cu12 + version: 12.9.79 + sha256: 096bcf334f13e1984ba36685ad4c1d6347db214de03dbb6eebb237b41d9d934f + requires_python: '>=3' +- pypi: https://files.pythonhosted.org/packages/c4/33/265c894268cca88ff67b144ca2b4c522fc8b9a6f1966a3640c70516e78e1/msgspec-0.21.1-cp314-cp314-win_amd64.whl + name: msgspec + version: 0.21.1 + sha256: 5666b1b560b97b6ec2eb3fca8a502298ebac56e13bbca1f88523538ce83d01ea + requires_dist: + - tomli ; python_full_version < '3.11' and extra == 'toml' + - tomli-w ; extra == 'toml' + - pyyaml ; extra == 'yaml' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/c6/bb/82c7dcf38070b46172a517e2334e665c5bf374a262f99a283ea454bece7c/ml_dtypes-0.5.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: ml-dtypes + version: 0.5.4 + sha256: 14a4fd3228af936461db66faccef6e4f41c1d82fcc30e9f8d58a08916b1d811f + requires_dist: + - numpy>=1.21 + - numpy>=1.21.2 ; python_full_version >= '3.10' + - numpy>=1.23.3 ; python_full_version >= '3.11' + - numpy>=1.26.0 ; python_full_version >= '3.12' + - numpy>=2.1.0 ; python_full_version >= '3.13' + - absl-py ; extra == 'dev' + - pytest ; extra == 'dev' + - pytest-xdist ; extra == 'dev' + - pylint>=2.6.0 ; extra == 'dev' + - pyink ; extra == 'dev' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl + name: click + version: 8.4.1 + sha256: 482be17c6991b8c19c5429a1e995d9b0efdbb63172824c41f99965dc0ade8ec2 + requires_dist: + - colorama ; sys_platform == 'win32' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/c7/18/c86eb8e0202e32dd3df50d43d7ff9854f8e0603945ff398974c1d91ac1ef/tomli_w-1.2.0-py3-none-any.whl + name: tomli-w + version: 1.2.0 + sha256: 188306098d013b691fcadc011abd66727d3c414c571bb01b1a174ba8c983cf90 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/cb/c0/0a517bfe63ccd3b92eb254d264e28fca3c7cab75d07daea315250fb1bf73/nvidia_cublas_cu12-12.9.2.10-py3-none-manylinux_2_27_x86_64.whl + name: nvidia-cublas-cu12 + version: 12.9.2.10 + sha256: e4f53a8ca8c5d6e8c492d0d0a3d565ecb59a751b19cfdaa4f6da0ab2104c1702 + requires_dist: + - nvidia-cuda-nvrtc-cu12 + requires_python: '>=3' +- pypi: https://files.pythonhosted.org/packages/cb/fc/8c82be70b8f96d09943360f34cfb2ecdd3035294c51bce4131eeabe56645/tabcompleter-1.4.1-py3-none-any.whl + name: tabcompleter + version: 1.4.1 + sha256: 26b5cf330a48f32625b00e1664aa589f67c8e98275b6d9c2b85d19917dac1601 + requires_dist: + - pyreadline3 ; sys_platform == 'win32' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/ce/0d/cc77458e8fb0634597e3994650c2853ee785f2fc61bf370bbb304021cca1/nvidia_cublas-13.5.1.27-py3-none-manylinux_2_27_x86_64.whl + name: nvidia-cublas + version: 13.5.1.27 + sha256: db3a1f0c8bc24945a4d195ba199d83f27e650ffdfc0c32e6b8362c314f14d553 + requires_dist: + - nvidia-cuda-nvrtc + requires_python: '>=3' +- pypi: https://files.pythonhosted.org/packages/ce/80/7f1f1bf8c2d5dfd8e9c0e1191aa355ff8b80b5619f84d6dcc2703fa7fd5a/loky-3.5.6-py3-none-any.whl + name: loky + version: 3.5.6 + sha256: 6d5300ac68cbd5084e89a6a0a187785d6a79950d461c80223d2c9a41d672b3d4 + requires_dist: + - cloudpickle + - packaging ; extra == 'tests' + - pytest ; extra == 'tests' + - psutil ; extra == 'tests' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/d1/a1/c5e46c3e42b866199365e35d11dddfd1fbd8bba4fdb3c52f965b1607ce94/msgspec-0.21.1-cp314-cp314-macosx_11_0_arm64.whl + name: msgspec + version: 0.21.1 + sha256: 3cb779ea0c35bc807ff941d415875c1f69ca0be91a2e907ab99a171811d86a9a + requires_dist: + - tomli ; python_full_version < '3.11' and extra == 'toml' + - tomli-w ; extra == 'toml' + - pyyaml ; extra == 'yaml' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/d7/54/c30cb1d08258612ece1dfa72c6918998bebecb916c54fca6d806bc780f2b/pytask-0.6.0-py3-none-any.whl + name: pytask + version: 0.6.0 + sha256: cc4c31ead39f5c64be037640f7bf589b68bd0e87ea9e1a049ba86ceab42c9d13 + requires_dist: + - click>=8.1.8,!=8.2.0 + - click-default-group>=1.2.4 + - msgspec>=0.18.6 + - msgspec[toml]>=0.18.6 + - optree>=0.9.0 + - packaging>=23.0.0 + - pluggy>=1.3.0 + - rich>=13.8.0 + - sqlalchemy>=2.0.31 + - tomli>=1 ; python_full_version < '3.11' + - typing-extensions>=4.8.0 ; python_full_version < '3.11' + - universal-pathlib>=0.2.2 + - networkx>=2.4.0 ; extra == 'dag' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/dd/1a/5d9a402b39ec892d856bbdd9db502ff73ce28cdf4aff72eb1ce1d6843506/universal_pathlib-0.3.10-py3-none-any.whl + name: universal-pathlib + version: 0.3.10 + sha256: dfaf2fb35683d2eb1287a3ed7b215e4d6016aa6eaf339c607023d22f90821c66 + requires_dist: + - fsspec>=2024.5.0 + - pathlib-abc>=0.5.1,<0.6.0 + - pytest>=8 ; extra == 'tests' + - pytest-sugar>=0.9.7 ; extra == 'tests' + - pytest-cov>=4.1.0 ; extra == 'tests' + - pytest-mock>=3.12.0 ; extra == 'tests' + - pylint>=2.17.4 ; extra == 'tests' + - mypy>=1.10.0 ; extra == 'tests' + - pydantic>=2 ; extra == 'tests' + - pytest-mypy-plugins>=3.1.2 ; extra == 'tests' + - packaging ; extra == 'tests' + - mypy>=1.10.0 ; extra == 'typechecking' + - pytest-mypy-plugins>=3.1.2 ; extra == 'typechecking' + - fsspec[adl,gcs,github,http,s3,smb,ssh]>=2024.5.0 ; extra == 'dev' + - s3fs>=2024.5.0 ; extra == 'dev' + - gcsfs>=2024.5.0 ; extra == 'dev' + - adlfs>=2024 ; extra == 'dev' + - huggingface-hub ; extra == 'dev' + - webdav4[fsspec] ; extra == 'dev' + - moto[s3,server] ; extra == 'dev' + - wsgidav ; extra == 'dev' + - cheroot ; extra == 'dev' + - pyftpdlib ; extra == 'dev' + - typing-extensions ; python_full_version < '3.11' and extra == 'dev' + - pydantic ; extra == 'dev-third-party' + - pydantic-settings ; extra == 'dev-third-party' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/dd/a1/e77854cb5336fd37dc3c6ae3b71de242c98caac5725120be0b526b31cbd0/sqlalchemy-2.0.51-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: sqlalchemy + version: 2.0.51 + sha256: 4004ada0aafe8ae1991b2cd1d99c6d9146126e123bd6f883c260d974aa012e54 + requires_dist: + - importlib-metadata ; python_full_version < '3.8' + - greenlet>=1 ; platform_machine == 'AMD64' or platform_machine == 'WIN32' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'ppc64le' or platform_machine == 'win32' or platform_machine == 'x86_64' + - typing-extensions>=4.6.0 + - greenlet>=1 ; extra == 'asyncio' + - mypy>=0.910 ; extra == 'mypy' + - pyodbc ; extra == 'mssql' + - pymssql ; extra == 'mssql-pymssql' + - pyodbc ; extra == 'mssql-pyodbc' + - mysqlclient>=1.4.0 ; extra == 'mysql' + - mysql-connector-python ; extra == 'mysql-connector' + - mariadb>=1.0.1,!=1.1.2,!=1.1.5,!=1.1.10 ; extra == 'mariadb-connector' + - cx-oracle>=8 ; extra == 'oracle' + - oracledb>=1.0.1 ; extra == 'oracle-oracledb' + - psycopg2>=2.7 ; extra == 'postgresql' + - pg8000>=1.29.1 ; extra == 'postgresql-pg8000' + - greenlet>=1 ; extra == 'postgresql-asyncpg' + - asyncpg ; extra == 'postgresql-asyncpg' + - psycopg2-binary ; extra == 'postgresql-psycopg2binary' + - psycopg2cffi ; extra == 'postgresql-psycopg2cffi' + - psycopg>=3.0.7 ; extra == 'postgresql-psycopg' + - psycopg[binary]>=3.0.7 ; extra == 'postgresql-psycopgbinary' + - pymysql ; extra == 'pymysql' + - greenlet>=1 ; extra == 'aiomysql' + - aiomysql>=0.2.0 ; extra == 'aiomysql' + - greenlet>=1 ; extra == 'aioodbc' + - aioodbc ; extra == 'aioodbc' + - greenlet>=1 ; extra == 'asyncmy' + - asyncmy>=0.2.3,!=0.2.4,!=0.2.6 ; extra == 'asyncmy' + - greenlet>=1 ; extra == 'aiosqlite' + - aiosqlite ; extra == 'aiosqlite' + - typing-extensions!=3.10.0.1 ; extra == 'aiosqlite' + - sqlcipher3-binary ; extra == 'sqlcipher' + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/e1/ef/276c358c6ab44efbe68e69977657cb80927e7ab6d45968d042e1083f45e5/nvidia_cudnn_cu12-9.23.2.1-py3-none-manylinux_2_27_x86_64.whl + name: nvidia-cudnn-cu12 + version: 9.23.2.1 + sha256: a5e706320218dc7d661b0e13402f204eeccd07b18d061b4d60668f80e464dd1e + requires_dist: + - nvidia-cublas-cu12 + requires_python: '>=3' +- pypi: https://files.pythonhosted.org/packages/e5/22/4222d7ddf3da30f363edaa98e329c2bce6c65497c9cb2810931c8b2c0fbc/fsspec-2026.6.0-py3-none-any.whl + name: fsspec + version: 2026.6.0 + sha256: 02e0b71817df9b2169dc30a16832045764def1191b43dcff5bb85bdee212d2a1 + requires_dist: + - adlfs ; extra == 'abfs' + - adlfs ; extra == 'adl' + - pyarrow>=1 ; extra == 'arrow' + - dask ; extra == 'dask' + - distributed ; extra == 'dask' + - pre-commit ; extra == 'dev' + - ruff>=0.5 ; extra == 'dev' + - numpydoc ; extra == 'doc' + - sphinx ; extra == 'doc' + - sphinx-design ; extra == 'doc' + - sphinx-rtd-theme ; extra == 'doc' + - yarl ; extra == 'doc' + - dropbox ; extra == 'dropbox' + - dropboxdrivefs ; extra == 'dropbox' + - requests ; extra == 'dropbox' + - adlfs ; extra == 'full' + - aiohttp!=4.0.0a0,!=4.0.0a1 ; extra == 'full' + - dask ; extra == 'full' + - distributed ; extra == 'full' + - dropbox ; extra == 'full' + - dropboxdrivefs ; extra == 'full' + - fusepy ; extra == 'full' + - gcsfs>2024.2.0 ; extra == 'full' + - libarchive-c ; extra == 'full' + - ocifs ; extra == 'full' + - panel ; extra == 'full' + - paramiko ; extra == 'full' + - pyarrow>=1 ; extra == 'full' + - pygit2 ; extra == 'full' + - requests ; extra == 'full' + - s3fs>2024.2.0 ; extra == 'full' + - smbprotocol ; extra == 'full' + - tqdm ; extra == 'full' + - fusepy ; extra == 'fuse' + - gcsfs>2024.2.0 ; extra == 'gcs' + - pygit2 ; extra == 'git' + - requests ; extra == 'github' + - gcsfs ; extra == 'gs' + - panel ; extra == 'gui' + - pyarrow>=1 ; extra == 'hdfs' + - aiohttp!=4.0.0a0,!=4.0.0a1 ; extra == 'http' + - libarchive-c ; extra == 'libarchive' + - ocifs ; extra == 'oci' + - s3fs>2024.2.0 ; extra == 's3' + - paramiko ; extra == 'sftp' + - smbprotocol ; extra == 'smb' + - paramiko ; extra == 'ssh' + - aiohttp!=4.0.0a0,!=4.0.0a1 ; extra == 'test' + - numpy ; extra == 'test' + - pytest ; extra == 'test' + - pytest-asyncio!=0.22.0 ; extra == 'test' + - pytest-benchmark ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-mock ; extra == 'test' + - pytest-recording ; extra == 'test' + - pytest-rerunfailures ; extra == 'test' + - requests ; extra == 'test' + - aiobotocore>=2.5.4,<3.0.0 ; extra == 'test-downstream' + - dask[dataframe,test] ; extra == 'test-downstream' + - moto[server]>4,<5 ; extra == 'test-downstream' + - pytest-timeout ; extra == 'test-downstream' + - xarray ; extra == 'test-downstream' + - adlfs ; extra == 'test-full' + - aiohttp!=4.0.0a0,!=4.0.0a1 ; extra == 'test-full' + - backports-zstd ; python_full_version < '3.14' and extra == 'test-full' + - cloudpickle ; extra == 'test-full' + - dask ; extra == 'test-full' + - distributed ; extra == 'test-full' + - dropbox ; extra == 'test-full' + - dropboxdrivefs ; extra == 'test-full' + - fastparquet ; extra == 'test-full' + - fusepy ; extra == 'test-full' + - gcsfs ; extra == 'test-full' + - jinja2 ; extra == 'test-full' + - kerchunk ; extra == 'test-full' + - libarchive-c ; extra == 'test-full' + - lz4 ; extra == 'test-full' + - notebook ; extra == 'test-full' + - numpy ; extra == 'test-full' + - ocifs ; extra == 'test-full' + - pandas<3.0.0 ; extra == 'test-full' + - panel ; extra == 'test-full' + - paramiko ; extra == 'test-full' + - pyarrow ; extra == 'test-full' + - pyarrow>=1 ; extra == 'test-full' + - pyftpdlib ; extra == 'test-full' + - pygit2 ; extra == 'test-full' + - pytest ; extra == 'test-full' + - pytest-asyncio!=0.22.0 ; extra == 'test-full' + - pytest-benchmark ; extra == 'test-full' + - pytest-cov ; extra == 'test-full' + - pytest-mock ; extra == 'test-full' + - pytest-recording ; extra == 'test-full' + - pytest-rerunfailures ; extra == 'test-full' + - python-snappy ; extra == 'test-full' + - requests ; extra == 'test-full' + - smbprotocol ; extra == 'test-full' + - tqdm ; extra == 'test-full' + - urllib3 ; extra == 'test-full' + - zarr<3.2.0 ; extra == 'test-full' + - zstandard ; python_full_version < '3.14' and extra == 'test-full' + - tqdm ; extra == 'tqdm' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/e7/00/fab4a29fa1d7eb43bc6b94de4e86312c5e425d5582e58b9641300b9dffc7/nvidia_cufft-12.3.0.29-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: nvidia-cufft + version: 12.3.0.29 + sha256: edb25c0626bd202ee5acc035b5dd361a3b89ed3b75a81a52df72c89150cb57c2 + requires_dist: + - nvidia-nvjitlink + requires_python: '>=3' +- pypi: https://files.pythonhosted.org/packages/e9/93/2bfed22d2498c468f6bcd0d9f56b033eaa19f33320389314c19ef6766413/ml_dtypes-0.5.4-cp314-cp314-win_amd64.whl + name: ml-dtypes + version: 0.5.4 + sha256: 8c6a2dcebd6f3903e05d51960a8058d6e131fe69f952a5397e5dbabc841b6d56 + requires_dist: + - numpy>=1.21 + - numpy>=1.21.2 ; python_full_version >= '3.10' + - numpy>=1.23.3 ; python_full_version >= '3.11' + - numpy>=1.26.0 ; python_full_version >= '3.12' + - numpy>=2.1.0 ; python_full_version >= '3.13' + - absl-py ; extra == 'dev' + - pytest ; extra == 'dev' + - pytest-xdist ; extra == 'dev' + - pylint>=2.6.0 ; extra == 'dev' + - pyink ; extra == 'dev' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/f0/ee/580ca6f29dcab0221db8706badca1bbbb084f1975c4d4e83329c3a7e31f0/nvidia_nvjitlink-13.3.33-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl + name: nvidia-nvjitlink + version: 13.3.33 + sha256: 26a6de7fb4c8fdaa7703d3dad720d6d427ddfea5c48a528fd97c11733ad830e5 + requires_python: '>=3' +- pypi: https://files.pythonhosted.org/packages/f2/0d/27471ec9f1d04674f6e62de809412371e097aed3eca7d9483e677c54c214/jaxlib-0.10.2-cp314-cp314-macosx_11_0_arm64.whl + name: jaxlib + version: 0.10.2 + sha256: 72eba28b12fee02616fa42aa4b881b4ab62d7757c7843c462401d3fb34a27be4 + requires_dist: + - scipy>=1.14 + - numpy>=2.0 + - ml-dtypes>=0.5.0 + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/f3/c3/0c6798456bade745c75c452342dabacce5798196483e77e643be1f53877d/orjson-3.11.9-cp314-cp314-win_amd64.whl + name: orjson + version: 3.11.9 + sha256: 32ef5f4283a3be81913947d19608eacb7c6608026851123790cd9cc8982af34b + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/f7/5e/35c856e186b74678c24927847ad9895a51f1bc02a0c6126477a6c6040064/pyreadline3-3.5.6-py3-none-any.whl + name: pyreadline3 + version: 3.5.6 + sha256: 8449b734232e42a5dcd74048e39b60db2839a4c38cf3ae2bf7707d58b5389c0d + requires_dist: + - build ; extra == 'dev' + - flake8 ; extra == 'dev' + - mypy ; extra == 'dev' + - pytest ; extra == 'dev' + - twine ; extra == 'dev' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/f9/14/abe5ce876ab5b66ee3c691bf537fcd43d037aea55d447aacf74630a8f31e/plotly-6.8.0-py3-none-any.whl + name: plotly + version: 6.8.0 + sha256: 13c5c4a0f70b74cab1913eda0de49b826df5931708eb6f9c3010040614700ec8 + requires_dist: + - narwhals>=1.15.1 + - packaging + - anywidget ; extra == 'dev' + - build ; extra == 'dev' + - colorcet ; extra == 'dev' + - fiona<=1.9.6 ; python_full_version < '3.9' and extra == 'dev' + - geopandas ; extra == 'dev' + - inflect ; extra == 'dev' + - jupyterlab ; extra == 'dev' + - kaleido>=1.3.0 ; extra == 'dev' + - numpy>=1.22 ; extra == 'dev' + - orjson ; extra == 'dev' + - pandas ; extra == 'dev' + - pdfrw ; extra == 'dev' + - pillow ; extra == 'dev' + - plotly-geo ; extra == 'dev' + - polars[timezone] ; extra == 'dev' + - pyarrow ; extra == 'dev' + - pyshp ; extra == 'dev' + - pytest ; extra == 'dev' + - pytz ; extra == 'dev' + - requests ; extra == 'dev' + - ruff==0.11.12 ; extra == 'dev' + - scikit-image ; extra == 'dev' + - scipy ; extra == 'dev' + - shapely ; extra == 'dev' + - statsmodels ; extra == 'dev' + - vaex ; python_full_version < '3.10' and extra == 'dev' + - xarray ; extra == 'dev' + - build ; extra == 'dev-build' + - jupyterlab ; extra == 'dev-build' + - pytest ; extra == 'dev-build' + - requests ; extra == 'dev-build' + - ruff==0.11.12 ; extra == 'dev-build' + - pytest ; extra == 'dev-core' + - requests ; extra == 'dev-core' + - ruff==0.11.12 ; extra == 'dev-core' + - anywidget ; extra == 'dev-optional' + - build ; extra == 'dev-optional' + - colorcet ; extra == 'dev-optional' + - fiona<=1.9.6 ; python_full_version < '3.9' and extra == 'dev-optional' + - geopandas ; extra == 'dev-optional' + - inflect ; extra == 'dev-optional' + - jupyterlab ; extra == 'dev-optional' + - kaleido>=1.3.0 ; extra == 'dev-optional' + - numpy>=1.22 ; extra == 'dev-optional' + - orjson ; extra == 'dev-optional' + - pandas ; extra == 'dev-optional' + - pdfrw ; extra == 'dev-optional' + - pillow ; extra == 'dev-optional' + - plotly-geo ; extra == 'dev-optional' + - polars[timezone] ; extra == 'dev-optional' + - pyarrow ; extra == 'dev-optional' + - pyshp ; extra == 'dev-optional' + - pytest ; extra == 'dev-optional' + - pytz ; extra == 'dev-optional' + - requests ; extra == 'dev-optional' + - ruff==0.11.12 ; extra == 'dev-optional' + - scikit-image ; extra == 'dev-optional' + - scipy ; extra == 'dev-optional' + - shapely ; extra == 'dev-optional' + - statsmodels ; extra == 'dev-optional' + - vaex ; python_full_version < '3.10' and extra == 'dev-optional' + - xarray ; extra == 'dev-optional' + - numpy>=1,<2 ; extra == 'dev-pandas1' + - pandas>=1,<2 ; extra == 'dev-pandas1' + - setuptools<82 ; extra == 'dev-pandas1' + - pandas>=2,<3 ; extra == 'dev-pandas2' + - pandas>=3 ; python_full_version >= '3.11' and extra == 'dev-pandas3' + - numpy>=1.22 ; extra == 'express' + - kaleido>=1.3.0 ; extra == 'kaleido' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/fe/fb/195d50d25ab68a76b817ffc68c45b1fb828598ce35a8e5c1736060628dab/nvidia_cuda_cccl-13.3.3.3.1-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: nvidia-cuda-cccl + version: 13.3.3.3.1 + sha256: 40ba1fa0b2c694ddc06cc791ed5c8bdad4638e2735b784960d68ac3086399c97 + requires_python: '>=3' diff --git a/pyproject.toml b/pyproject.toml index bb09d59a..278c0945 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,8 +29,10 @@ classifiers = [ ] dynamic = [ "version" ] dependencies = [ + "beartype>=0.22", "dags>=0.5.1", "jax>=0.9", + "jaxopt>=0.8.5", "jupyter-book>=2", "kaleido>=1.2", "numpy>=2.4", @@ -39,6 +41,7 @@ dependencies = [ "plotly>=6.6", "pytask>=0.5.8", "pytask-parallel>=0.5.2", + "scikit-learn>=1.5", ] [[project.authors]] name = "Janoś Gabler" @@ -55,13 +58,89 @@ Repository = "https://github.com/OpenSourceEconomics/skillmodels" Tracker = "https://github.com/OpenSourceEconomics/skillmodels/issues" [tool.hatch] +version.source = "vcs" +metadata.allow-direct-references = true build.hooks.vcs.version-file = "src/skillmodels/_version.py" build.targets.sdist.exclude = [ "tests" ] build.targets.sdist.only-packages = true build.targets.wheel.only-include = [ "src" ] build.targets.wheel.sources = [ "src" ] -metadata.allow-direct-references = true -version.source = "vcs" + +[tool.pixi.dependencies] +filterpy = "*" +ipykernel = "*" +jupyterlab = "*" +nbformat = "*" +networkx = "*" +prek = "*" +pybaum = "*" +python = "~=3.14.0" +scikit-learn = "*" +scipy = "*" +h5py = ">=3.16.0,<4" +xlrd = ">=2.0.2,<3" +[tool.pixi.environments] +cuda = { features = [ "cuda" ], solve-group = "cuda" } +docs = { features = [ "docs" ], solve-group = "default" } +tests-cpu = { features = [ "tests" ], solve-group = "default" } +tests-cuda = { features = [ "tests", "cuda" ], solve-group = "cuda" } +type-checking = { features = [ "type-checking", "tests" ], solve-group = "default" } +tests-cuda12 = { features = [ "tests", "cuda" ], solve-group = "cuda" } +tests-cuda13 = { features = [ "tests", "cuda13" ], solve-group = "cuda13" } +[tool.pixi.feature.cuda] +platforms = [ "linux-64" ] +system-requirements = { cuda = "12" } +[tool.pixi.feature.cuda.dependencies] +cuda-nvcc = ">=12" +[tool.pixi.feature.cuda.pypi-dependencies] +jax = { version = ">=0.7", extras = [ "cuda12" ] } +[tool.pixi.feature.cuda.tasks] +mem-cuda = """\ + pytest -x -s --pdb --memray --fail-on-increase \ + tests/test_likelihood_regression.py::test_likelihood_contributions_large_nobs\ + """ +[tool.pixi.feature.cuda13] +platforms = [ "linux-64" ] +system-requirements = { cuda = "13" } +[tool.pixi.feature.cuda13.dependencies] +cuda-nvcc = ">=13" +[tool.pixi.feature.cuda13.pypi-dependencies] +jax = { version = ">=0.9", extras = [ "cuda13" ] } +[tool.pixi.feature.docs.tasks] +build-docs = { cmd = "jupyter book build --html", cwd = "docs" } +view-docs = { cmd = "jupyter book start", cwd = "docs" } +[tool.pixi.feature.tests.dependencies] +pytest = "*" +pytest-cov = "*" +pytest-xdist = "*" +snakeviz = "*" +xlrd = ">=2" +[tool.pixi.feature.tests.target.unix.dependencies] +pytest-memray = "*" +[tool.pixi.feature.tests.tasks] +tests = "pytest tests -m 'not long_running'" +tests-with-cov = "pytest tests --cov-report=xml --cov=./" +mem = """\ + pytest -x -s --pdb --memray --fail-on-increase \ + tests/test_likelihood_regression.py::test_likelihood_contributions_large_nobs\ + """ +mem-on-clean-repo = """\ + git status --porcelain && git diff-index --quiet HEAD -- && git rev-parse HEAD && \ + pytest -x -s --pdb --memray --fail-on-increase \ + tests/test_likelihood_regression.py::test_likelihood_contributions_large_nobs\ + """ +[tool.pixi.feature.type-checking.pypi-dependencies] +matplotlib = "*" # required because of pandas +pandas-stubs = "*" +types-pytz = "*" +[tool.pixi.pypi-dependencies] +jaxopt = ">=0.8.5" +optimagic = { git = "https://github.com/optimagic-dev/optimagic.git", branch = "probability-allow-fixed-entries" } +pdbp = "*" +skillmodels = { path = ".", editable = true } +[tool.pixi.workspace] +channels = [ "conda-forge" ] +platforms = [ "linux-64", "osx-arm64", "win-64" ] [tool.ruff] fix = true @@ -84,8 +163,10 @@ extend-ignore = [ "TRY003", # Long messages outside exception class ] per-file-ignores."**/*.ipynb" = [ + "ANN", # Missing type annotations on tutorial helpers. "B018", # Found useless expression "INP001", # File is part of an implicit namespace package + "PD010", # `.pivot_table` preferred -- presentation tables read fine without it. "T201", # print found ] per-file-ignores."tests/*" = [ @@ -95,6 +176,12 @@ per-file-ignores."tests/*" = [ "FBT003", # Boolean positional value in function call "INP001", # File is part of an implicit namespace package "S101", # Use of assert detected + "T201", # print found (useful for manual inspection in long-running tests) +] +# Reviewer-authored decimal oracle, kept verbatim. +per-file-ignores."tests/stable_translog_reference.py" = [ "ALL" ] +per-file-ignores."tests/test_stable_translog.py" = [ + "SLF001", # Tests the private clip helper. ] pydocstyle.convention = "google" @@ -126,7 +213,6 @@ expand_tables = [ "tool.pixi.feature.tests.tasks", "tool.pixi.feature.type-checking", "tool.pixi.feature.type-checking.pypi-dependencies", - "tool.pixi.feature.type-checking.tasks", "tool.pixi.pypi-dependencies", "tool.pixi.pypi-dependencies.optimagic", "tool.pixi.pypi-dependencies.skillmodels", @@ -134,6 +220,12 @@ expand_tables = [ ] [tool.ty] +# Reviewer-authored audit sources, kept verbatim. +src.exclude = [ "docs/superpowers/specs/stable-translog-audit" ] +# ty resolves third-party imports from this pixi env (the official ty-pre-commit hook +# runs `ty check --no-project`, so uv neither creates a `.venv` nor resolves deps). Run +# `pixi install` once. +environment.python = ".pixi/envs/type-checking" rules.ambiguous-protocol-member = "error" rules.deprecated = "error" rules.division-by-zero = "error" @@ -148,76 +240,16 @@ rules.unused-awaitable = "error" rules.unused-ignore-comment = "error" [tool.pytest] -ini_options.addopts = [ "--pdbcls=pdbp:Pdb" ] -ini_options.filterwarnings = [] -ini_options.markers = [ "integration: integration tests requiring MODEL2 + data" ] ini_options.norecursedirs = [ "docs" ] - -[tool.pixi.dependencies] -filterpy = "*" -ipykernel = "*" -jupyterlab = "*" -nbformat = "*" -networkx = "*" -prek = "*" -pybaum = "*" -python = "~=3.14.0" -scipy = "*" -[tool.pixi.environments] -cuda = { features = [ "cuda" ], solve-group = "cuda" } -docs = { features = [ "docs" ], solve-group = "default" } -tests-cpu = { features = [ "tests" ], solve-group = "default" } -tests-cuda = { features = [ "tests", "cuda" ], solve-group = "cuda" } -type-checking = { features = [ "type-checking" ], solve-group = "default" } -tests-cuda12 = { features = [ "tests", "cuda" ], solve-group = "cuda" } -[tool.pixi.feature.cuda] -platforms = [ "linux-64" ] -system-requirements = { cuda = "12" } -[tool.pixi.feature.cuda.dependencies] -cuda-nvcc = ">=12" -[tool.pixi.feature.cuda.pypi-dependencies] -jax = { version = ">=0.7", extras = [ "cuda12" ] } -[tool.pixi.feature.cuda.tasks] -mem-cuda = """\ - pytest -x -s --pdb --memray --fail-on-increase \ - tests/test_likelihood_regression.py::test_likelihood_contributions_large_nobs\ - """ -[tool.pixi.feature.docs.tasks] -build-docs = { cmd = "jupyter book build --html", cwd = "docs" } -view-docs = { cmd = "jupyter book start", cwd = "docs" } -[tool.pixi.feature.tests.dependencies] -pytest = "*" -pytest-cov = "*" -pytest-xdist = "*" -snakeviz = "*" -[tool.pixi.feature.tests.target.unix.dependencies] -pytest-memray = "*" -[tool.pixi.feature.tests.tasks] -tests = "pytest tests" -tests-with-cov = "pytest tests --cov-report=xml --cov=./" -mem = """\ - pytest -x -s --pdb --memray --fail-on-increase \ - tests/test_likelihood_regression.py::test_likelihood_contributions_large_nobs\ - """ -mem-on-clean-repo = """\ - git status --porcelain && git diff-index --quiet HEAD -- && git rev-parse HEAD && \ - pytest -x -s --pdb --memray --fail-on-increase \ - tests/test_likelihood_regression.py::test_likelihood_contributions_large_nobs\ - """ -[tool.pixi.feature.type-checking.pypi-dependencies] -matplotlib = "*" # required because of pandas -pandas-stubs = "*" -ty = "*" -types-pytz = "*" -[tool.pixi.feature.type-checking.tasks] -ty = "ty check src tests docs" -[tool.pixi.pypi-dependencies] -# optimagic = { git = "https://github.com/optimagic-dev/optimagic.git", branch = "main" } -pdbp = "*" -skillmodels = { path = ".", editable = true } -[tool.pixi.workspace] -channels = [ "conda-forge" ] -platforms = [ "linux-64", "osx-arm64", "win-64" ] +ini_options.addopts = [ "--pdbcls=pdbp:Pdb" ] +ini_options.markers = [ + "end_to_end: end-to-end estimation tests requiring external data", + "integration: integration tests requiring MODEL2 + data", + "long_running: slow tests skipped in CI (run with -m long_running)", +] +ini_options.filterwarnings = [ + "ignore::pandas.errors.PerformanceWarning", +] [tool.yamlfix] line_length = 88 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 00000000..bf5ab88b --- /dev/null +++ b/requirements.txt @@ -0,0 +1,66 @@ +# Pip-only requirements for the skillmodels `af-estimator` branch. +# +# Installs every package needed to run the skillmodels test suite and +# the two downstream research applications (`skane-struct-bw`, +# `health-cognition`) -- minus the two applications themselves, which +# their teams provide separately. +# +# Defaults to CPU JAX. For CUDA-12, replace `jax>=0.9` with +# `jax[cuda12]>=0.9` (and provide a CUDA-12 toolkit on the host). See +# https://jax.readthedocs.io/en/latest/installation.html for details. +# +# Usage (Python 3.14 venv): +# pip install -r requirements.txt +# +# Notes on dependencies that come from the downstream apps and are NOT +# direct skillmodels dependencies are marked with `# downstream:` below. + +# Core scientific stack +numpy>=2.4 +pandas>=3 +scipy>=1.16.0 +h5py>=3.16.0,<4 +jax>=0.9 +networkx +filterpy +pybaum>=0.1.3 +scikit-learn>=1.5 # AMN Stage 1 (mixture EM) +statsmodels>=0.14.5 # downstream: regression diagnostics in skane / health-cognition +seaborn # downstream: figure styling in health-cognition + +# Estimation engine — pinned to the optimagic branch the AF estimator +# relies on (`probability-allow-fixed-entries`); the PyPI release does +# not yet carry the required `FixedConstraintWithValue` semantics. +optimagic @ git+https://github.com/optimagic-dev/optimagic.git@probability-allow-fixed-entries +fides>=0.7.8 # downstream: optimagic algorithm used by skane / health-cognition + +# Workflow / pipelines +dags>=0.5.1 +pytask>=0.5.8 +pytask-parallel>=0.5.2 + +# Viz + reporting +plotly>=6.6 +kaleido>=1.2 +jupyter-book>=2 +tabulate>=0.9.0 # downstream: table formatting in skane / health-cognition reports +nbformat>=5.10.4 +ipykernel>=6.29.5 +jupyterlab + +# Data / IO utilities +statadict>=1.1.0 # downstream: Stata variable labels in skane / health-cognition +deepdiff>=8.5.0 # downstream: snapshot diffing in skane / health-cognition +xlrd>=2 # required by `tests/matlab_ces_repro` (CNLSY xls reader) + +# Dev / test / profiling tooling +pytest>=8.4.1 +pytest-cov>=6.2.1 +pytest-xdist>=3.8.0 +pytest-memray; platform_system != 'Windows' +memray>=1.17.2 # downstream: heap profiling driver +snakeviz +pdbp + +# Skillmodels itself, pulled from the `af-estimator` branch. +skillmodels @ git+https://github.com/OpenSourceEconomics/skillmodels.git@af-estimator diff --git a/src/skillmodels/__init__.py b/src/skillmodels/__init__.py index c4fd82f4..e470120f 100644 --- a/src/skillmodels/__init__.py +++ b/src/skillmodels/__init__.py @@ -1,43 +1,75 @@ """Skillmodels: A Python package for estimating latent factor models.""" +# Enable 64-bit JAX before any skillmodels submodule. Every CHS / AF / AMN +# entry point already sets this inside its function body; centralising it +# here makes the package behave consistently for direct callers. import contextlib +import os + +os.environ.setdefault("JAX_ENABLE_X64", "1") + +import jax + +jax.config.update("jax_enable_x64", True) # noqa: FBT003 with contextlib.suppress(ImportError): import pdbp # noqa: F401 -from skillmodels.diagnostic_plots import ( - plot_likelihood_contributions, - plot_residual_boxplots, +from skillmodels.af.estimate import estimate_af # noqa: E402 +from skillmodels.af.types import AFEstimationOptions, AFEstimationResult # noqa: E402 +from skillmodels.amn.estimate import estimate_amn # noqa: E402 +from skillmodels.amn.types import ( # noqa: E402 + AMNEstimationOptions, + AMNEstimationResult, +) +from skillmodels.chs.estimate import estimate_chs # noqa: E402 +from skillmodels.chs.maximization_inputs import get_maximization_inputs # noqa: E402 +from skillmodels.chs.options import CHSEstimationOptions # noqa: E402 +from skillmodels.chs.types import CHSEstimationResult # noqa: E402 +from skillmodels.common.control_function import generate_kappa_terms # noqa: E402 +from skillmodels.common.estimation import ( # noqa: E402 + CommonEstimationOptions, + CommonEstimationResult, ) -from skillmodels.filtered_states import get_filtered_states -from skillmodels.maximization_inputs import get_maximization_inputs -from skillmodels.model_spec import ( +from skillmodels.common.individual_states import ( # noqa: E402 + get_individual_states, + get_individual_states_from_params, +) +from skillmodels.common.measurement_models import ( # noqa: E402 + GaussianMeasurement, + ProbitMeasurement, + TobitMeasurement, +) +from skillmodels.common.model_spec import ( # noqa: E402 AnchoringSpec, - EstimationOptions, + CorrectionSpec, FactorSpec, ModelSpec, Normalizations, ) -from skillmodels.process_debug_data import create_state_ranges -from skillmodels.simulate_data import simulate_dataset, simulate_policy_effect -from skillmodels.variance_decomposition import ( - decompose_measurement_variance, - summarize_measurement_reliability, -) __all__ = [ + "AFEstimationOptions", + "AFEstimationResult", + "AMNEstimationOptions", + "AMNEstimationResult", "AnchoringSpec", - "EstimationOptions", + "CHSEstimationOptions", + "CHSEstimationResult", + "CommonEstimationOptions", + "CommonEstimationResult", + "CorrectionSpec", "FactorSpec", + "GaussianMeasurement", "ModelSpec", "Normalizations", - "create_state_ranges", - "decompose_measurement_variance", - "get_filtered_states", + "ProbitMeasurement", + "TobitMeasurement", + "estimate_af", + "estimate_amn", + "estimate_chs", + "generate_kappa_terms", + "get_individual_states", + "get_individual_states_from_params", "get_maximization_inputs", - "plot_likelihood_contributions", - "plot_residual_boxplots", - "simulate_dataset", - "simulate_policy_effect", - "summarize_measurement_reliability", ] diff --git a/src/skillmodels/_beartype_conf.py b/src/skillmodels/_beartype_conf.py new file mode 100644 index 00000000..284182a6 --- /dev/null +++ b/src/skillmodels/_beartype_conf.py @@ -0,0 +1,92 @@ +"""Per-exception `BeartypeConf` instances used at the skillmodels perimeter. + +Decorators at user-facing entry points configure beartype to raise the +existing project exception class on parameter-type violations, +preserving the documented exception hierarchy in +`skillmodels.exceptions`. + +The constructors and call sites decorated through this module are the +"perimeter": ModelSpec / FactorSpec / AnchoringSpec / Normalizations, +the three estimation-options dataclasses, and every public function +exposed from the top-level package or the subpackage `__init__`s. The +internal helpers below the perimeter are unannotated for beartype and +trust the perimeter to have already validated parameter types. +""" + +from collections.abc import Callable + +from beartype import BeartypeConf, BeartypeStrategy, beartype + +from skillmodels.exceptions import ( + DiagnosticsCallError, + EstimationCallError, + InferenceCallError, + ModelSpecInitializationError, + OptionsInitializationError, + SimulationCallError, +) + + +def _conf(exc: type[Exception]) -> BeartypeConf: + """Build a `BeartypeConf` that raises `exc` on parameter-type violations. + + `On` strategy: full O(n) container validation so every bad entry in + a mapping/sequence is reported, not just one sampled element. The + decorated entry points are called rarely (construction, estimate, + simulate, plot), so per-call cost is invisible compared to the + JIT-compiled hot path each one kicks off. + + `is_pep484_tower=True`: respect the PEP-484 numeric tower so `int` + satisfies `float`-typed parameters (matches the implicit numeric + conversion that Python and ruff's PYI041 both assume). + """ + return BeartypeConf( + violation_param_type=exc, + strategy=BeartypeStrategy.On, + is_pep484_tower=True, + ) + + +def beartype_init[T](conf: BeartypeConf) -> Callable[[type[T]], type[T]]: + """Class decorator that wraps only `__init__` with `@beartype(conf=conf)`. + + Bare `@beartype` on a class wraps every method, which surfaces + non-public annotation drift on instance methods that has nothing + to do with parameter validation at construction time (e.g. a + helper method that takes a JAX array typed loosely as `Any`). The + only annotations we actively curate at the perimeter are the + public-facing `__init__` parameters; restrict to those. + + The decorator is generic in the decorated class so the type checker keeps + seeing `ModelSpec` (etc.) as the class itself, not as an opaque `type` + value -- otherwise every `model_spec: ModelSpec` annotation downstream + reads as an illegal `type`-valued annotation. + """ + + def wrap(cls: type[T]) -> type[T]: + cls.__init__ = beartype(conf=conf)(cls.__init__) # ty: ignore[invalid-assignment] + return cls + + return wrap + + +# Construction of the four user-facing model-spec dataclasses. +MODEL_SPEC_CONF = _conf(ModelSpecInitializationError) + +# Construction of CHSEstimationOptions, AFEstimationOptions, +# AMNEstimationOptions. +OPTIONS_CONF = _conf(OptionsInitializationError) + +# `get_maximization_inputs`, `get_individual_states`, `estimate_af`, +# `estimate_amn`, `get_af_posterior_states`, +# `get_amn_posterior_states`. +ESTIMATION_CONF = _conf(EstimationCallError) + +# `compute_af_standard_errors`, `compute_amn_standard_errors`. +INFERENCE_CONF = _conf(InferenceCallError) + +# `simulate_dataset`, `simulate_policy_effect`. +SIMULATION_CONF = _conf(SimulationCallError) + +# Diagnostics + visualisation entry points. +DIAGNOSTICS_CONF = _conf(DiagnosticsCallError) diff --git a/src/skillmodels/af/__init__.py b/src/skillmodels/af/__init__.py new file mode 100644 index 00000000..319ff8a9 --- /dev/null +++ b/src/skillmodels/af/__init__.py @@ -0,0 +1,23 @@ +"""Antweiler-Freyberger estimator for latent factor models. + +Iterative period-by-period MLE with Halton quadrature for numerical +integration, following Antweiler and Freyberger (2025). +""" + +from skillmodels.af.estimate import estimate_af +from skillmodels.af.inference import ( + AFInferenceResult, + compute_af_standard_errors, +) +from skillmodels.af.posterior_states import get_af_posterior_states +from skillmodels.af.types import AFEstimationOptions, AFEstimationResult, AFPeriodResult + +__all__ = [ + "AFEstimationOptions", + "AFEstimationResult", + "AFInferenceResult", + "AFPeriodResult", + "compute_af_standard_errors", + "estimate_af", + "get_af_posterior_states", +] diff --git a/src/skillmodels/af/batching.py b/src/skillmodels/af/batching.py new file mode 100644 index 00000000..72070cdf --- /dev/null +++ b/src/skillmodels/af/batching.py @@ -0,0 +1,100 @@ +"""Auto-sizing helpers for the AF likelihood's memory-aware batching. + +The AF likelihood replaces the outermost ``jax.vmap`` over observations +with ``jax.lax.map`` when ``n_obs_per_batch`` is smaller than ``n_obs``. +This module provides a simple heuristic that picks an ``n_obs_per_batch`` +from a target-bytes budget, mirroring pylcm's approach (see +``pylcm/src/lcm/simulation/initial_conditions.py:547-560``). + +The heuristic is intentionally crude: it multiplies the per-observation +Halton grid footprint by a safety factor and divides a budget (256 MB by +default, overridable via the ``SKILLMODELS_AF_TARGET_BATCH_BYTES`` +environment variable) by that product. No GPU-specific probing is done; +users who need tighter control can set ``n_obs_per_batch`` explicitly on +``AFEstimationOptions``. +""" + +import logging +import os + +_DEFAULT_TARGET_BATCH_BYTES = 2**28 # 256 MB +_ENV_VAR_TARGET = "SKILLMODELS_AF_TARGET_BATCH_BYTES" +_BYTES_PER_FLOAT64 = 8 + +# Empirical multiplier reflecting that a single observation's forward + +# backward tape at full state/shock/inv_shock resolution retains several +# copies of the integrand footprint. This sized conservatively high: a +# smaller batch is always safe, a larger batch can OOM. +_SAFETY_FACTOR = 16 + +logger = logging.getLogger(__name__) + + +def target_batch_bytes() -> int: + """Return the bytes budget per observation batch. + + Honours ``SKILLMODELS_AF_TARGET_BATCH_BYTES`` when set to a positive + integer, otherwise returns the default 256 MB budget. + """ + override = os.environ.get(_ENV_VAR_TARGET) + if override is None: + return _DEFAULT_TARGET_BATCH_BYTES + try: + parsed = int(override) + except ValueError: + logger.warning( + "Ignoring %s=%r: not a valid integer.", + _ENV_VAR_TARGET, + override, + ) + return _DEFAULT_TARGET_BATCH_BYTES + if parsed <= 0: + logger.warning("Ignoring %s=%r: must be positive.", _ENV_VAR_TARGET, override) + return _DEFAULT_TARGET_BATCH_BYTES + return parsed + + +def auto_n_obs_per_batch( + *, + n_obs: int, + n_halton_points: int, + n_halton_points_shock: int, # noqa: ARG001 + n_latent: int, + n_endogenous: int, + target_bytes: int | None = None, +) -> int: + """Pick ``n_obs_per_batch`` from a target-bytes budget. + + The AF transition-period likelihood forms a joint Halton draw of + size ``(n_halton_points, 2 * n_latent + n_endogenous)`` rather than + an outer product of per-axis grids, so per-observation memory is + linear in ``n_halton_points``. The per-observation footprint is + estimated as + + ``n_halton_points * (n_latent + n_endogenous + 1) * 8 * SAFETY_FACTOR``. + + ``n_halton_points_shock`` is retained in the signature for API + compatibility with the earlier per-axis layout but is unused now + that draws are joint. + + Args: + n_obs: Total number of observations. + n_halton_points: Halton grid size (joint dimension count unused here). + n_halton_points_shock: Legacy shock Halton count, ignored. + n_latent: Latent factor count. + n_endogenous: Endogenous (investment) factor count. + target_bytes: Budget per batch. Defaults to `target_batch_bytes()`. + + Return: + A positive integer no larger than ``n_obs``. + """ + budget = target_bytes if target_bytes is not None else target_batch_bytes() + per_obs_bytes = ( + n_halton_points + * (n_latent + n_endogenous + 1) + * _BYTES_PER_FLOAT64 + * _SAFETY_FACTOR + ) + per_obs_bytes = max(per_obs_bytes, 1) + batch = max(1, budget // per_obs_bytes) + return min(batch, n_obs) diff --git a/src/skillmodels/af/estimate.py b/src/skillmodels/af/estimate.py new file mode 100644 index 00000000..93d51687 --- /dev/null +++ b/src/skillmodels/af/estimate.py @@ -0,0 +1,530 @@ +"""Main driver for the AF estimation procedure.""" + +from typing import cast + +import jax +import jax.numpy as jnp +import numpy as np +import optimagic as om +import pandas as pd +from beartype import beartype +from jax import Array + +from skillmodels._beartype_conf import ESTIMATION_CONF +from skillmodels.af.initial_period import estimate_initial_period +from skillmodels.af.params import get_measurements_per_factor +from skillmodels.af.step_layout import ( + HistoricalParams, + fail_if_spearman_unsupported_on_adapter, +) +from skillmodels.af.transition_period import estimate_transition_period +from skillmodels.af.types import ( + AFEstimationOptions, + AFEstimationResult, + AFPeriodResult, + ConditionalDistribution, +) +from skillmodels.af.validate import ( + fail_if_unsupported_kappa_params, + validate_af_model, +) +from skillmodels.amn.estimate import estimate_amn +from skillmodels.common.model_spec import ModelSpec +from skillmodels.common.process_model import process_model + + +@beartype(conf=ESTIMATION_CONF) +def estimate_af( + model_spec: ModelSpec, + data: pd.DataFrame, + options: AFEstimationOptions | None = None, + start_params: pd.DataFrame | None = None, + fixed_params: pd.DataFrame | None = None, + constraints: list[om.constraints.Constraint] | None = None, +) -> AFEstimationResult: + """Estimate a latent factor model using the Antweiler-Freyberger method. + + Sequential period-by-period MLE with Halton quadrature for numerical + integration, following Antweiler and Freyberger (2025). + + The procedure estimates one period at a time: + - Step 0: Fit initial distribution and measurement params for period 0 + - Step t (t >= 1): Estimate transition and measurement params using the + estimated distribution from previous periods + + With observed factors, the Step-0 objective is the JOINT likelihood of the + period-0 latent measurements and the observed factors (a single Gaussian + mixture over both) -- a deliberate extension that also models the marginal of + the observed factors, not the paper's conditional likelihood given observed + factors. It coincides with the conditional estimand when that joint mixture is + correctly specified (see `af.likelihood.af_loglike_initial` for the estimand + and its assumption). + + Args: + model_spec: Model specification (same as for CHS estimation). + data: Dataset in long format with MultiIndex (id, period). + options: AF-specific estimation options. If None, uses defaults. + start_params: Optional starting parameter values. If provided, any + matching index entries override the heuristic defaults. Uses the + same 4-level MultiIndex as CHS params (category, period, name1, + name2). Unmatched entries keep their heuristic values. + fixed_params: Optional DataFrame with a "value" column pinning + specified parameters to fixed values. Bounds are clamped equal + to the value so the optimizer excludes them. Used, e.g., to pin + time-invariant latent factors to identity transitions with zero + shocks (same convention as CHS augmented periods). + constraints: Optional list of optimagic Constraint objects. Only + `om.EqualityConstraint` entries that select via + `skillmodels.common.constraints.select_by_loc` are honoured. + Two regimes: + * **Cross-period**: members straddle multiple AF steps. Once + any member is estimated in an earlier step, every other + member (in not-yet-estimated periods) is pinned to that + value via `fixed_params`. + * **Within-step**: all members lie in the same step's + params index (e.g. `investment_sds` at period t-1 and + `meas_sds` at period t both live in step t). The constraint + is forwarded verbatim to that step's `om.minimize` so the + optimizer enforces equality during fitting. + Other constraint types are ignored (AF's per-period MLE + handles model-implied within-period constraints internally). + + Return: + AFEstimationResult with per-period results and combined parameters. + + Scope: + The investment equation is supported, but production shocks are + assumed independent of investment shocks (kappa_t = 0 in the + control-function form eta_theta,t = kappa_t*eta_I,t + eps_C,t). + Endogenous investment (kappa_t != 0) is not implemented; passing + parameters in a "kappa"/"kappa_t" category raises + NotImplementedError. + + """ + jax.config.update("jax_enable_x64", val=True) + + if options is None: + options = AFEstimationOptions() + af_options = options + + _validate_af_inputs(model_spec, fixed_params, constraints, start_params, af_options) + processed_model = process_model(model_spec) + + # If AMN-based starts are requested, run the full AMN three-stage + # estimator upfront and overlay its parameter estimates onto the + # caller-supplied `start_params` (user values win on overlap). + # After this the per-period MLE proceeds with `start_params_strategy + # = "constant"` internally so the within-period Spearman pre-pass is + # skipped (AMN's values are already in the optimizer's starting + # neighbourhood). + if af_options.start_params_strategy == "amn": + amn_result = estimate_amn( + model_spec=model_spec, data=data, for_start_values=True + ) + amn_start = amn_result.params[["value"]] + if start_params is not None: + user_idx = start_params.index + amn_start = amn_start.drop( + index=amn_start.index.intersection(user_idx), + errors="ignore", + ) + start_params = pd.concat([amn_start, start_params]).sort_index() + else: + start_params = amn_start + af_options = AFEstimationOptions( + n_halton_points=af_options.n_halton_points, + n_halton_points_shock=af_options.n_halton_points_shock, + optimizer_algorithm=af_options.optimizer_algorithm, + optimizer_options=dict(af_options.optimizer_options), + two_stage=af_options.two_stage, + coarse_fraction=af_options.coarse_fraction, + stability_floor=af_options.stability_floor, + n_obs_per_batch=af_options.n_obs_per_batch, + start_params_strategy="constant", + keep_conditional_distributions=(af_options.keep_conditional_distributions), + n_halton_points_posterior_summary=( + af_options.n_halton_points_posterior_summary + ), + ) + + # Extract data arrays per period + n_periods = processed_model.dimensions.n_periods + factors = processed_model.labels.latent_factors + controls_names = processed_model.labels.controls + observed_factors = processed_model.labels.observed_factors + + # Identify endogenous (investment) factors + endog_info = processed_model.endogenous_factors_info + endogenous_factors = tuple( + f + for f in factors + if f in endog_info.factor_info and endog_info.factor_info[f].is_endogenous + ) + state_factors = tuple(f for f in factors if f not in endogenous_factors) + + # Align the full per-observation payload to one ID order on the adapter path, so the + # mixed-calendar measurement rows pair with the right individual's controls and + # latent payload (and reject an unbalanced panel that AF cannot positionally align). + data = _maybe_align_adapter_panel( + data, n_periods, model_spec, endogenous_factors, state_factors + ) + + period_data = _extract_period_data( + data, + n_periods, + factors, + controls_names, + model_spec, + observed_factors=observed_factors, + ) + + frames_by_period = _frames_by_period_from_data(data, n_periods) + + equality_groups = _extract_equality_groups(constraints) + step_constraints = constraints + + # Step 0: Initial period + period_0_result, cond_dist = estimate_initial_period( + model_spec=model_spec, + processed_model=processed_model, + measurements=period_data[0]["measurements"], + controls=period_data[0]["controls"], + af_options=af_options, + state_factors=state_factors, + start_params=start_params, + fixed_params=fixed_params, + observed_factors=observed_factors, + observed_factor_values=period_data[0].get("observed_factors"), + user_constraints=step_constraints, + ) + + period_results: list[AFPeriodResult] = [period_0_result] + conditional_dists: list[ConditionalDistribution] = [cond_dist] + fixed_params = _propagate_equality_groups( + period_results=period_results, + fixed_params=fixed_params, + equality_groups=equality_groups, + ) + + # Steps 1..T-1: Transition periods + for t in range(1, n_periods): + measurements_pt = get_measurements_per_factor(model_spec.factors, period=t) + if not measurements_pt: + break + + prev_period_params = period_results[-1].params + # The cumulative registry feeds the calendar adapter's fixed importance + # block (source skills + static-persistent period-0 rows). Build it whenever + # the layout path is active (reconstructed investment or static factors). + needs_historical = any( + (spec.is_endogenous and not spec.has_initial_distribution) + or spec.af_state_role == "static_persistent" + for spec in model_spec.factors.values() + ) + historical = ( + HistoricalParams.from_param_frames([r.params for r in period_results]) + if needs_historical + else None + ) + + period_t_result, cond_dist = estimate_transition_period( + period=t, + model_spec=model_spec, + processed_model=processed_model, + measurements=period_data[t]["measurements"], + controls=period_data[t]["controls"], + prev_measurements=period_data[t - 1]["measurements"], + prev_controls=period_data[t - 1]["controls"], + prev_period_params=prev_period_params, + prev_distribution=cond_dist, + frames_by_period=frames_by_period, + historical=historical, + af_options=af_options, + endogenous_factors=endogenous_factors, + observed_factors=observed_factors, + observed_factor_data=period_data.get(t - 1, {}).get( + "observed_factors", None + ), + start_params=start_params, + fixed_params=fixed_params, + user_constraints=step_constraints, + ) + period_results.append(period_t_result) + conditional_dists.append(cond_dist) + fixed_params = _propagate_equality_groups( + period_results=period_results, + fixed_params=fixed_params, + equality_groups=equality_groups, + ) + + # Combine parameters from all periods + all_params = pd.concat([r.params for r in period_results]) + + # Return arrays on-device so a subsequent call to `estimate_af` can + # reuse the JAX/XLA compilation cache (otherwise every sim in a + # sweep recompiles every per-period likelihood + gradient). + # Callers that need host residency (pickling, plotting, sending + # across processes) should call `result.to_numpy()`, which drops + # `samples_per_component` and clears caches as a side effect. + if af_options.keep_conditional_distributions: + conditional_dists_out = tuple(conditional_dists) + else: + conditional_dists_out = () + + period_means = tuple(float(r.loglikelihood) for r in period_results) + return AFEstimationResult( + period_results=tuple(period_results), + params=all_params, + model_spec=model_spec, + conditional_distributions=conditional_dists_out, + success=all(r.success for r in period_results), + loglikelihood=float(sum(period_means)), + sequential_criterion=float(sum(period_means)), + period_mean_criteria=period_means, + ) + + +def _frames_by_period_from_data( + data: pd.DataFrame, n_periods: int +) -> dict[int, pd.DataFrame]: + """Build per-period individual-ID-indexed frames for the calendar adapter. + + The adapter pairs each individual's destination-skill and source-investment rows by + ID across periods, so the frames are kept ID-indexed rather than positionally + concatenated. Level 1 is the period level (level 0 is the individual ID). + """ + available_periods = set(data.index.get_level_values(1)) + return { + p: cast("pd.DataFrame", data.xs(p, level=1)) + for p in range(n_periods) + if p in available_periods + } + + +def _align_adapter_panel(data: pd.DataFrame, n_periods: int) -> pd.DataFrame: + """Canonicalise a balanced panel to one ID-sorted order for the adapter path. + + The calendar adapter sources mixed-calendar measurements on a sorted individual-ID + intersection, while controls, observed factors, the period-0 conditional + distribution, and the chain-link payloads are consumed positionally in input-row + order. Sorting by `(id, period)` puts every per-observation array in the same ID + order so the measurement row for an individual is paired with that same + individual's controls and latent payload. + + AF aligns periods positionally, so the panel must be balanced: every individual + must appear in every period. Raise otherwise. + """ + period_level = str(data.index.names[1]) + period_values = data.index.get_level_values(period_level) + present = [p for p in range(n_periods) if bool((period_values == p).any())] + id_sets = {p: set(data.xs(p, level=period_level).index) for p in present} + reference = id_sets[present[0]] + for p in present[1:]: + if id_sets[p] != reference: + diff = sorted(reference.symmetric_difference(id_sets[p])) + msg = ( + "AF calendar adapter requires a balanced panel: the individual set in " + f"period {p} differs from period {present[0]} (e.g. {diff[:5]}). " + "Provide every individual in every period." + ) + raise ValueError(msg) + return data.sort_index() + + +def _validate_af_inputs( + model_spec: ModelSpec, + fixed_params: pd.DataFrame | None, + constraints: list[om.constraints.Constraint] | None, + start_params: pd.DataFrame | None, + af_options: AFEstimationOptions, +) -> None: + """Reject unsupported AF input combinations before any fitting begins.""" + fail_if_spearman_unsupported_on_adapter( + model_spec, af_options.start_params_strategy + ) + validate_af_model(model_spec, fixed_params, constraints) + fail_if_unsupported_kappa_params(start_params, fixed_params, constraints) + + +def _maybe_align_adapter_panel( + data: pd.DataFrame, + n_periods: int, + model_spec: ModelSpec, + endogenous_factors: tuple[str, ...], + state_factors: tuple[str, ...], +) -> pd.DataFrame: + """Canonicalise the panel when the source/destination calendar adapter is active. + + The adapter path is taken for a reconstructed endogenous factor + (`has_initial_distribution=False`) or any static-persistent state factor. Plain AF + models are returned unchanged. + """ + reconstructed_endog = any( + not model_spec.factors[f].has_initial_distribution for f in endogenous_factors + ) + uses_layout = reconstructed_endog or any( + model_spec.factors[f].af_state_role == "static_persistent" + for f in state_factors + ) + return _align_adapter_panel(data, n_periods) if uses_layout else data + + +def _extract_period_data( + data: pd.DataFrame, + n_periods: int, + _factors: tuple[str, ...], + controls_names: tuple[str, ...], + model_spec: ModelSpec, + observed_factors: tuple[str, ...] = (), +) -> dict[int, dict[str, Array]]: + """Extract measurement, control, and observed factor arrays per period. + + Return: + Dict mapping period -> {"measurements": Array, "controls": Array, + "observed_factors": Array (if any)}. + + """ + period_data: dict[int, dict[str, Array]] = {} + + idx_names = data.index.names + period_col = str(idx_names[1]) + + for t in range(n_periods): + measurements_pt = get_measurements_per_factor(model_spec.factors, period=t) + if not measurements_pt: + continue + + all_measures: list[str] = [] + seen: set[str] = set() + for measures in measurements_pt.values(): + for m in measures: + if m not in seen: + seen.add(m) + all_measures.append(m) + + period_mask = data.index.get_level_values(period_col) == t + period_df = data.loc[period_mask] + + meas_cols = [c for c in all_measures if c in period_df.columns] + meas_array = jnp.array( + period_df[meas_cols].to_numpy(dtype=np.float64, na_value=np.nan), + ) + + ctrl_arrays = [] + for ctrl in controls_names: + if ctrl == "constant": + ctrl_arrays.append(np.ones(len(period_df))) + elif ctrl in period_df.columns: + ctrl_arrays.append(period_df[ctrl].to_numpy(dtype=np.float64)) + else: + ctrl_arrays.append(np.zeros(len(period_df))) + ctrl_array = jnp.array(np.column_stack(ctrl_arrays)) + + entry: dict[str, Array] = { + "measurements": meas_array, + "controls": ctrl_array, + } + + if observed_factors: + entry["observed_factors"] = _extract_observed_factors( + period_df, observed_factors + ) + + period_data[t] = entry + + return period_data + + +def _extract_observed_factors( + period_df: pd.DataFrame, + observed_factors: tuple[str, ...], +) -> Array: + """Extract observed factor values from a period's DataFrame.""" + obs_arrays = [ + period_df[of].to_numpy(dtype=np.float64) + if of in period_df.columns + else np.zeros(len(period_df)) + for of in observed_factors + ] + return jnp.array(np.column_stack(obs_arrays)) + + +def _extract_equality_groups( + constraints: list[om.constraints.Constraint] | None, +) -> list[pd.MultiIndex]: + """Pull cross-period equality groups out of an optimagic constraints list. + + Honours `om.EqualityConstraint` instances whose selector is built via + `functools.partial(skillmodels.common.constraints.select_by_loc, loc=...)`. + The `loc` keyword carries the `pd.MultiIndex` of params that must be + equal — those are the equality groups returned here. + """ + if not constraints: + return [] + groups: list[pd.MultiIndex] = [] + for c in constraints: + if not isinstance(c, om.EqualityConstraint): + continue + selector = c.selector + keywords = getattr(selector, "keywords", None) + if not keywords or "loc" not in keywords: + continue + loc = keywords["loc"] + if isinstance(loc, pd.MultiIndex) and len(loc) > 1: + groups.append(loc) + return groups + + +def _propagate_equality_groups( + *, + period_results: list[AFPeriodResult], + fixed_params: pd.DataFrame | None, + equality_groups: list[pd.MultiIndex], +) -> pd.DataFrame | None: + """Propagate just-estimated values to all members of cross-period equality groups. + + For each equality group: if any member is in the union of + `period_results[*].params`, pin every other member of the group + (that is not already pinned by `fixed_params`) to that member's + estimated value via additions to `fixed_params`. Subsequent + periods' MLEs see those entries as fixed, enforcing equality + across the chain. + """ + if not equality_groups: + return fixed_params + + estimated = pd.concat([r.params for r in period_results]) + if "value" in estimated.columns: + estimated_series = estimated["value"] + else: + estimated_series = estimated.iloc[:, 0] + + if fixed_params is None or len(fixed_params) == 0: + index_names = ["category", "period", "name1", "name2"] + running = pd.DataFrame( + {"value": []}, + index=pd.MultiIndex.from_tuples([], names=index_names), + ) + else: + running = fixed_params.copy() + + new_locs: list[tuple] = [] + new_values: list[float] = [] + for group in equality_groups: + in_estimated = [loc for loc in group if loc in estimated_series.index] + if not in_estimated: + continue + anchor_value = float(estimated_series.loc[in_estimated[0]]) + for loc in group: + if loc in running.index: + continue + new_locs.append(loc) + new_values.append(anchor_value) + if not new_locs: + return running + + addition = pd.DataFrame( + {"value": new_values}, + index=pd.MultiIndex.from_tuples(new_locs, names=running.index.names), + ) + return pd.concat([running, addition]) diff --git a/src/skillmodels/af/halton.py b/src/skillmodels/af/halton.py new file mode 100644 index 00000000..bbd77dd4 --- /dev/null +++ b/src/skillmodels/af/halton.py @@ -0,0 +1,92 @@ +"""Halton quasi-random sequence generation for numerical quadrature.""" + +import jax.numpy as jnp +import numpy as np +from jax import Array +from scipy.stats import qmc + + +def create_halton_nodes_and_weights( + n_points: int, + n_dim: int, + *, + seed: int = 0, +) -> tuple[Array, Array]: + """Create Halton quadrature nodes transformed to standard normal. + + Generate a low-discrepancy Halton sequence in [0, 1]^d, then transform + to standard normal quantiles via the inverse CDF. Weights are uniform + (1/n_points) since the Halton sequence provides quasi-uniform coverage. + + Args: + n_points: Number of quadrature points. + n_dim: Dimensionality of the sequence. + seed: Seed for scrambled Halton sequence (for reproducibility). + + Return: + Tuple of (nodes, weights) where: + - nodes: shape (n_points, n_dim), standard normal quantiles + - weights: shape (n_points,), uniform weights summing to 1 + + """ + sampler = qmc.Halton(d=n_dim, scramble=True, seed=seed) + # Generate uniform [0, 1] samples, skip first point (often degenerate) + uniform_samples = sampler.random(n=n_points + 1)[1:] + + # Clip to avoid infinite values at 0 and 1 + uniform_samples = np.clip(uniform_samples, 1e-10, 1 - 1e-10) + + # Transform to standard normal via inverse CDF + from scipy.stats import norm # noqa: PLC0415 + + normal_nodes = norm.ppf(uniform_samples) + + nodes = jnp.array(normal_nodes, dtype=jnp.float64) + weights = jnp.ones(n_points, dtype=jnp.float64) / n_points + + return nodes, weights + + +def transform_nodes_to_conditional( + standard_nodes: Array, + mean: Array, + chol_cov: Array, +) -> Array: + """Transform standard normal nodes to a conditional distribution. + + Apply the affine transformation: x = mean + chol_cov @ z where z are + standard normal nodes. + + Args: + standard_nodes: Shape (n_points, n_dim), standard normal quantiles. + mean: Shape (n_dim,), mean of the target distribution. + chol_cov: Shape (n_dim, n_dim), lower Cholesky of the target covariance. + + Return: + Transformed nodes, shape (n_points, n_dim). + + """ + return mean + standard_nodes @ chol_cov.T + + +def create_shock_nodes_and_weights( + n_points: int, + n_shocks: int, + *, + seed: int = 42, +) -> tuple[Array, Array]: + """Create quadrature nodes for production shocks. + + Separate Halton sequence for the shock integration dimension, using + a different seed to avoid correlation with the state nodes. + + Args: + n_points: Number of quadrature points per shock dimension. + n_shocks: Number of independent shock dimensions. + seed: Seed for the Halton sequence. + + Return: + Tuple of (nodes, weights) with nodes shape (n_points, n_shocks). + + """ + return create_halton_nodes_and_weights(n_points, n_shocks, seed=seed) diff --git a/src/skillmodels/af/inference.py b/src/skillmodels/af/inference.py new file mode 100644 index 00000000..7b2ec7f5 --- /dev/null +++ b/src/skillmodels/af/inference.py @@ -0,0 +1,1142 @@ +"""Score-bootstrap standard errors for the AF estimator. + +Implements the score bootstrap procedure prescribed in Antweiler & +Freyberger (2025) §4.2 (inspired by Armstrong, Bertanha & Hong 2014). +The AF estimator is a sequential multi-step MLE; its asymptotic variance +includes terms that propagate the estimation uncertainty of earlier +steps, which makes the analytical sandwich + + V = A^{-1} Omega A^{-T} / n + +incorrect when computed without those cross-step terms. AF §4.2 puts +this directly: + + "this asymptotic variance is incorrect because it ignores the + estimation errors of tau_{t-1}, ..., tau_1, which is the second + term in the expansion above. To account for those, we would have + to calculate ... which is very difficult because the likelihood is + (partly) simulated and not available in closed form. To avoid + these calculations, we use a score bootstrap procedure inspired by + Armstrong, Bertanha, and Hong (2014)." + +This module exposes a single inference entry point, +:func:`compute_af_standard_errors`, which implements that score +bootstrap. It avoids re-estimating the model B times: a single +per-observation influence matrix is computed once at the optimum (each +period block is a one-step Newton update of the period's full-chain +score that also carries the earlier periods' influence via the +cross-period blocks of the full-chain Hessian), then for each of +``n_boot`` replicates we draw ONE shared caseid index, resample the rows +of that influence matrix with it, and shift the estimate by the negated +resample mean. The shared index makes the cross-period covariances in +the bootstrap distribution non-zero and correct. The empirical standard +deviation of the resulting parameter draws is the bootstrap standard +error. + +""" + +from collections.abc import Callable, Mapping +from dataclasses import dataclass, field +from types import MappingProxyType +from typing import Any, NamedTuple + +import jax +import jax.numpy as jnp +import numpy as np +import pandas as pd +from beartype import beartype +from jax import Array + +from skillmodels._beartype_conf import INFERENCE_CONF +from skillmodels.af.batching import auto_n_obs_per_batch +from skillmodels.af.estimate import _extract_period_data +from skillmodels.af.halton import create_halton_nodes_and_weights +from skillmodels.af.initial_period import ( + _build_loading_mask, + _get_ordered_measures, +) +from skillmodels.af.likelihood import ( + _parse_initial_params, + _parse_transition_params, + af_per_obs_loglike_initial, + af_per_obs_loglike_transition, +) +from skillmodels.af.params import ( + build_optimagic_inputs, + get_measurements_per_factor, +) +from skillmodels.af.step_layout import fail_if_calendar_adapter_unsupported +from skillmodels.af.transition_period import ( + _extract_prev_measurement_params, + _get_raw_transition_functions, + _prepare_transition_inputs, +) +from skillmodels.af.types import ( + AFEstimationOptions, + AFEstimationResult, + ChainLink, + ConditionalDistribution, +) +from skillmodels.common.constraints import FixedConstraintWithValue +from skillmodels.common.model_spec import ModelSpec +from skillmodels.common.process_model import process_model +from skillmodels.common.types import ProcessedModel + + +@dataclass(frozen=True) +class AFInferenceResult: + """Score-bootstrap inference result for the AF estimator. + + See :func:`compute_af_standard_errors` for the procedure (AF 2025 + §4.2 / Armstrong-Bertanha-Hong 2014). + """ + + standard_errors: pd.Series + """Bootstrap standard errors indexed by ``all_params.index``. + + SEs are the empirical standard deviation across bootstrap + replicates of each parameter's one-step Newton shift from the + point estimate. Fixed-parameter and constrained-direction entries + are reported as zero (or NaN where the period's information matrix + is singular on that direction). + """ + + vcov: pd.DataFrame + """Variance-covariance matrix, rows and columns share + ``all_params.index``. Computed from + ``replicate_params.cov(ddof=1)`` so SEs and vcov are internally + consistent. + """ + + replicate_params: pd.DataFrame + """``(n_boot, n_params)`` DataFrame of bootstrap parameter draws. + + Each row is ``theta_hat + delta_b`` where ``delta_b = -A^{-1} * + bar_g_b``, ``bar_g_b`` is the mean per-cluster score in bootstrap + replicate ``b``, and ``A`` is the period's information matrix at + the optimum. Columns share ``all_params.index``; pinned-parameter + columns are constant at the point estimate. + """ + + n_clusters: int + """Number of caseids resampled per replicate (= number of unique + caseids in the data). + """ + + n_boot: int + """Number of bootstrap replicates drawn.""" + + +@beartype(conf=INFERENCE_CONF) +def compute_af_standard_errors( + result: AFEstimationResult, + data: pd.DataFrame, + af_options: AFEstimationOptions | None = None, + *, + n_boot: int = 10_000, + seed: int = 0, +) -> AFInferenceResult: + """Score-resampling cluster bootstrap for the AF estimator. + + Implements Antweiler & Freyberger (2025) §4.2 (Armstrong-Bertanha-Hong + score bootstrap) in its sequential-estimator INFLUENCE-FUNCTION form. + A single per-observation influence matrix ``PSI`` (shape + ``(n_obs, P_free)``) is computed once at the optimum by + :func:`_build_influence_matrix`: each period block is a one-step + Newton update of the period's full-chain score that ALSO carries the + earlier periods' influence via the cross-period blocks of the + full-chain Hessian, + + psi_t,i = A_t^{-1}(s_t,i + sum_{r= 1. The influence-function score + bootstrap captures this propagation. + + For ``n_boot=10000`` and ``n_caseids=1500`` this typically takes + seconds rather than days (no re-estimation per replicate). + + Args: + result: Output of ``estimate_af``. + data: The dataset used for estimation; the caseid level of its + MultiIndex defines the bootstrap clusters. + af_options: Options used at estimation time. + n_boot: Number of bootstrap replicates. + seed: Seed for the resampling RNG. + + Return: + :class:`AFInferenceResult` with bootstrap SEs, vcov computed + from the replicate distribution, and the full + replicate-by-parameter DataFrame. + + """ + fail_if_calendar_adapter_unsupported( + result.model_spec, "AF standard-error inference" + ) + if af_options is None: + af_options = AFEstimationOptions() + + jax.config.update("jax_enable_x64", val=True) + + model_spec = result.model_spec + processed_model = process_model(model_spec) + + n_periods = processed_model.dimensions.n_periods + latent_factors = processed_model.labels.latent_factors + controls_names = processed_model.labels.controls + observed_factors = processed_model.labels.observed_factors + + endog_info = processed_model.endogenous_factors_info + endogenous_factors = tuple( + f + for f in latent_factors + if f in endog_info.factor_info and endog_info.factor_info[f].is_endogenous + ) + + period_data = _extract_period_data( + data, + n_periods, + latent_factors, + controls_names, + model_spec, + observed_factors=observed_factors, + ) + + metas = _build_period_metas( + result=result, + period_data=period_data, + model_spec=model_spec, + processed_model=processed_model, + af_options=af_options, + observed_factors=observed_factors, + endogenous_factors=endogenous_factors, + ) + + rng = np.random.default_rng(seed) + all_params = result.params + replicate_values = np.tile(all_params["value"].to_numpy()[None, :], (n_boot, 1)) + + pos_lookup = {tuple(loc): i for i, loc in enumerate(all_params.index)} + + n_clusters = int(metas[0].loglike_kwargs["measurements"].shape[0]) + + # Per-obs influence matrix PSI (n_obs, P_free), computed ONCE at the + # optimum. PSI propagates earlier-period estimation uncertainty into + # each period's influence via the cross-period blocks of the full-chain + # Hessian (AF §4.2). The bootstrap then resamples caseid ROWS of PSI + # with a single SHARED index per replicate, so cross-period covariances + # in the resulting vcov are non-zero and correct. + psi, free_global_cols = _build_influence_matrix(result, metas, pos_lookup) + psi = np.asarray(psi) + free_global_cols_arr = np.asarray(free_global_cols, dtype=np.int64) + + idx = rng.integers(0, n_clusters, size=(n_boot, n_clusters)) + delta = -psi[idx].mean(axis=1) # (n_boot, P_free); one-step shift + replicate_values[:, free_global_cols_arr] += delta + + replicate_params = pd.DataFrame(replicate_values, columns=all_params.index) + standard_errors = pd.Series( + replicate_params.std(axis=0, ddof=1).to_numpy(), + index=all_params.index, + name="standard_error", + ) + # Variance-covariance from the replicate distribution. Pinned-parameter + # rows/columns are zero (constant column → zero variance/covariance). + vcov_values = replicate_params.cov(ddof=1).to_numpy() + vcov = pd.DataFrame( + vcov_values, + index=all_params.index, + columns=all_params.index, + ) + + return AFInferenceResult( + standard_errors=standard_errors, + vcov=vcov, + replicate_params=replicate_params, + n_clusters=n_clusters, + n_boot=n_boot, + ) + + +# --------------------------------------------------------------------------- +# Period metadata: all the static info we need for both sandwich modes. +# --------------------------------------------------------------------------- + + +@dataclass(frozen=True) +class _PeriodMeta: + """Precomputed static metadata for one period's likelihood. + + Pure-Python dataclass; JAX arrays live in ``loglike_kwargs`` and + ``propagation``. + """ + + period: int + is_initial: bool + slice_start: int + slice_stop: int + params_df: pd.DataFrame + loglike_kwargs: MappingProxyType[str, Any] + """Keyword arguments forwarded to ``af_per_obs_loglike_initial`` (if + ``is_initial``) or ``af_per_obs_loglike_transition`` otherwise. + """ + parse_kwargs: MappingProxyType[str, Any] + """Keyword arguments forwarded to ``_parse_initial_params`` or + ``_parse_transition_params`` respectively. Used by the Phase 2 chain. + """ + n_components: int + n_factors_joint: int + """Joint factor count in the initial mixture (state_latent + observed). + Only meaningful for the initial period; zero otherwise. + """ + n_state: int + """State-factor count (``n_state_latent`` in the initial period; + ``n_state_factors`` in transition periods). + """ + n_endog: int + n_shock: int + n_observed_factors: int + state_factor_indices_in_joint: tuple[int, ...] + """Integer positions within the joint factor vector at which state + factors live (the complement is observed factors). Used to marginalise + the joint cond-dist to its state-factor sub-block. + """ + target_idx_in_joint: tuple[int, ...] = () + """Initial-period only: positions of the *target* state factors (the + ones whose marginal we want carry-over samples for) within + `joint_factors`. Differs from ``state_factor_indices_in_joint`` when + the joint includes an endogenous factor with ``has_initial_distribution=True`` + that should be excluded from the carry-over. + """ + obs_idx_in_joint: tuple[int, ...] = () + """Initial-period only: positions of observed factors within + `joint_factors`. Empty for transition-period metas. + """ + propagation: MappingProxyType[str, Any] = field( + default_factory=lambda: MappingProxyType({}) + ) + """Extra JAX-pure bits for propagation of the conditional distribution + through this period's transition. Only populated for transition + periods. Keys: ``joint_nodes``, ``combined_transition``, + ``obs_factor_values``, ``shock_factor_indices``. + """ + + +def _build_period_metas( + *, + result: AFEstimationResult, + period_data: dict[int, dict[str, Array]], + model_spec: ModelSpec, + processed_model: ProcessedModel, + af_options: AFEstimationOptions, + observed_factors: tuple[str, ...], + endogenous_factors: tuple[str, ...], +) -> tuple[_PeriodMeta, ...]: + """Build per-period metadata objects for both inference modes.""" + metas: list[_PeriodMeta] = [] + offset = 0 + for period_result in result.period_results: + t = period_result.period + params_df = period_result.params + length = len(params_df) + + if t == 0: + meta = _build_initial_period_meta( + period_result_params=params_df, + slice_start=offset, + slice_stop=offset + length, + model_spec=model_spec, + processed_model=processed_model, + af_options=af_options, + data_at_period=period_data[0], + observed_factors=observed_factors, + endogenous_factors=endogenous_factors, + ) + else: + prev_period_params = result.period_results[t - 1].params + prev_cond_dist = result.conditional_distributions[t - 1] + meta = _build_transition_period_meta( + period=t, + period_result_params=params_df, + slice_start=offset, + slice_stop=offset + length, + prev_period_params=prev_period_params, + prev_cond_dist=prev_cond_dist, + model_spec=model_spec, + processed_model=processed_model, + af_options=af_options, + data_at_period=period_data[t], + prev_data_at_period=period_data[t - 1], + endogenous_factors=endogenous_factors, + observed_factors=observed_factors, + ) + metas.append(meta) + offset += length + return tuple(metas) + + +def _build_initial_period_meta( + *, + period_result_params: pd.DataFrame, + slice_start: int, + slice_stop: int, + model_spec: ModelSpec, + processed_model: ProcessedModel, + af_options: AFEstimationOptions, + data_at_period: Mapping[str, Array], + observed_factors: tuple[str, ...], + endogenous_factors: tuple[str, ...] = (), +) -> _PeriodMeta: + factors = processed_model.labels.latent_factors + controls_names = processed_model.labels.controls + n_components = processed_model.dimensions.n_mixtures + + reconstructed_factors = tuple( + f for f in factors if not model_spec.factors[f].has_initial_distribution + ) + state_latent_factors = tuple(f for f in factors if f not in reconstructed_factors) + n_state_latent = len(state_latent_factors) + n_obs_factors = len(observed_factors) + n_joint = n_state_latent + n_obs_factors + state_factor_indices_in_joint = tuple(range(n_state_latent)) + + # Target factors for the carry-over sample = state_latent minus + # endogenous (matches what `estimate_initial_period` does in the + # estimation path). + joint_factors = state_latent_factors + observed_factors + target_factors = tuple( + f for f in state_latent_factors if f not in endogenous_factors + ) + target_idx_in_joint = tuple(joint_factors.index(f) for f in target_factors) + obs_idx_in_joint = tuple(joint_factors.index(f) for f in observed_factors) + n_state_target = len(target_factors) + + measurements_p0 = get_measurements_per_factor(model_spec.factors, period=0) + measurements_p0_filtered = { + f: m for f, m in measurements_p0.items() if f in state_latent_factors + } + all_measures_full = _get_ordered_measures(measurements_p0) + all_measures = _get_ordered_measures(measurements_p0_filtered) + + measurements = data_at_period["measurements"] + if len(all_measures) != len(all_measures_full): + col_indices = jnp.array( + [all_measures_full.index(m) for m in all_measures], dtype=jnp.int32 + ) + measurements = measurements[:, col_indices] + + loading_mask = _build_loading_mask( + all_measures, state_latent_factors, measurements_p0_filtered + ) + + nodes, weights = create_halton_nodes_and_weights( + af_options.n_halton_points, n_state_latent + ) + + obs_values = data_at_period.get( + "observed_factors", + jnp.zeros((int(measurements.shape[0]), 0)), + ) + + n_obs_per_batch = af_options.n_obs_per_batch + if n_obs_per_batch is None: + n_obs_per_batch = auto_n_obs_per_batch( + n_obs=int(measurements.shape[0]), + n_halton_points=af_options.n_halton_points, + n_halton_points_shock=af_options.n_halton_points_shock, + n_latent=n_joint, + n_endogenous=0, + ) + + loglike_kwargs = { + "n_factors": n_joint, + "n_latent_factors": n_state_latent, + "n_mixture_components": n_components, + "n_measures": len(all_measures), + "n_controls": len(controls_names), + "measurements": measurements, + "controls": data_at_period["controls"], + "observed_factor_values": obs_values, + "loading_mask": jnp.array(loading_mask), + "nodes": nodes, + "weights": weights, + "stability_floor": af_options.stability_floor, + "n_obs_per_batch": n_obs_per_batch, + } + + parse_kwargs = { + "n_factors": n_joint, + "n_mixture_components": n_components, + "n_measures": len(all_measures), + "n_controls": len(controls_names), + } + + return _PeriodMeta( + period=0, + is_initial=True, + slice_start=slice_start, + slice_stop=slice_stop, + params_df=period_result_params, + loglike_kwargs=MappingProxyType(loglike_kwargs), + parse_kwargs=MappingProxyType(parse_kwargs), + n_components=n_components, + n_factors_joint=n_joint, + n_state=n_state_target, + n_endog=0, + n_shock=0, + n_observed_factors=n_obs_factors, + state_factor_indices_in_joint=state_factor_indices_in_joint, + target_idx_in_joint=target_idx_in_joint, + obs_idx_in_joint=obs_idx_in_joint, + propagation=MappingProxyType({}), + ) + + +def _build_transition_period_meta( + *, + period: int, + period_result_params: pd.DataFrame, + slice_start: int, + slice_stop: int, + prev_period_params: pd.DataFrame, + prev_cond_dist: ConditionalDistribution, + model_spec: ModelSpec, + processed_model: ProcessedModel, + af_options: AFEstimationOptions, + data_at_period: Mapping[str, Array], + prev_data_at_period: Mapping[str, Array], + endogenous_factors: tuple[str, ...], + observed_factors: tuple[str, ...], +) -> _PeriodMeta: + factors = processed_model.labels.latent_factors + controls_names = processed_model.labels.controls + transition_info = processed_model.transition_info + + state_factors = tuple(f for f in factors if f not in endogenous_factors) + n_state = len(state_factors) + n_endog = len(endogenous_factors) + shock_factors = tuple( + f for f in state_factors if model_spec.factors[f].has_production_shock + ) + n_shock = len(shock_factors) + shock_factor_indices = jnp.array( + [state_factors.index(f) for f in shock_factors], dtype=jnp.int32 + ) + state_factor_indices_in_latent = jnp.array( + [factors.index(f) for f in state_factors], dtype=jnp.int32 + ) + + measurements_pt = get_measurements_per_factor(model_spec.factors, period=period) + all_measures = _get_ordered_measures(measurements_pt) + loading_mask = _build_loading_mask(all_measures, factors, measurements_pt) + + # Match transition_period.py: a single joint Halton at every step + # covers (z_state for theta_0) + (n_chain) prior chain shocks + # (z_inv, z_P) + current step's (z_inv, z_P). + n_chain = period - 1 + z_block = n_shock + n_endog + joint_dim = n_state + n_chain * z_block + z_block + joint_nodes, joint_weights = create_halton_nodes_and_weights( + af_options.n_halton_points, joint_dim, seed=period + ) + + measurements = data_at_period["measurements"] + controls = data_at_period["controls"] + prev_measurements = prev_data_at_period["measurements"] + prev_controls = prev_data_at_period["controls"] + + prev_dist_arrays, total_n_transition_params = _prepare_transition_inputs( + prev_cond_dist, + transition_info, + state_factors, + int(measurements.shape[0]), + ) + + raw_funcs = _get_raw_transition_functions( + model_spec, + state_factors, + all_factors=processed_model.labels.all_factors, + param_names=transition_info.param_names, + ) + param_counts = tuple(len(transition_info.param_names[f]) for f in state_factors) + + def combined_transition(full_states: Array, params: Array) -> Array: + out = jnp.zeros(n_state) + p_idx = 0 + for i in range(n_state): + n_p = param_counts[i] + factor_params = params[p_idx : p_idx + n_p] + out = out.at[i].set(raw_funcs[i](full_states, factor_params)) # noqa: PD008 + p_idx += n_p + return out + + n_inv_eq_params_per = 1 + n_state + len(observed_factors) if n_endog > 0 else 0 + total_n_inv_params = n_endog * n_inv_eq_params_per + + obs_factor_values = prev_data_at_period.get( + "observed_factors", + jnp.zeros((int(measurements.shape[0]), len(observed_factors))), + ) + + chain_links = prev_cond_dist.chain_links + if len(chain_links) == 0: + obs_factor_values_chain = jnp.zeros( + (int(measurements.shape[0]), 0, len(observed_factors)) + ) + else: + obs_factor_values_chain = jnp.stack( + [link.obs_factor_values for link in chain_links], axis=1 + ) + + prev_meas_info = _extract_prev_measurement_params( + prev_period_params, + model_spec, + factors, + period - 1, + ) + + n_obs_per_batch = af_options.n_obs_per_batch + if n_obs_per_batch is None: + n_obs_per_batch = auto_n_obs_per_batch( + n_obs=int(measurements.shape[0]), + n_halton_points=af_options.n_halton_points, + n_halton_points_shock=af_options.n_halton_points_shock, + n_latent=n_state, + n_endogenous=n_endog, + ) + + loglike_kwargs = { + "n_state_factors": n_state, + "n_endogenous_factors": n_endog, + "n_shock_factors": n_shock, + "shock_factor_indices": shock_factor_indices, + "state_factor_indices_in_latent": state_factor_indices_in_latent, + "n_measures": len(all_measures), + "n_controls": len(controls_names), + "measurements": measurements, + "controls": controls, + "loading_mask": jnp.array(loading_mask), + "prev_measurements": prev_measurements, + "prev_controls": prev_controls, + "prev_loading_mask": prev_meas_info["loading_mask"], + "prev_control_params": prev_meas_info["control_params"], + "prev_loadings_flat": prev_meas_info["loadings_flat"], + "prev_meas_sds": prev_meas_info["meas_sds"], + "prev_distribution": prev_dist_arrays, + "chain_links": chain_links, + "obs_factor_values_chain": obs_factor_values_chain, + "joint_nodes": joint_nodes, + "joint_weights": joint_weights, + "transition_func": combined_transition, + "total_n_transition_params": total_n_transition_params, + "total_n_inv_params": total_n_inv_params, + "n_inv_eq_params_per": n_inv_eq_params_per, + "observed_factor_values": obs_factor_values, + "stability_floor": af_options.stability_floor, + "n_obs_per_batch": n_obs_per_batch, + } + + parse_kwargs = { + "n_state_factors": n_state, + "n_endogenous_factors": n_endog, + "n_measures": len(all_measures), + "n_controls": len(controls_names), + "total_n_transition_params": total_n_transition_params, + "total_n_inv_params": total_n_inv_params, + "n_inv_eq_params_per": n_inv_eq_params_per, + "n_shock_factors": n_shock, + } + + # For propagating the cond-dist forward to the next period: marginal + # state grid (same convention as ``_update_conditional_distribution``). + propagation_nodes, propagation_weights = create_halton_nodes_and_weights( + af_options.n_halton_points, n_state + ) + + propagation = { + "state_nodes": propagation_nodes, + "state_weights": propagation_weights, + "combined_transition": combined_transition, + "obs_factor_values": obs_factor_values, + "shock_factor_indices": shock_factor_indices, + } + + return _PeriodMeta( + period=period, + is_initial=False, + slice_start=slice_start, + slice_stop=slice_stop, + params_df=period_result_params, + loglike_kwargs=MappingProxyType(loglike_kwargs), + parse_kwargs=MappingProxyType(parse_kwargs), + n_components=len(prev_cond_dist.components), + n_factors_joint=0, + n_state=n_state, + n_endog=n_endog, + n_shock=n_shock, + n_observed_factors=len(observed_factors), + state_factor_indices_in_joint=tuple(range(n_state)), + propagation=MappingProxyType(propagation), + ) + + +# --------------------------------------------------------------------------- +# Free-parameter bookkeeping. +# --------------------------------------------------------------------------- + + +def _free_positions_for_period( + params_df: pd.DataFrame, +) -> tuple[list[int], list[tuple[Any, ...]]]: + """Return positions and locs of free (unpinned, non-simplex) params.""" + _, fixed_constraints = build_optimagic_inputs(params_df, None) + fixed_locs: set[Any] = set() + for constraint in fixed_constraints: + if isinstance(constraint, FixedConstraintWithValue): + loc = constraint.loc + fixed_locs.add(tuple(loc) if isinstance(loc, tuple) else loc) + + all_locs = list(params_df.index) + positions: list[int] = [] + locs: list[tuple[Any, ...]] = [] + for i, loc in enumerate(all_locs): + loc_t = tuple(loc) + if loc_t in fixed_locs or loc[0] == "mixture_weights": + continue + positions.append(i) + locs.append(loc_t) + return positions, locs + + +# --------------------------------------------------------------------------- +# Block-diagonal sandwich (Phase 1 behaviour). +# --------------------------------------------------------------------------- + + +class _PeriodScoreInfo(NamedTuple): + """Per-period score and information matrices at the optimum. + + Internal carrier used by :func:`compute_af_standard_errors` to feed + the score bootstrap. Not part of the public API. + """ + + period: int + free_param_locs: tuple[tuple[Any, ...], ...] + score_matrix: Array + information_matrix: Array + + +def _compute_block_diagonal_sandwich( + _result: AFEstimationResult, + metas: tuple[_PeriodMeta, ...], +) -> list[_PeriodScoreInfo]: + """Compute per-period score and information matrices for the bootstrap.""" + results: list[_PeriodScoreInfo] = [] + for meta in metas: + per_obs_fn = ( + af_per_obs_loglike_initial + if meta.is_initial + else af_per_obs_loglike_transition + ) + info = _block_diagonal_sandwich_single( + meta=meta, + per_obs_loglike_fn=per_obs_fn, + ) + results.append(info) + return results + + +def _block_diagonal_sandwich_single( + *, + meta: _PeriodMeta, + per_obs_loglike_fn: Callable[..., Array], +) -> _PeriodScoreInfo: + """Compute the per-period score matrix and information matrix at theta_hat. + + These feed the score bootstrap. The information matrix is the + Hessian of the scalar negative-mean log-likelihood; the score + matrix has one row per caseid and one column per free parameter. + """ + positions, locs = _free_positions_for_period(meta.params_df) + free_positions_array = jnp.array(positions, dtype=jnp.int32) + flat_values = jnp.array(meta.params_df["value"].to_numpy()) + kwargs = dict(meta.loglike_kwargs) + + def per_obs_loglike_full(flat_params: Array) -> Array: + return per_obs_loglike_fn(flat_params, **kwargs) + + def neg_mean_loglike_full(flat_params: Array) -> Array: + return -jnp.mean(per_obs_loglike_full(flat_params)) + + jac_full = jax.jacfwd(per_obs_loglike_full)(flat_values) + hess_full = jax.hessian(neg_mean_loglike_full)(flat_values) + + score_matrix = jac_full[:, free_positions_array] + information_matrix = hess_full[free_positions_array][:, free_positions_array] + + return _PeriodScoreInfo( + period=meta.period, + free_param_locs=tuple(locs), + score_matrix=score_matrix, + information_matrix=information_matrix, + ) + + +# --------------------------------------------------------------------------- +# Full cross-period sandwich (Phase 2). +# +# Reconstruct ``prev_distribution`` and ``prev_meas_info`` as JAX-pure +# functions of a single concatenated ``flat_super`` parameter vector, so +# ``jax.jacfwd`` captures the full chain of dependencies. +# --------------------------------------------------------------------------- + + +def _build_initial_state_cond_dist_jax( + flat_params_0: Array, + meta: _PeriodMeta, +) -> tuple[Array, Array, Array, Array]: + """JAX-pure analytical reconstruction of the period-0 conditional payload. + + Mirrors ``initial_period._extract_conditional_distribution``: parse + initial-period params, compute per-component / per-obs Schur-conditional + means and per-component Cholesky factors. Returns the inputs the + transition likelihood needs to rebuild θ_0 from a joint Halton inside + its integrand (no chained-sample materialisation here). + + Return: + Tuple of (cond_means, cond_chols, log_unnorms, mixture_weights): + * cond_means: (n_components, n_obs, n_state) + * cond_chols: (n_components, n_state, n_state) + * log_unnorms: (n_components, n_obs); softmaxes to per-obs Bayes + posterior mixture weights when observed factors are present. + * mixture_weights: (n_components,) prior mixture weights. + """ + parsed = _parse_initial_params( + flat_params_0, + meta.parse_kwargs["n_factors"], + meta.parse_kwargs["n_mixture_components"], + meta.parse_kwargs["n_measures"], + meta.parse_kwargs["n_controls"], + ) + joint_means = parsed["mixture_means"] # (K, n_joint) + joint_chols = parsed["mixture_chol_covs"] # (K, n_joint, n_joint) + mixture_weights = parsed["mixture_weights"] + + obs_values = meta.loglike_kwargs["observed_factor_values"] + n_obs = int(obs_values.shape[0]) + n_obs_factors = meta.n_observed_factors + n_state = meta.n_state + target_idx = jnp.asarray(meta.target_idx_in_joint, dtype=jnp.int32) + + if n_obs_factors == 0: + + def _per_component( + joint_mean: Array, joint_chol: Array + ) -> tuple[Array, Array, Array]: + joint_cov = joint_chol @ joint_chol.T + mu_t = joint_mean[target_idx] + cov_tt = joint_cov[target_idx[:, None], target_idx[None, :]] + sub_chol = jnp.linalg.cholesky(cov_tt + 1e-10 * jnp.eye(n_state)) + cond_mean = jnp.broadcast_to(mu_t[None, :], (n_obs, n_state)) + log_unnorm = jnp.zeros(n_obs) + return cond_mean, sub_chol, log_unnorm + + cond_means, cond_chols, log_unnorms = jax.vmap(_per_component)( + joint_means, joint_chols + ) + log_unnorms = log_unnorms + jnp.log(mixture_weights + 1e-300)[:, None] + else: + obs_idx = jnp.asarray(meta.obs_idx_in_joint, dtype=jnp.int32) + + def _per_component( + joint_mean: Array, joint_chol: Array + ) -> tuple[Array, Array, Array]: + joint_cov = joint_chol @ joint_chol.T + mu_t = joint_mean[target_idx] + mu_y = joint_mean[obs_idx] + cov_tt = joint_cov[target_idx[:, None], target_idx[None, :]] + cov_ty = joint_cov[target_idx[:, None], obs_idx[None, :]] + cov_yy = joint_cov[obs_idx[:, None], obs_idx[None, :]] + chol_yy = jnp.linalg.cholesky(cov_yy) + solve_tt = jax.scipy.linalg.cho_solve((chol_yy, True), cov_ty.T) + cond_cov = cov_tt - cov_ty @ solve_tt + 1e-10 * jnp.eye(n_state) + cond_chol = jnp.linalg.cholesky(cond_cov) + + def _per_obs(y_i: Array) -> tuple[Array, Array]: + alpha = jax.scipy.linalg.cho_solve((chol_yy, True), y_i - mu_y) + cond_mean = mu_t + cov_ty @ alpha + k = y_i.shape[0] + sol = jax.scipy.linalg.solve_triangular(chol_yy, y_i - mu_y, lower=True) + log_marg = ( + -0.5 * k * jnp.log(2 * jnp.pi) + - jnp.sum(jnp.log(jnp.diag(chol_yy))) + - 0.5 * jnp.dot(sol, sol) + ) + return cond_mean, log_marg + + cond_means_per_obs, log_margs = jax.vmap(_per_obs)(obs_values) + return cond_means_per_obs, cond_chol, log_margs + + cond_means, cond_chols, log_marg_y = jax.vmap(_per_component)( + joint_means, joint_chols + ) + log_unnorms = log_marg_y + jnp.log(mixture_weights + 1e-300)[:, None] + + return cond_means, cond_chols, log_unnorms, mixture_weights + + +def _extract_chain_link_jax( + flat_params_t: Array, + meta: _PeriodMeta, +) -> ChainLink: + """JAX-pure construction of a ChainLink from period ``t``'s flat params. + + Mirrors ``transition_period._build_chain_link`` but parses the flat + params directly so the chain link's leaves are differentiable + components of ``flat_super``. Used by the inference sandwich code to + rebuild the chained sample on-demand inside the period-`t` likelihood, + keeping the autodiff DAG intact across periods. + """ + parsed = _parse_transition_params( + flat_params_t, + meta.parse_kwargs["n_state_factors"], + meta.parse_kwargs["n_endogenous_factors"], + meta.parse_kwargs["n_measures"], + meta.parse_kwargs["n_controls"], + meta.parse_kwargs["total_n_transition_params"], + meta.parse_kwargs["total_n_inv_params"], + meta.parse_kwargs["n_inv_eq_params_per"], + n_shock_factors=meta.parse_kwargs["n_shock_factors"], + ) + return ChainLink( + period=meta.period, + transition_func=meta.propagation["combined_transition"], + transition_params=parsed["transition_params"], + shock_sds=parsed["shock_sds"], + shock_factor_indices=meta.propagation["shock_factor_indices"], + inv_eq_params=parsed["inv_eq_params"], + inv_sds=parsed["inv_sds"], + n_inv_eq_params_per=meta.parse_kwargs["n_inv_eq_params_per"], + obs_factor_values=meta.propagation["obs_factor_values"], + ) + + +def _extract_prev_meas_info_jax( + flat_params_prev: Array, + meta: _PeriodMeta, +) -> dict[str, Array]: + """JAX-pure extraction of ``prev_meas_info`` from a period's flat params.""" + if meta.is_initial: + parsed = _parse_initial_params( + flat_params_prev, + meta.parse_kwargs["n_factors"], + meta.parse_kwargs["n_mixture_components"], + meta.parse_kwargs["n_measures"], + meta.parse_kwargs["n_controls"], + ) + return { + "loadings_flat": parsed["loadings"], + "control_params": parsed["control_params"], + "meas_sds": parsed["meas_sds"], + } + parsed = _parse_transition_params( + flat_params_prev, + meta.parse_kwargs["n_state_factors"], + meta.parse_kwargs["n_endogenous_factors"], + meta.parse_kwargs["n_measures"], + meta.parse_kwargs["n_controls"], + meta.parse_kwargs["total_n_transition_params"], + meta.parse_kwargs["total_n_inv_params"], + meta.parse_kwargs["n_inv_eq_params_per"], + n_shock_factors=meta.parse_kwargs["n_shock_factors"], + ) + return { + "loadings_flat": parsed["loadings_flat"], + "control_params": parsed["control_params"], + "meas_sds": parsed["meas_sds"], + } + + +def _build_prev_dist_arrays( + flat_super: Array, + target_t: int, + metas: tuple[_PeriodMeta, ...], +) -> tuple[dict[str, Array], tuple[ChainLink, ...], Array]: + """Build the period-0 conditional payload and chain history for period ``t``. + + Replaces the previous static-sample carry-over with the joint-Halton + chain rebuild contract: the period-`t` likelihood expects + ``prev_dist_arrays`` (with cond_weights / cond_means / cond_chols), + a tuple of `ChainLink`s for the prior transition steps, and a + per-obs ``obs_factor_values_chain`` tensor. The chain rebuild + happens inside the integrand from a single joint Halton design. + + The autodiff DAG flows through each `ChainLink`'s leaves + (transition_params, shock_sds, inv_eq_params, inv_sds) which are + parsed from `flat_super`'s per-period slices. + """ + meta0 = metas[0] + flat_params_0 = flat_super[meta0.slice_start : meta0.slice_stop] + cond_means, cond_chols, log_unnorms, mixture_weights = ( + _build_initial_state_cond_dist_jax(flat_params_0, meta0) + ) + + chain_links: list[ChainLink] = [] + for s in range(1, target_t): + meta_s = metas[s] + flat_params_s = flat_super[meta_s.slice_start : meta_s.slice_stop] + chain_links.append(_extract_chain_link_jax(flat_params_s, meta_s)) + + if meta0.n_observed_factors > 0: + cond_weights = jax.nn.softmax(log_unnorms, axis=0).T + else: + meta_target = metas[target_t] + n_obs = int(meta_target.loglike_kwargs["measurements"].shape[0]) + n_components = metas[0].n_components + cond_weights = jnp.broadcast_to(mixture_weights[None, :], (n_obs, n_components)) + + prev_dist_arrays = { + "cond_weights": cond_weights, + "cond_means": cond_means, + "cond_chols": cond_chols, + } + + # Per-obs observed factor values at each chain link's source period. + meta_target = metas[target_t] + n_obs = int(meta_target.loglike_kwargs["measurements"].shape[0]) + n_obs_factors = meta0.n_observed_factors + if not chain_links: + obs_factor_values_chain = jnp.zeros((n_obs, 0, n_obs_factors)) + else: + obs_factor_values_chain = jnp.stack( + [link.obs_factor_values for link in chain_links], axis=1 + ) + + return prev_dist_arrays, tuple(chain_links), obs_factor_values_chain + + +def _period_t_per_obs_loglike_full( + flat_super: Array, + t: int, + metas: tuple[_PeriodMeta, ...], +) -> Array: + """Per-obs loglike for period ``t`` as a function of the full flat vector.""" + meta_t = metas[t] + flat_params_t = flat_super[meta_t.slice_start : meta_t.slice_stop] + if meta_t.is_initial: + return af_per_obs_loglike_initial(flat_params_t, **meta_t.loglike_kwargs) + + # Rebuild the posterior mixture weights from ``flat_super`` rather than + # reusing the cond_weights baked at the optimum (audit F9). The full-chain + # influence function differentiates this period-t loglike wrt EVERY period's + # params, and the period-0 mixture weights (softmax of the mixture-weight + # params, conditioned on Y_0 when observed factors are present) are one + # channel through which period-0 estimation error propagates into period t. + # Freezing them to their optimum value zeroes that derivative and drops the + # corresponding cross-period covariance block. Recomputing reproduces the + # baked value exactly at the optimum (so point estimates and the linearised + # likelihood are unchanged) while restoring the missing derivative path. + prev_dist_arrays, chain_links, obs_factor_values_chain = _build_prev_dist_arrays( + flat_super, t, metas + ) + meta_prev = metas[t - 1] + flat_params_prev = flat_super[meta_prev.slice_start : meta_prev.slice_stop] + prev_meas = _extract_prev_meas_info_jax(flat_params_prev, meta_prev) + + kwargs = dict(meta_t.loglike_kwargs) + kwargs["prev_distribution"] = prev_dist_arrays + kwargs["chain_links"] = chain_links + kwargs["obs_factor_values_chain"] = obs_factor_values_chain + kwargs["prev_loadings_flat"] = prev_meas["loadings_flat"] + kwargs["prev_control_params"] = prev_meas["control_params"] + kwargs["prev_meas_sds"] = prev_meas["meas_sds"] + return af_per_obs_loglike_transition(flat_params_t, **kwargs) + + +def _build_influence_matrix( + result: AFEstimationResult, + metas: tuple[_PeriodMeta, ...], + pos_lookup: Mapping[tuple[Any, ...], int], +) -> tuple[np.ndarray, list[int]]: + """Build the per-observation influence matrix PSI for the AF score bootstrap. + + Implements the sequential-estimator influence-function form of the AF + (2025) §4.2 score bootstrap. Partition the free parameters into period + blocks tau_0, ..., tau_{T-1}. Evaluate once at the optimum: + + * ``s_t``: per-obs score of the period-``t`` FULL-CHAIN loglike w.r.t. all + free params, via ``jax.jacfwd(_period_t_per_obs_loglike_full)``; + * ``H_t``: hessian of the neg-mean full-chain period-``t`` loglike + restricted to free columns, whose own block ``H_t[own, own] = A_t`` and + earlier-block columns ``H_t[own, own_r] = -B_{t,r}`` for ``r < t``. + + The per-obs influence matrix is built by forward substitution over + periods: + + psi_own_0,i = A_0^{-1} s_0,i[own_0] + psi_own_t,i = A_t^{-1}(s_t,i[own_t] + sum_{r Array: + return _period_t_per_obs_loglike_full(fs, _t, metas) + + jac = np.asarray(jax.jacfwd(per_obs)(flat_super)[:, free_positions_arr]) + + def neg_mean(fs: Array, _t: int = t) -> Array: + return -jnp.mean(_period_t_per_obs_loglike_full(fs, _t, metas)) + + hess_full = jax.hessian(neg_mean)(flat_super) + hess = np.asarray(hess_full[free_positions_arr][:, free_positions_arr]) + + own = period_own_cols[t] + a_inv = np.linalg.pinv(hess[np.ix_(own, own)]) # A_t^{-1} + rhs = jac[:, own] # s_t own block, (n_obs, |own|) + for r in range(t): + own_r = period_own_cols[r] + b_tr = -hess[np.ix_(own, own_r)] # B_{t,r} + rhs = rhs + psi[:, own_r] @ b_tr.T + psi[:, own] = rhs @ a_inv.T + + free_global_cols = [pos_lookup[loc] for loc in free_locs] + return psi, free_global_cols + + +__all__ = [ + "AFInferenceResult", + "compute_af_standard_errors", +] diff --git a/src/skillmodels/af/initial_period.py b/src/skillmodels/af/initial_period.py new file mode 100644 index 00000000..841dea62 --- /dev/null +++ b/src/skillmodels/af/initial_period.py @@ -0,0 +1,712 @@ +"""Step 0 of the AF estimator: initial period estimation. + +Estimate the joint distribution of latent factors at period 0 and the +measurement system parameters, using a mixture-of-normals model with +Halton quadrature for numerical integration. +""" + +import jax +import jax.numpy as jnp +import numpy as np +import optimagic as om +import pandas as pd +from jax import Array + +from skillmodels.af.batching import auto_n_obs_per_batch +from skillmodels.af.halton import create_halton_nodes_and_weights +from skillmodels.af.likelihood import ( + _log_mvn_pdf_chol, + af_loglike_initial, + create_loglike_and_gradient, +) +from skillmodels.af.params import ( + apply_fixed_params, + apply_start_params, + build_optimagic_inputs, + create_af_params_template, + get_initial_period_params_index, + get_measurements_per_factor, + get_normalizations_for_period, +) +from skillmodels.af.types import ( + AFEstimationOptions, + AFPeriodResult, + ConditionalDistribution, + MixtureComponent, +) +from skillmodels.amn.moments import spearman_factor_moments +from skillmodels.common.constraints import ( + filter_within_step_constraints, + reconcile_start_to_equality, +) +from skillmodels.common.measurement_models import measurement_family_arrays +from skillmodels.common.model_spec import ModelSpec +from skillmodels.common.types import ProcessedModel, to_plain_dict + + +def estimate_initial_period( # noqa: PLR0915 + model_spec: ModelSpec, + processed_model: ProcessedModel, + measurements: Array, + controls: Array, + af_options: AFEstimationOptions, + state_factors: tuple[str, ...] | None = None, + start_params: pd.DataFrame | None = None, + fixed_params: pd.DataFrame | None = None, + observed_factors: tuple[str, ...] = (), + observed_factor_values: Array | None = None, + user_constraints: list[om.constraints.Constraint] | None = None, +) -> tuple[AFPeriodResult, ConditionalDistribution]: + """Estimate the initial period (Step 0) of the AF procedure. + + Fit a mixture-of-normals distribution for the joint vector of latent + factors (and, optionally, observed factors) at period 0, together with + the measurement system parameters, via MLE with Halton quadrature. + + When `observed_factors` is non-empty, the joint distribution is modelled + over (latent, observed) and per-individual observed values are used to + condition the Halton draws via the Schur complement. This concentrates + nodes on the region of latent space consistent with each individual's + observed data, improving quadrature precision. + + Args: + model_spec: Model specification. + processed_model: Processed model from `process_model()`. + measurements: Shape (n_obs, n_measures), period 0 measurement values. + controls: Shape (n_obs, n_controls), period 0 control values. + af_options: AF estimation options. + state_factors: Subset of latent factors used as state factors for + AF propagation. If `None`, all latent factors are used. + start_params: Optional starting values. Matching index entries + override heuristic defaults. + fixed_params: Optional DataFrame with a "value" column pinning + specified parameters (value + bounds both clamped to the value). + observed_factors: Names of observed factors included in the joint + initial distribution. Defaults to empty. + observed_factor_values: Shape (n_obs, n_observed_factors) array of + observed factor values. Required iff `observed_factors` is + non-empty. + user_constraints: Optional optimagic constraint list forwarded + from `estimate_af(constraints=...)`. Entries whose members + all sit in this step's params index are appended to the + step's `om.minimize` call (within-step equalities). + + Return: + Tuple of (AFPeriodResult, ConditionalDistribution) where the + distribution represents the estimated f(theta_0 | data_0), restricted + to latent (or `state_factors`) coordinates. + + """ + n_components = processed_model.dimensions.n_mixtures + factors = processed_model.labels.latent_factors + controls_names = processed_model.labels.controls + n_obs_factors = len(observed_factors) + + reconstructed_factors = tuple( + f for f in factors if not model_spec.factors[f].has_initial_distribution + ) + state_latent_factors = tuple(f for f in factors if f not in reconstructed_factors) + n_state_latent = len(state_latent_factors) + n_joint = n_state_latent + n_obs_factors + + if n_obs_factors > 0 and observed_factor_values is None: + msg = "observed_factor_values required when observed_factors is non-empty." + raise ValueError(msg) + obs_values = ( + observed_factor_values + if observed_factor_values is not None + else jnp.zeros((measurements.shape[0], 0)) + ) + + # Build parameter index and template + measurements_p0 = get_measurements_per_factor(model_spec.factors, period=0) + params_index = get_initial_period_params_index( + n_mixture_components=n_components, + latent_factors=factors, + measurements_period_0=measurements_p0, + controls=controls_names, + observed_factors=observed_factors, + reconstructed_factors=reconstructed_factors, + ) + normalizations = get_normalizations_for_period(model_spec.factors, period=0) + params_template = create_af_params_template( + params_index, + normalizations, + period=0, + ) + + # Initialize parameters via simple heuristics + params_template = _initialize_params_heuristic( + params_template, + measurements, + controls, + n_state_latent, + n_components, + observed_factors=observed_factors, + observed_factor_values=obs_values, + ) + + # Optionally override SDs / loadings / Cholesky diagonals via Spearman + # moments. This places the optimizer near the strongly-identified MLE + # neighborhood instead of at the static default 0.5 / obs_sd*0.5; for + # parameters on weakly-identified ridges (notably sigma_inv vs sigma_meas) the + # moment-based seed is the difference between converging at truth and + # drifting to the boundary. + if af_options.start_params_strategy == "spearman": + all_measures_full = _get_ordered_measures(measurements_p0) + params_template = _apply_moment_based_overrides_initial( + params_template, + measurements, + measurements_per_factor=measurements_p0, + all_measures=all_measures_full, + normalizations=normalizations, + n_components=n_components, + ) + + # Override with user-supplied starting values where available + if start_params is not None: + apply_start_params(params_template, start_params) + + # Align template values with user-supplied fixes (bounds are not clamped; + # pinning happens via FixedConstraintWithValue further below). + if fixed_params is not None: + apply_fixed_params(params_template, fixed_params) + + # Period-0 measurements and loading mask cover state-latent factors only. + # Reconstructed factors' period-0 measurements are handled in the + # transition step 0->1. + measurements_p0_filtered = { + f: m for f, m in measurements_p0.items() if f in state_latent_factors + } + all_measures_full = _get_ordered_measures(measurements_p0) + all_measures = _get_ordered_measures(measurements_p0_filtered) + if len(all_measures) != len(all_measures_full): + col_indices = jnp.array( + [all_measures_full.index(m) for m in all_measures], dtype=jnp.int32 + ) + measurements = measurements[:, col_indices] + loading_mask = _build_loading_mask( + all_measures, state_latent_factors, measurements_p0_filtered + ) + + families, lowers, uppers = measurement_family_arrays( + model_spec.measurement_models, all_measures + ) + + # Halton quadrature nodes: dimension equals the state-latent count + # (observed factors are conditioned on, not integrated over, via the + # Schur complement). + nodes, weights = create_halton_nodes_and_weights( + af_options.n_halton_points, + n_state_latent, + ) + + # Translate normalization fixes and user-supplied fixes into FixedConstraints + # so they compose with other constraints (e.g. ProbabilityConstraint). + full_params_df, fixed_constraints = build_optimagic_inputs( + params_template, fixed_params + ) + + n_obs_per_batch = af_options.n_obs_per_batch + if n_obs_per_batch is None: + n_obs_per_batch = auto_n_obs_per_batch( + n_obs=int(measurements.shape[0]), + n_halton_points=af_options.n_halton_points, + n_halton_points_shock=af_options.n_halton_points_shock, + n_latent=n_joint, + n_endogenous=0, + ) + + loglike_kwargs = { + "n_factors": n_joint, + "n_latent_factors": n_state_latent, + "n_mixture_components": n_components, + "n_measures": len(all_measures), + "n_controls": len(controls_names), + "measurements": measurements, + "controls": controls, + "observed_factor_values": obs_values, + "loading_mask": jnp.array(loading_mask), + "nodes": nodes, + "weights": weights, + "stability_floor": af_options.stability_floor, + "n_obs_per_batch": n_obs_per_batch, + "measurement_families": jnp.asarray(families), + "measurement_lowers": jnp.asarray(lowers), + "measurement_uppers": jnp.asarray(uppers), + } + + loglike_and_grad = create_loglike_and_gradient( + af_loglike_initial, + **loglike_kwargs, + ) + + def fun(params_df: pd.DataFrame) -> float: + val, _grad = loglike_and_grad(jnp.array(params_df["value"].to_numpy())) + return float(val) + + def fun_and_jac(params_df: pd.DataFrame) -> tuple[float, np.ndarray]: + val, grad = loglike_and_grad(jnp.array(params_df["value"].to_numpy())) + return float(val), np.array(grad) + + within_step_constraints = filter_within_step_constraints( + user_constraints, full_params_df.index + ) + combined_constraints = list(fixed_constraints) + within_step_constraints + full_params_df = reconcile_start_to_equality( + full_params_df, within_step_constraints + ) + + opt_res = om.minimize( + fun=fun, + params=full_params_df[["value"]], + algorithm=af_options.optimizer_algorithm, + bounds=om.Bounds( + lower=full_params_df["lower_bound"], + upper=full_params_df["upper_bound"], + ), + constraints=combined_constraints or None, + fun_and_jac=fun_and_jac, + **to_plain_dict(af_options.optimizer_options), + ) + + # Write optimized values back into full template + result_params = params_template.copy() + result_params["value"] = opt_res.params["value"].to_numpy() + + # Extract conditional distribution (state factors only for AF propagation), + # building the per-obs importance sample of skills_0 from the same Halton + # design used for the optimization. + sf = state_factors if state_factors is not None else factors + cond_dist = _extract_conditional_distribution( + result_params, + len(sf), + n_components, + sf, + nodes=nodes, + observed_factor_values=obs_values, + n_summary_halton=af_options.n_halton_points_posterior_summary, + ) + + period_result = AFPeriodResult( + period=0, + params=result_params, + loglikelihood=-float(opt_res.fun), + success=bool(opt_res.success), + optimize_result=opt_res, + ) + + return period_result, cond_dist + + +def _get_ordered_measures( + measurements_per_factor: dict[str, tuple[str, ...]], +) -> list[str]: + """Get all measurement variables in a deterministic order.""" + seen: set[str] = set() + result: list[str] = [] + for measures in measurements_per_factor.values(): + for m in measures: + if m not in seen: + seen.add(m) + result.append(m) + return result + + +def _build_loading_mask( + all_measures: list[str], + factors: tuple[str, ...], + measurements_per_factor: dict[str, tuple[str, ...]], +) -> np.ndarray: + """Build boolean mask for which (measure, factor) pairs have loadings.""" + n_measures = len(all_measures) + n_factors = len(factors) + mask = np.zeros((n_measures, n_factors), dtype=bool) + meas_idx = {m: i for i, m in enumerate(all_measures)} + fac_idx = {f: i for i, f in enumerate(factors)} + for factor, measures in measurements_per_factor.items(): + fi = fac_idx[factor] + for m in measures: + mi = meas_idx[m] + mask[mi, fi] = True + return mask + + +def _initialize_params_heuristic( + params_template: pd.DataFrame, + measurements: Array, + _controls: Array, + _n_factors: int, + n_components: int, + observed_factors: tuple[str, ...] = (), + observed_factor_values: Array | None = None, +) -> pd.DataFrame: + """Initialize parameters using simple heuristics. + + Use measurement means and variances to set reasonable starting values + for mixture means, variances, loadings, and measurement SDs. When + observed factors are present, their means come from sample means and + their Cholesky diagonals from sample SDs. + """ + params = params_template.copy() + meas_np = np.array(measurements) + + # Overall mean and SD of first measurement as proxy for latent factor distribution + meas_mean = float(np.nanmean(meas_np[:, 0])) + meas_sd = float(np.nanstd(meas_np[:, 0])) + if meas_sd < 1e-8: + meas_sd = 1.0 + + obs_means, obs_sds = _observed_factor_stats( + observed_factors, observed_factor_values, n_rows=meas_np.shape[0] + ) + + # Set mixture weights to uniform + weight_mask = params.index.get_level_values("category") == "mixture_weights" + params.loc[weight_mask, "value"] = 1.0 / n_components + + _set_initial_mixture_means( + params, n_components, meas_mean, meas_sd, obs_means, obs_sds + ) + _set_initial_cholcov_diagonals(params, meas_sd, obs_sds) + + # Set measurement SDs to half the observed SD + sd_mask = params.index.get_level_values("category") == "meas_sds" + for i, idx in enumerate(params.index[sd_mask]): + obs_sd = float(np.nanstd(meas_np[:, i])) if i < meas_np.shape[1] else 1.0 + params.loc[idx, "value"] = max(obs_sd * 0.5, 0.01) + + # Set loadings to 1.0 (where not fixed) + load_mask = params.index.get_level_values("category") == "loadings" + for idx in params.index[load_mask]: + if params.loc[idx, "lower_bound"] != params.loc[idx, "upper_bound"]: + params.loc[idx, "value"] = 1.0 + + # Set control intercepts to measurement means (where not fixed) + ctrl_mask = params.index.get_level_values("category") == "controls" + for idx in params.index[ctrl_mask]: + if ( + idx[3] == "constant" + and params.loc[idx, "lower_bound"] != params.loc[idx, "upper_bound"] + ): + params.loc[idx, "value"] = 0.0 + + return params + + +def _set_initial_mixture_means( + params: pd.DataFrame, + n_components: int, + meas_mean: float, + meas_sd: float, + obs_means: dict[str, float], + obs_sds: dict[str, float], +) -> None: + """Set initial_states values in place: spread components around sample means.""" + mean_mask = params.index.get_level_values("category") == "initial_states" + mean_vals = params.loc[mean_mask, "value"].copy() + for idx in mean_vals.index: + comp = idx[2] + factor = idx[3] + component_offset = (int(comp.split("_")[1]) - (n_components - 1) / 2) * 0.5 + if factor in obs_means: + mean_vals.loc[idx] = obs_means[factor] + component_offset * obs_sds[factor] + else: + mean_vals.loc[idx] = meas_mean + component_offset * meas_sd + params.loc[mean_mask, "value"] = mean_vals + + +def _set_initial_cholcov_diagonals( + params: pd.DataFrame, + meas_sd: float, + obs_sds: dict[str, float], +) -> None: + """Set initial_cholcovs diagonals to factor sample SD, off-diags to 0.""" + chol_mask = params.index.get_level_values("category") == "initial_cholcovs" + for idx in params.index[chol_mask]: + parts = idx[3].split("-") + if len(parts) == 2 and parts[0] == parts[1]: + params.loc[idx, "value"] = obs_sds.get(parts[0], meas_sd * 0.5) + else: + params.loc[idx, "value"] = 0.0 + + +def _observed_factor_stats( + observed_factors: tuple[str, ...], + observed_factor_values: Array | None, + n_rows: int, +) -> tuple[dict[str, float], dict[str, float]]: + """Return per-observed-factor sample means and SDs (SDs clipped to >= 0.01).""" + obs_vals_np = ( + np.array(observed_factor_values) + if observed_factor_values is not None + else np.zeros((n_rows, 0)) + ) + obs_means = { + factor: float(np.nanmean(obs_vals_np[:, i])) + for i, factor in enumerate(observed_factors) + } + obs_sds = { + factor: max(float(np.nanstd(obs_vals_np[:, i])), 0.01) + for i, factor in enumerate(observed_factors) + } + return obs_means, obs_sds + + +def _extract_conditional_distribution( # noqa: PLR0915 + params: pd.DataFrame, + _n_factors: int, + n_components: int, + factors: tuple[str, ...], + nodes: Array, + observed_factor_values: Array, + n_summary_halton: int | None = None, +) -> ConditionalDistribution: + """Extract the initial distribution and build the period-0 importance sample. + + For each mixture component l, build a per-obs importance sample of + skills_0 of shape ``(n_halton, n_obs, n_state)``, conditional (where + applicable) on the observed factor values via the Schur complement. + Per-obs mixture weights `p(l | Y_i)` are computed by Bayes' rule from + the marginal density of Y_i under each component. + + These samples are propagated forward across periods (rather than being + re-collapsed to a Gaussian mixture and re-drawn freshly) so the + non-Gaussian shape of skills_t survives transitions through the CES + production function. + """ + # Mixture weights + weight_mask = params.index.get_level_values("category") == "mixture_weights" + weights_raw = jnp.array(params.loc[weight_mask, "value"].to_numpy()) + weights = weights_raw / weights_raw.sum() + + # Determine joint factor ordering from the stored initial_states entries + joint_factors = _get_joint_factors_in_order(params, n_components) + n_state = len(factors) + n_obs = int(observed_factor_values.shape[0]) + n_obs_factors = int(observed_factor_values.shape[1]) + + # Indices into joint_factors: + # - target_idx: positions of `factors` (the state factors we want samples for). + # - obs_idx: positions of observed factors at the joint's tail. + # Joint stores (state_latent_factors, observed_factors) in that order. + target_idx = jnp.array([joint_factors.index(f) for f in factors], dtype=jnp.int32) + obs_idx = jnp.array( + [ + joint_factors.index(joint_factors[len(joint_factors) - n_obs_factors + k]) + for k in range(n_obs_factors) + ], + dtype=jnp.int32, + ) + + # `samples_per_component` is only used for the posterior-state + # summary (mean / chol_cov per mixture component); the transition + # likelihood rebuilds the chain on-demand from `chain_links` at the + # full `n_halton_points`. Subsample the Halton design here so the + # persistent `(n_summary, n_obs, n_state)` tensor stays small. + n_full = int(nodes.shape[0]) + n_summary = n_full if n_summary_halton is None else min(n_full, n_summary_halton) + summary_nodes = nodes[:n_summary] + + components: list[MixtureComponent] = [] + samples_per_component: list[Array] = [] + log_unnorm_weights_per_component: list[Array] = [] + cond_means_per_component: list[Array] = [] + cond_chols_per_component: list[Array] = [] + + for m in range(n_components): + joint_mean = jnp.array( + [ + float(params.loc[("initial_states", 0, f"mixture_{m}", fac), "value"]) # ty: ignore[invalid-argument-type] + for fac in joint_factors + ] + ) + joint_chol = _assemble_joint_chol(params, joint_factors, m) + joint_cov = joint_chol @ joint_chol.T + + mu_theta = joint_mean[target_idx] + cov_tt = joint_cov[target_idx[:, None], target_idx[None, :]] + + if n_obs_factors == 0: + sub_mean = mu_theta + sub_chol = jnp.linalg.cholesky(cov_tt + 1e-10 * jnp.eye(n_state)) + z_for_state = summary_nodes[:, :n_state] + per_node = sub_mean[None, :] + z_for_state @ sub_chol.T + samples = jnp.broadcast_to( + per_node[:, None, :], (n_summary, n_obs, n_state) + ) + log_unnorm = jnp.full((n_obs,), float(jnp.log(weights[m] + 1e-300))) + # Per-obs cond_means broadcast (n_obs, n_state); shared chol. + cond_means_obs = jnp.broadcast_to(sub_mean[None, :], (n_obs, n_state)) + cond_chol_comp = sub_chol + else: + mu_y = joint_mean[obs_idx] + cov_ty = joint_cov[target_idx[:, None], obs_idx[None, :]] + cov_yy = joint_cov[obs_idx[:, None], obs_idx[None, :]] + + chol_yy = jnp.linalg.cholesky(cov_yy) + solve_tt = jax.scipy.linalg.cho_solve((chol_yy, True), cov_ty.T) + cond_cov = cov_tt - cov_ty @ solve_tt + 1e-10 * jnp.eye(n_state) + cond_chol = jnp.linalg.cholesky(cond_cov) + + def _per_obs( + y_i: Array, + chol_yy: Array = chol_yy, + mu_y: Array = mu_y, + mu_theta: Array = mu_theta, + cov_ty: Array = cov_ty, + ) -> tuple[Array, Array]: + alpha = jax.scipy.linalg.cho_solve((chol_yy, True), y_i - mu_y) + cond_mean = mu_theta + cov_ty @ alpha + log_marg_y = _log_mvn_pdf_chol(y_i, mu_y, chol_yy) + return cond_mean, log_marg_y + + cond_means, log_margs = jax.vmap(_per_obs)(observed_factor_values) + z_for_state = summary_nodes[:, :n_state] + samples = cond_means[None, :, :] + (z_for_state @ cond_chol.T)[:, None, :] + sub_mean = mu_theta + sub_chol = cond_chol + log_unnorm = jnp.log(weights[m] + 1e-300) + log_margs + cond_means_obs = cond_means + cond_chol_comp = cond_chol + + components.append(MixtureComponent(mean=sub_mean, chol_cov=sub_chol)) + samples_per_component.append(samples) + log_unnorm_weights_per_component.append(log_unnorm) + cond_means_per_component.append(cond_means_obs) + cond_chols_per_component.append(cond_chol_comp) + + if n_obs_factors > 0: + log_w_stack = jnp.stack( + log_unnorm_weights_per_component, axis=-1 + ) # (n_obs, n_components) + cond_weights = jax.nn.softmax(log_w_stack, axis=-1) + else: + cond_weights = jnp.broadcast_to(weights[None, :], (n_obs, n_components)) + + return ConditionalDistribution( + mixture_weights=weights, + components=tuple(components), + samples_per_component=tuple(samples_per_component), + conditional_weights=cond_weights, + cond_means=jnp.stack(cond_means_per_component, axis=0), + cond_chols=jnp.stack(cond_chols_per_component, axis=0), + ) + + +def _get_joint_factors_in_order( + params: pd.DataFrame, + n_components: int, +) -> tuple[str, ...]: + """Return the joint factor ordering used in initial_states entries.""" + mask = (params.index.get_level_values("category") == "initial_states") & ( + params.index.get_level_values("name1") == f"mixture_{n_components - 1}" + ) + del n_components + return tuple(params.loc[mask].index.get_level_values("name2")) + + +def _assemble_joint_chol( + params: pd.DataFrame, + joint_factors: tuple[str, ...], + component: int, +) -> Array: + """Build the lower-triangular joint Cholesky matrix for one component.""" + n = len(joint_factors) + chol = jnp.zeros((n, n)) + for row, f1 in enumerate(joint_factors): + for col, f2 in enumerate(joint_factors): + if col <= row: + loc = ("initial_cholcovs", 0, f"mixture_{component}", f"{f1}-{f2}") + val = float(params.loc[loc, "value"]) # ty: ignore[invalid-argument-type] + chol = chol.at[row, col].set(val) # noqa: PD008 + return chol + + +def _apply_moment_based_overrides_initial( # noqa: C901, PLR0912 + params: pd.DataFrame, + measurements: Array, + measurements_per_factor: dict[str, tuple[str, ...]], + all_measures: list[str], + normalizations: dict[str, dict[tuple[str, str], float]], + n_components: int, +) -> pd.DataFrame: + """Override static initialization with Spearman cross-cov moments. + + For each latent factor with at least two period-0 measurements, apply + `spearman_factor_moments` to the corresponding columns of + `measurements` and write the recovered loadings, sigma_meas, and per-component + Cholesky-diagonal sqrt(Var(F)) values into `params`. Skip rows where + `lower_bound == upper_bound` (i.e. user normalizations or fixed + constraints). + + The anchor measurement is determined from `normalizations["loadings"]` + when a loading is pinned for the factor; otherwise the first measurement + is the anchor. + """ + out = params.copy() + meas_np = np.array(measurements) + n_obs = meas_np.shape[0] + if n_obs == 0: + return out + meas_index = {m: i for i, m in enumerate(all_measures)} + loading_norms = normalizations.get("loadings", {}) + + for factor, factor_meas in measurements_per_factor.items(): + if len(factor_meas) < 2: + continue + cols = [meas_index[m] for m in factor_meas if m in meas_index] + if len(cols) < 2: + continue + sub = meas_np[:, cols] + + # Anchor: pick the measurement whose loading is pinned for this + # factor, falling back to the first measurement. + anchor_loading = 1.0 + anchor_local = 0 + for local_idx, meas_name in enumerate(factor_meas): + if (meas_name, factor) in loading_norms: + anchor_local = local_idx + anchor_loading = float(loading_norms[(meas_name, factor)]) + break + + result = spearman_factor_moments( + sub, + anchor_idx=anchor_local, + anchor_loading=anchor_loading, + ) + if not result.valid: + continue + + # Override loadings (skip pinned rows). + for local_idx, meas_name in enumerate(factor_meas): + loc = ("loadings", 0, meas_name, factor) + if loc not in out.index: + continue + if out.loc[loc, "lower_bound"] != out.loc[loc, "upper_bound"]: + out.loc[loc, "value"] = float(result.loadings[local_idx]) + + # Override measurement SDs (skip pinned rows). + for local_idx, meas_name in enumerate(factor_meas): + loc = ("meas_sds", 0, meas_name, "-") + if loc not in out.index: + continue + if out.loc[loc, "lower_bound"] != out.loc[loc, "upper_bound"]: + out.loc[loc, "value"] = float(result.meas_sds[local_idx]) + + # Override per-component Cholesky diagonal for this factor with + # sqrt(Var(F)). Off-diagonals stay at 0 (set by the heuristic). + sd_factor = float(np.sqrt(max(result.latent_var, 1e-12))) + for comp in range(n_components): + loc = ( + "initial_cholcovs", + 0, + f"mixture_{comp}", + f"{factor}-{factor}", + ) + if loc not in out.index: + continue + if out.loc[loc, "lower_bound"] != out.loc[loc, "upper_bound"]: + out.loc[loc, "value"] = sd_factor + + return out diff --git a/src/skillmodels/af/likelihood.py b/src/skillmodels/af/likelihood.py new file mode 100644 index 00000000..6f04bf0a --- /dev/null +++ b/src/skillmodels/af/likelihood.py @@ -0,0 +1,1545 @@ +"""JAX-based likelihood functions for AF estimation. + +All functions are JAX-compatible (jittable, differentiable via jax.grad). +""" + +import functools +from collections.abc import Callable, Mapping +from typing import Any + +import jax +import jax.numpy as jnp +import numpy as np +from jax import Array + +from skillmodels.af.types import ChainLink +from skillmodels.common.measurement_models import ( + MeasurementFamily, + measurement_loglik_vec, +) + + +def _gaussian_family_arrays(n_measures: int) -> tuple[Array, Array, Array]: + """All-Gaussian `(families, lowers, uppers)` -- exact parity with `_log_normal_pdf`. + + The default when a caller does not supply measurement families, so every + existing AF call evaluates each measurement as a Gaussian density unchanged. + """ + return ( + jnp.full(n_measures, int(MeasurementFamily.GAUSSIAN)), + jnp.full(n_measures, -jnp.inf), + jnp.full(n_measures, jnp.inf), + ) + + +def _resolve_families( + n_measures: int, + families: Array | None, + lowers: Array | None, + uppers: Array | None, +) -> tuple[Array, Array, Array]: + """Return supplied family arrays, or all-Gaussian defaults when absent.""" + if families is None or lowers is None or uppers is None: + return _gaussian_family_arrays(n_measures) + return families, lowers, uppers + + +def _measurement_log_density( + y_meas: Array, + residual: Array, + meas_sds: Array, + families: Array, + lowers: Array, + uppers: Array, +) -> Array: + """Per-measurement log density/probability through the shared family kernel. + + `residual = y - eta` is the Gaussian residual, so `eta = y_meas - residual`. + For the Gaussian family this reduces exactly to `N(residual; 0, meas_sds)`, so + swapping `_log_normal_pdf(residual, 0, sd)` for this call is parity-preserving. + """ + eta = y_meas - residual + return measurement_loglik_vec(y_meas, eta, meas_sds, families, lowers, uppers) + + +def af_per_obs_loglike_initial( + params: Array, + *, + n_factors: int, + n_mixture_components: int, + n_measures: int, + n_controls: int, + measurements: Array, + controls: Array, + loading_mask: Array, + nodes: Array, + weights: Array, + stability_floor: float, + n_latent_factors: int | None = None, + observed_factor_values: Array | None = None, + n_obs_per_batch: int | None = None, + measurement_families: Array | None = None, + measurement_lowers: Array | None = None, + measurement_uppers: Array | None = None, +) -> Array: + """Per-observation log-likelihood for the initial period (Step 0). + + Same inputs as `af_loglike_initial`; returns the shape-``(n_obs,)`` + vector of per-observation log-likelihoods instead of the aggregated + negative mean. Used for score-based inference. + """ + n_latent = n_factors if n_latent_factors is None else n_latent_factors + n_obs_factors = n_factors - n_latent + + parsed = _parse_initial_params( + params, + n_factors, + n_mixture_components, + n_measures, + n_controls, + ) + + if n_obs_factors == 0: + return _initial_loglike_per_obs( + mixture_weights=parsed["mixture_weights"], + mixture_means=parsed["mixture_means"], + mixture_chol_covs=parsed["mixture_chol_covs"], + control_params=parsed["control_params"], + loadings=parsed["loadings"], + meas_sds=parsed["meas_sds"], + measurements=measurements, + controls=controls, + loading_mask=loading_mask, + nodes=nodes, + weights=weights, + stability_floor=stability_floor, + n_obs_per_batch=n_obs_per_batch, + measurement_families=measurement_families, + measurement_lowers=measurement_lowers, + measurement_uppers=measurement_uppers, + ) + assert observed_factor_values is not None # noqa: S101 + return _initial_loglike_per_obs_conditional( + mixture_weights=parsed["mixture_weights"], + mixture_means=parsed["mixture_means"], + mixture_chol_covs=parsed["mixture_chol_covs"], + control_params=parsed["control_params"], + loadings=parsed["loadings"], + meas_sds=parsed["meas_sds"], + measurements=measurements, + controls=controls, + observed_factor_values=observed_factor_values, + loading_mask=loading_mask, + nodes=nodes, + weights=weights, + n_latent=n_latent, + stability_floor=stability_floor, + n_obs_per_batch=n_obs_per_batch, + measurement_families=measurement_families, + measurement_lowers=measurement_lowers, + measurement_uppers=measurement_uppers, + ) + + +def af_loglike_initial( + params: Array, + *, + n_factors: int, + n_mixture_components: int, + n_measures: int, + n_controls: int, + measurements: Array, + controls: Array, + loading_mask: Array, + nodes: Array, + weights: Array, + stability_floor: float, + n_latent_factors: int | None = None, + observed_factor_values: Array | None = None, + n_obs_per_batch: int | None = None, + measurement_families: Array | None = None, + measurement_lowers: Array | None = None, + measurement_uppers: Array | None = None, +) -> Array: + """Negative log-likelihood for the initial period (Step 0). + + Integrate over latent factors using Halton quadrature. + + When `n_latent_factors == n_factors` (no observed factors in the joint + distribution), the likelihood reduces to:: + + L_i = sum_q w_q * sum_l pi_l + * prod_m N(Z_{0,m,i} | c_m + lam_m' theta_q,l, sd_m) + + where theta_q,l = mu_l + L_l @ z_q. + + When `n_latent_factors < n_factors` (joint distribution over + (latent, observed)), for each individual i:: + + L_i = p(Y_i) * sum_q w_q * sum_l pi_{l|Y_i} + * prod_m N(Z_{0,m,i} | c_m + lam_m' theta_{q,l|Y_i}, sd_m) + + where theta_{q,l|Y_i} is drawn from the conditional N(mu_{theta|Y,l,i}, + Sigma_{theta|Y,l}) via the Schur complement, and pi_{l|Y_i} are the + posterior component weights given Y_i. + + Estimand and assumption (observed factors present): + With observed factors this objective is the JOINT maximum + likelihood of (Z_theta,0, Y_0) under a single finite Gaussian + mixture for the joint (theta_0, Y_0). Concretely:: + + L_i = sum_l pi_l N(Y_i | mu_Y,l, Sigma_YY,l) + * integral p(Z_i | theta) p(theta | Y_i, l) dtheta + = p(Z_i, Y_i). + + This is NOT the conditional likelihood f(Z_theta,0 | Y_0); the two + differ by the additive term log p(Y_i) = log sum_l pi_l + N(Y_i | mu_Y,l, Sigma_YY,l). The joint formulation requires the + stronger (and here deliberate) assumption that the mixture also + models the MARGINAL distribution of Y correctly. This is + intentional: the marginal-Y parameters (mu_Y, Sigma_YY, + Sigma_theta,Y) it identifies are reused to build the + Schur-complement conditional f(theta_0 | Y_0) and posterior + weights p(l | Y_i) that are propagated forward by the transition + step. Switching to a conditional MLE (subtracting log p(Y_i)) + would leave those parameters under-identified and is therefore not + done here. + + Args: + params: Full parameter vector in template order. Fixed entries are + held constant by optimagic `FixedConstraint`s attached outside. + n_factors: Number of factors in the joint initial distribution + (state latents + observed). Reconstructed factors + (``has_initial_distribution=False``) are excluded from this + count; their period-0 measurements are estimated in the + period 0->1 transition step instead. + n_mixture_components: Number of mixture components. + n_measures: Number of measurement variables in period 0. + n_controls: Number of control variables (including constant). + measurements: Shape (n_obs, n_measures), observed measurements. + controls: Shape (n_obs, n_controls), control variable values. + loading_mask: Shape (n_measures, n_state_latent), True where loading + exists. + nodes: Shape (n_nodes, n_state_latent), standard normal quadrature + nodes. + weights: Shape (n_nodes,), quadrature weights. + stability_floor: Small constant added for numerical stability. + n_latent_factors: Number of state latent factors in the mixture. + Defaults to ``n_factors`` when no observed factors are present. + observed_factor_values: Shape (n_obs, n_obs_factors), observed factor + values used for Schur-complement conditioning. Required when + ``n_latent_factors < n_factors``. + n_obs_per_batch: Observations per reverse-mode autodiff chunk. + ``None`` falls back to ``jax.vmap`` (single kernel); a positive + integer uses ``jax.lax.map`` so the backward-pass tape only + retains one chunk at a time. + measurement_families: Optional shape-``(n_measures,)`` `MeasurementFamily` + codes per period-0 measurement. ``None`` evaluates every measurement as + Gaussian (exact parity with the previous behaviour). + measurement_lowers: Optional shape-``(n_measures,)`` Tobit lower bounds + (``-inf`` where not Tobit / not censored below). + measurement_uppers: Optional shape-``(n_measures,)`` Tobit upper bounds + (``+inf`` where not Tobit / not censored above). + + Return: + Scalar negative log-likelihood. + + """ + log_likes = af_per_obs_loglike_initial( + params, + n_factors=n_factors, + n_mixture_components=n_mixture_components, + n_measures=n_measures, + n_controls=n_controls, + measurements=measurements, + controls=controls, + loading_mask=loading_mask, + nodes=nodes, + weights=weights, + stability_floor=stability_floor, + n_latent_factors=n_latent_factors, + observed_factor_values=observed_factor_values, + n_obs_per_batch=n_obs_per_batch, + measurement_families=measurement_families, + measurement_lowers=measurement_lowers, + measurement_uppers=measurement_uppers, + ) + return -jnp.mean(log_likes) + + +def _parse_initial_params( + params: Array, + n_factors: int, + n_mixture_components: int, + n_measures: int, + n_controls: int, +) -> dict[str, Array]: + """Parse flat parameter vector into structured initial-period params.""" + idx = 0 + + # Mixture weights + mixture_weights = params[idx : idx + n_mixture_components] + mixture_weights = mixture_weights / mixture_weights.sum() + idx += n_mixture_components + + # Mixture means: (n_components, n_factors) + n_mean = n_mixture_components * n_factors + mixture_means = params[idx : idx + n_mean].reshape(n_mixture_components, n_factors) + idx += n_mean + + # Mixture Cholesky covariances: (n_components, n_factors, n_factors) lower tri + n_chol = n_factors * (n_factors + 1) // 2 + mixture_chol_covs = jnp.zeros((n_mixture_components, n_factors, n_factors)) + for m in range(n_mixture_components): + chol_flat = params[idx : idx + n_chol] + idx += n_chol + chol = jnp.zeros((n_factors, n_factors)) + chol = chol.at[jnp.tril_indices(n_factors)].set(chol_flat) + mixture_chol_covs = mixture_chol_covs.at[m].set(chol) + + # Control params: (n_measures, n_controls) + n_ctrl = n_measures * n_controls + control_params = params[idx : idx + n_ctrl].reshape(n_measures, n_controls) + idx += n_ctrl + + # Loadings: (n_measures, n_factors) -- sparse, packed + n_loadings = int(params.shape[0]) - idx - n_measures + loadings_flat = params[idx : idx + n_loadings] + idx += n_loadings + + # Measurement SDs + meas_sds = params[idx : idx + n_measures] + + return { + "mixture_weights": mixture_weights, + "mixture_means": mixture_means, + "mixture_chol_covs": mixture_chol_covs, + "control_params": control_params, + "loadings": loadings_flat, + "meas_sds": meas_sds, + } + + +def _map_over_obs( + f: Callable, + *xs: Array | np.ndarray, + n_obs_per_batch: int | None, +) -> Array: + """Map ``f`` over the leading axis of ``xs``, optionally in batches. + + When ``n_obs_per_batch`` is ``None`` or at least as large as the + leading axis, falls back to ``jax.vmap`` (single kernel). Otherwise + uses ``jax.lax.map`` so the reverse-mode autodiff tape only needs to + retain one chunk at a time. Combined with ``jax.checkpoint`` on + ``f``, this makes reverse-mode memory proportional to + ``n_obs_per_batch`` rather than to the full ``n_obs``. + """ + n_obs = xs[0].shape[0] + if n_obs_per_batch is None or n_obs_per_batch >= n_obs: + return jax.vmap(f)(*xs) + + def _tupled(args: tuple[Array, ...]) -> Array: + return f(*args) + + return jax.lax.map(_tupled, xs, batch_size=n_obs_per_batch) + + +def _initial_loglike_per_obs( + *, + mixture_weights: Array, + mixture_means: Array, + mixture_chol_covs: Array, + control_params: Array, + loadings: Array, + meas_sds: Array, + measurements: Array, + controls: Array, + loading_mask: Array, + nodes: Array, + weights: Array, + n_obs_per_batch: int | None = None, + stability_floor: float, + measurement_families: Array | None = None, + measurement_lowers: Array | None = None, + measurement_uppers: Array | None = None, +) -> Array: + """Compute log-likelihood for each observation at the initial period. + + Return: + Shape (n_obs,) log-likelihood per observation. + + """ + # Expand loadings into full matrix using mask + n_measures, n_factors = loading_mask.shape + full_loadings = jnp.zeros((n_measures, n_factors)) + full_loadings = full_loadings.at[loading_mask].set(loadings) + + families, lowers, uppers = _resolve_families( + n_measures, measurement_families, measurement_lowers, measurement_uppers + ) + + # NaN-safety: build per-obs measurement mask and replace NaN entries + # with 0 so residuals stay finite. The mask is used inside the + # integral to zero out missing-measurement contributions. + meas_mask = jnp.isfinite(measurements) + safe_measurements = jnp.where(meas_mask, measurements, 0.0) + + # Control contribution: (n_obs, n_measures) + control_contrib = controls @ control_params.T + + # Residuals before factor contribution: (n_obs, n_measures) + residuals_base = safe_measurements - control_contrib + + @jax.checkpoint + def _single_obs_loglike( + residual_base: Array, y_meas: Array, mask_i: Array + ) -> Array: + """Log-likelihood for a single observation, integrated over factors. + + `jax.checkpoint` keeps the forward pass small: the per-observation + quadrature tape is discarded and recomputed during the backward + pass, so reverse-mode autodiff memory scales with the per-obs + parameter footprint instead of ``n_obs * n_quadrature_nodes``. + """ + return _integrate_initial_single_obs( + residual_base=residual_base, + y_meas=y_meas, + meas_mask=mask_i, + full_loadings=full_loadings, + meas_sds=meas_sds, + measurement_families=families, + measurement_lowers=lowers, + measurement_uppers=uppers, + mixture_weights=mixture_weights, + mixture_means=mixture_means, + mixture_chol_covs=mixture_chol_covs, + nodes=nodes, + weights=weights, + stability_floor=stability_floor, + ) + + return _map_over_obs( + _single_obs_loglike, + residuals_base, + safe_measurements, + meas_mask, + n_obs_per_batch=n_obs_per_batch, + ) + + +def _initial_loglike_per_obs_conditional( + *, + mixture_weights: Array, + mixture_means: Array, + mixture_chol_covs: Array, + control_params: Array, + loadings: Array, + meas_sds: Array, + measurements: Array, + controls: Array, + observed_factor_values: Array, + loading_mask: Array, + nodes: Array, + weights: Array, + n_latent: int, + stability_floor: float, + n_obs_per_batch: int | None = None, + measurement_families: Array | None = None, + measurement_lowers: Array | None = None, + measurement_uppers: Array | None = None, +) -> Array: + """Per-observation log-likelihood with Schur-complement conditioning. + + For each individual i with observed factors Y_i, the likelihood is:: + + L_i = p(Y_i) * integral p(Z_i | theta) p(theta | Y_i) dtheta + = sum_l pi_l N(Y_i | mu_Y_l, Sigma_YY_l) + * sum_q w_q prod_m N(residual_m | 0, sd_m) + + where theta is drawn from p(theta | Y_i, component l) using the + conditional mean and Cholesky factor derived from the joint + (latent, observed) covariance matrix via the Schur complement. + + Note the identity: combining the log-mixture over components l with + the measurement density gives an equivalent formulation where each + component's contribution is weighted by pi_l * N(Y_i | mu_Y_l, Sigma_YY_l). + + The `N(Y_i | mu_Y_l, Sigma_YY_l)` factor is an intentional JOINT-density + term: the objective is the joint MLE of (Z_theta,0, Y_0), not the + conditional f(Z|Y). See `af_loglike_initial` for the assumption this + encodes. + + """ + n_measures = loading_mask.shape[0] + full_loadings = jnp.zeros((n_measures, n_latent)) + full_loadings = full_loadings.at[loading_mask].set(loadings) + + families, lowers, uppers = _resolve_families( + n_measures, measurement_families, measurement_lowers, measurement_uppers + ) + + # NaN-safety for measurements (see `_initial_loglike_per_obs`). + meas_mask = jnp.isfinite(measurements) + safe_measurements = jnp.where(meas_mask, measurements, 0.0) + + control_contrib = controls @ control_params.T + residuals_base = safe_measurements - control_contrib + + @jax.checkpoint + def _single_obs_loglike( + residual_base: Array, y_meas: Array, y_i: Array, mask_i: Array + ) -> Array: + return _integrate_initial_single_obs_conditional( + residual_base=residual_base, + y_i=y_i, + y_meas=y_meas, + meas_mask=mask_i, + full_loadings=full_loadings, + meas_sds=meas_sds, + measurement_families=families, + measurement_lowers=lowers, + measurement_uppers=uppers, + mixture_weights=mixture_weights, + mixture_means=mixture_means, + mixture_chol_covs=mixture_chol_covs, + nodes=nodes, + weights=weights, + n_latent=n_latent, + stability_floor=stability_floor, + ) + + return _map_over_obs( + _single_obs_loglike, + residuals_base, + safe_measurements, + observed_factor_values, + meas_mask, + n_obs_per_batch=n_obs_per_batch, + ) + + +def _integrate_initial_single_obs_conditional( + *, + residual_base: Array, + y_i: Array, + y_meas: Array, + meas_mask: Array, + full_loadings: Array, + meas_sds: Array, + measurement_families: Array, + measurement_lowers: Array, + measurement_uppers: Array, + mixture_weights: Array, + mixture_means: Array, + mixture_chol_covs: Array, + nodes: Array, + weights: Array, + n_latent: int, + stability_floor: float, +) -> Array: + """Quadrature integration for one individual with observed-factor conditioning. + + Per component l: + - Split joint (mu, L) into latent and observed blocks. + - Compute marginal p(Y_i | l) from (mu_Y_l, L_Y_l). + - Compute conditional mean mu_{theta | Y_i, l} and Cholesky L_{theta | Y, l} + via Schur complement. + - Transform nodes: theta_q = mu_{theta|Y,l} + L_{theta|Y,l} @ z_q. + - Evaluate measurement density at theta_q, sum over quadrature. + + Aggregate with log-sum-exp over components. + """ + n_components = mixture_weights.shape[0] + + def _component_log_kernel(l_idx: Array) -> Array: + mu_full = mixture_means[l_idx] + chol_full = mixture_chol_covs[l_idx] + cov_full = chol_full @ chol_full.T + + mu_theta = mu_full[:n_latent] + mu_y = mu_full[n_latent:] + cov_tt = cov_full[:n_latent, :n_latent] + cov_ty = cov_full[:n_latent, n_latent:] + cov_yy = cov_full[n_latent:, n_latent:] + + # Marginal density of Y_i under component l. + # `log_marg_y` is an intentional JOINT-density term: the objective is + # the joint MLE of (Z_theta,0, Y_0), not the conditional f(Z|Y). + # See `af_loglike_initial` for the assumption this encodes. + chol_yy = jnp.linalg.cholesky(cov_yy) + log_marg_y = _log_mvn_pdf_chol(y_i, mu_y, chol_yy) + + # Conditional mean and Cholesky of theta | Y_i + alpha = jax.scipy.linalg.cho_solve((chol_yy, True), (y_i - mu_y)) + cond_mean = mu_theta + cov_ty @ alpha + # Sigma_{theta|Y} = Sigma_tt - Sigma_ty Sigma_yy^{-1} Sigma_yt + solve_tt = jax.scipy.linalg.cho_solve((chol_yy, True), cov_ty.T) + cond_cov = cov_tt - cov_ty @ solve_tt + # Jitter for numerical stability before Cholesky + cond_cov = cond_cov + 1e-10 * jnp.eye(n_latent) + cond_chol = jnp.linalg.cholesky(cond_cov) + + def _log_node(z_q: Array) -> Array: + theta_q = cond_mean + cond_chol @ z_q + residuals = residual_base - full_loadings @ theta_q + log_pdf = _measurement_log_density( + y_meas, + residuals, + meas_sds, + measurement_families, + measurement_lowers, + measurement_uppers, + ) + return jnp.sum(jnp.where(meas_mask, log_pdf, 0.0)) + + log_meas = jax.vmap(_log_node)(nodes) + log_integral = jax.scipy.special.logsumexp(log_meas + jnp.log(weights)) + + return ( + jnp.log(mixture_weights[l_idx] + stability_floor) + + log_marg_y + + log_integral + ) + + comp_log = jax.vmap(_component_log_kernel)(jnp.arange(n_components)) + return jax.scipy.special.logsumexp(comp_log) + + +def _log_mvn_pdf_chol(x: Array, mean: Array, chol: Array) -> Array: + """Log pdf of multivariate normal given the lower-triangular Cholesky.""" + diff = x - mean + sol = jax.scipy.linalg.solve_triangular(chol, diff, lower=True) + log_det = jnp.sum(jnp.log(jnp.diag(chol))) + k = x.shape[0] + return -0.5 * k * jnp.log(2 * jnp.pi) - log_det - 0.5 * jnp.dot(sol, sol) + + +def _integrate_initial_single_obs( + *, + residual_base: Array, + y_meas: Array, + meas_mask: Array, + full_loadings: Array, + meas_sds: Array, + measurement_families: Array, + measurement_lowers: Array, + measurement_uppers: Array, + mixture_weights: Array, + mixture_means: Array, + mixture_chol_covs: Array, + nodes: Array, + weights: Array, + stability_floor: float, +) -> Array: + """Quadrature integration for one observation at the initial period. + + For each quadrature node z_q and mixture component l:: + + theta_q,l = mu_l + L_l @ z_q + kernel = pi_l * N(theta_q,l | mu_l, Sigma_l) + * prod_m N(obs_m | loading_m' theta_q,l, sd_m^2) + + Since z_q is standard normal and we transform + theta = mu_l + L_l @ z_q, the density of the mixture at theta is + already accounted for by the quadrature (importance sampling with + the mixture as proposal). So we just need:: + + kernel = sum_l pi_l * |L_l| + * prod_m N(obs_m | loading_m' (mu_l + L_l @ z_q), + sd_m^2) + + But with Halton nodes from N(0,I), the correct formula is:: + + L_i = sum_q w_q * sum_l pi_l + * prod_m N(residual_m + - loading_m' (mu_l + L_l z_q), 0, sd_m) + + """ + n_components = mixture_weights.shape[0] + + def _node_contribution(z_q: Array) -> Array: + """Contribution from one quadrature node.""" + total = jnp.array(0.0) + + for l_idx in range(n_components): + # Transform node to factor space for component l + theta_q = mixture_means[l_idx] + mixture_chol_covs[l_idx] @ z_q + + # Measurement residuals: obs - control_contrib - loadings @ theta + residuals = residual_base - full_loadings @ theta_q + + # Log measurement density per family (Gaussian density, probit/Tobit + # probability), masking out missing measurements (NaN replaced by 0 + # upstream so a masked row's contribution is dropped by `jnp.where`). + log_pdf = _measurement_log_density( + y_meas, + residuals, + meas_sds, + measurement_families, + measurement_lowers, + measurement_uppers, + ) + log_meas_density = jnp.sum(jnp.where(meas_mask, log_pdf, 0.0)) + + total = total + mixture_weights[l_idx] * jnp.exp(log_meas_density) + + return total + + # Integrate over quadrature nodes + contributions = jax.vmap(_node_contribution)(nodes) + integrated = jnp.dot(weights, contributions) + + return jnp.log(integrated + stability_floor) + + +def af_per_obs_loglike_transition( + params: Array, + *, + n_state_factors: int, + n_endogenous_factors: int, + n_measures: int, + n_controls: int, + measurements: Array, + controls: Array, + loading_mask: Array, + prev_measurements: Array, + prev_controls: Array, + prev_loading_mask: Array, + prev_control_params: Array, + prev_loadings_flat: Array, + prev_meas_sds: Array, + prev_distribution: Mapping[str, Array | np.ndarray], + chain_links: tuple[ChainLink, ...], + obs_factor_values_chain: Array, + joint_nodes: Array, + joint_weights: Array, + transition_func: Callable, + total_n_transition_params: int, + total_n_inv_params: int, + n_inv_eq_params_per: int, + observed_factor_values: Array, + stability_floor: float, + state_factor_indices_in_latent: Array | None = None, + n_shock_factors: int | None = None, + shock_factor_indices: Array | None = None, + n_obs_per_batch: int | None = None, + measurement_families: Array | None = None, + measurement_lowers: Array | None = None, + measurement_uppers: Array | None = None, + prev_measurement_families: Array | None = None, + prev_measurement_lowers: Array | None = None, + prev_measurement_uppers: Array | None = None, + target_control_tensor: Array | None = None, + prev_control_contrib: Array | None = None, +) -> Array: + """Per-observation log-likelihood for a transition period (Step t). + + Same inputs as `af_loglike_transition`; returns the shape-``(n_obs,)`` + vector of per-observation log-likelihoods instead of the aggregated + negative mean. Used for score-based inference. + """ + effective_n_shock = n_state_factors if n_shock_factors is None else n_shock_factors + if shock_factor_indices is None: + shock_factor_indices = jnp.arange(effective_n_shock) + if state_factor_indices_in_latent is None: + # Default: assume state factors precede endogenous factors in the + # latent-factor ordering (the existing convention). Callers that + # don't follow that convention must pass explicit indices. + state_factor_indices_in_latent = jnp.arange(n_state_factors) + + parsed = _parse_transition_params( + params, + n_state_factors, + n_endogenous_factors, + n_measures, + n_controls, + total_n_transition_params, + total_n_inv_params, + n_inv_eq_params_per, + n_shock_factors=effective_n_shock, + ) + + n_prev_measures = prev_loading_mask.shape[0] + n_prev_factors = prev_loading_mask.shape[1] + prev_full_loadings = jnp.zeros((n_prev_measures, n_prev_factors)) + prev_full_loadings = prev_full_loadings.at[prev_loading_mask].set( + prev_loadings_flat + ) + # On the calendar-adapter path the importance control contribution is precompiled + # per row at its own control_period (static factors at 0, source skills at s); the + # plain path falls back to one shared source-period matmul. + if prev_control_contrib is None: + prev_control_contrib = prev_controls @ prev_control_params.T + # NaN-safety for prev-period measurements (see `_initial_loglike_per_obs`). + prev_meas_mask = jnp.isfinite(prev_measurements) + safe_prev_measurements = jnp.where(prev_meas_mask, prev_measurements, 0.0) + prev_residuals_base = safe_prev_measurements - prev_control_contrib + + return _transition_loglike_per_obs( + transition_params=parsed["transition_params"], + shock_sds=parsed["shock_sds"], + inv_eq_params=parsed["inv_eq_params"], + inv_sds=parsed["inv_sds"], + control_params=parsed["control_params"], + loadings_flat=parsed["loadings_flat"], + meas_sds=parsed["meas_sds"], + measurements=measurements, + controls=controls, + target_control_tensor=target_control_tensor, + loading_mask=loading_mask, + prev_residuals_base=prev_residuals_base, + prev_measurements_safe=safe_prev_measurements, + prev_meas_mask=prev_meas_mask, + prev_full_loadings=prev_full_loadings, + prev_meas_sds=prev_meas_sds, + prev_distribution=prev_distribution, + chain_links=chain_links, + obs_factor_values_chain=obs_factor_values_chain, + joint_nodes=joint_nodes, + joint_weights=joint_weights, + transition_func=transition_func, + n_state_factors=n_state_factors, + n_endogenous_factors=n_endogenous_factors, + n_shock_factors=effective_n_shock, + shock_factor_indices=shock_factor_indices, + state_factor_indices_in_latent=state_factor_indices_in_latent, + observed_factor_values=observed_factor_values, + stability_floor=stability_floor, + n_obs_per_batch=n_obs_per_batch, + measurement_families=measurement_families, + measurement_lowers=measurement_lowers, + measurement_uppers=measurement_uppers, + prev_measurement_families=prev_measurement_families, + prev_measurement_lowers=prev_measurement_lowers, + prev_measurement_uppers=prev_measurement_uppers, + ) + + +def af_loglike_transition( + params: Array, + *, + n_state_factors: int, + n_endogenous_factors: int, + n_measures: int, + n_controls: int, + measurements: Array, + controls: Array, + loading_mask: Array, + prev_measurements: Array, + prev_controls: Array, + prev_loading_mask: Array, + prev_control_params: Array, + prev_loadings_flat: Array, + prev_meas_sds: Array, + prev_distribution: Mapping[str, Array | np.ndarray], + chain_links: tuple[ChainLink, ...], + obs_factor_values_chain: Array, + joint_nodes: Array, + joint_weights: Array, + transition_func: Callable, + total_n_transition_params: int, + total_n_inv_params: int, + n_inv_eq_params_per: int, + observed_factor_values: Array, + stability_floor: float, + state_factor_indices_in_latent: Array | None = None, + n_shock_factors: int | None = None, + shock_factor_indices: Array | None = None, + n_obs_per_batch: int | None = None, + measurement_families: Array | None = None, + measurement_lowers: Array | None = None, + measurement_uppers: Array | None = None, + prev_measurement_families: Array | None = None, + prev_measurement_lowers: Array | None = None, + prev_measurement_uppers: Array | None = None, + target_control_tensor: Array | None = None, + prev_control_contrib: Array | None = None, +) -> Array: + """Negative log-likelihood for a transition period (Step t). + + Integrate over latent factors at period t-1 and production shocks + via a single joint Halton design covering ALL randomness needed at + this step (mirroring MATLAB's ``create_nodes_weights_01/12``): + + * the period-0 latent draw ``z_state`` (shared across mixture comps) + * one ``z_inv`` and one ``z_P`` per prior chain step (periods 1..t-1) + * one ``z_inv`` and one ``z_P`` for the current step (t-1)→t + + The chained sample θ_0 → θ_{t-1} is rebuilt on-demand inside the + integrand from this joint Halton via ``_rebuild_chain_at_period``. + The likelihood conditions on individual data via re-evaluation of + previous-period state-factor measurements at each Halton draw:: + + L_i = sum_j w_j * sum_l pi_{l,i} + * [prod_m N(Z_{t-1,m,i} | c~_m + lam~_m' th_{t-1}_j, sd~_m)] + * [prod_m N(Z_{t,m,i} | c_m + lam_m' th_t_j, sd_m)] + + where ``th_{t-1}_j = chain_rebuild(joint_z_j)`` and + ``th_t_j = f(th_{t-1}_j; delta) + sd_shock * z_shock_curr_j``. + Tildes denote already-estimated parameters from previous steps. + + Args: + params: Full parameter vector in template order. Fixed entries are + held constant by optimagic `FixedConstraint`s attached outside. + n_state_factors: Number of state factors with transition equations. + n_endogenous_factors: Number of endogenous (investment) factors. + n_measures: Number of measurements at period t. + n_controls: Number of controls at period t. + measurements: Shape (n_obs, n_measures), measurements at period t. + controls: Shape (n_obs, n_controls), controls at period t. + loading_mask: Shape (n_measures, n_state_factors), loading mask. + prev_measurements: Shape (n_obs, n_prev_measures), measurements t-1. + prev_controls: Shape (n_obs, n_prev_controls), controls at t-1. + prev_loading_mask: Shape (n_prev_measures, n_factors), prev loadings. + prev_control_params: Shape (n_prev_measures, n_prev_controls), fixed. + prev_loadings_flat: Packed loadings from previous period, fixed. + prev_meas_sds: Shape (n_prev_measures,), fixed from previous step. + prev_distribution: Dict with keys "cond_weights", "means", "chol_covs". + joint_nodes: Shape (n_halton, n_state + n_shock + n_endogenous), + standard-normal Halton draws partitioned into state, production + shock, and investment shock components. `n_shock` equals + `n_shock_factors` (defaults to `n_state_factors`). + joint_weights: Shape (n_halton,) quadrature weights (uniform + 1/n_halton for Halton integration). + transition_func: Combined transition f(states, params) -> new_states. + total_n_transition_params: Total transition params across all factors. + total_n_inv_params: Total investment equation parameters. + n_inv_eq_params_per: Investment equation parameters per endogenous factor. + observed_factor_values: Shape (n_obs, n_obs_factors), observed factor data. + stability_floor: Numerical stability floor. + chain_links: Tuple of `ChainLink` objects, one per prior transition + step (length `period - 1` for the (period-1)→period step). + Empty for the 0→1 step. Carries each prior period's just-fitted + parameters so the chain replays from period 0 inside this + step's joint-Halton chain rebuild. + obs_factor_values_chain: Per-obs observed factor values at each + chain link's source period, shape `(n_obs, n_chain, + n_observed_factors)`. The current step's observed factors are + passed via `observed_factor_values`. + state_factor_indices_in_latent: Shape (n_state_factors,) int array + mapping each state factor to its column index in the + previous-period loading mask (which is in `latent_factors` order + = state + endogenous, possibly interleaved). Used to restrict + the prev-meas factor to state-factor loadings, mirroring + MATLAB's `create_nodes_weights_12` (which omits prev-period + inv measurements from the chained-sample importance weight). + Defaults to `arange(n_state_factors)` (assuming state factors + precede endogenous in the latent ordering). + n_shock_factors: Number of state factors that get a production shock. + Defaults to `n_state_factors`. Factors without a shock are + integrated deterministically (their shock dimension is dropped + from the joint Halton draw). + shock_factor_indices: Shape (n_shock_factors,) int array mapping each + shock slot to its position in the state-factor ordering. Required + when `n_shock_factors < n_state_factors`. + n_obs_per_batch: Observations per reverse-mode autodiff chunk. + ``None`` falls back to ``jax.vmap`` (single kernel); a positive + integer uses ``jax.lax.map`` so the backward-pass tape only + retains one chunk at a time. + measurement_families: Optional shape-``(n_measures,)`` `MeasurementFamily` + codes for the current period. ``None`` is all-Gaussian (parity). + measurement_lowers: Optional shape-``(n_measures,)`` current-period Tobit + lower bounds (``-inf`` where not censored below). + measurement_uppers: Optional shape-``(n_measures,)`` current-period Tobit + upper bounds (``+inf`` where not censored above). + prev_measurement_families: Optional shape-``(n_prev_measures,)`` family + codes for the previous-period measurement block. ``None`` is Gaussian. + prev_measurement_lowers: Optional previous-period Tobit lower bounds. + prev_measurement_uppers: Optional previous-period Tobit upper bounds. + target_control_tensor: Optional shape-``(n_obs, n_measures, n_controls)`` + per-row target control data, each row at its own ``control_period`` + (calendar-adapter path). ``None`` keeps the single shared-matrix matmul. + prev_control_contrib: Optional shape-``(n_obs, n_prev_measures)`` precompiled + importance control contribution, each row at its ``control_period``. + ``None`` computes it from the shared previous-period controls matrix. + + Return: + Scalar negative log-likelihood. + + """ + log_likes = af_per_obs_loglike_transition( + params, + n_state_factors=n_state_factors, + n_endogenous_factors=n_endogenous_factors, + n_measures=n_measures, + n_controls=n_controls, + measurements=measurements, + controls=controls, + loading_mask=loading_mask, + prev_measurements=prev_measurements, + prev_controls=prev_controls, + prev_loading_mask=prev_loading_mask, + prev_control_params=prev_control_params, + prev_loadings_flat=prev_loadings_flat, + prev_meas_sds=prev_meas_sds, + prev_distribution=prev_distribution, + chain_links=chain_links, + obs_factor_values_chain=obs_factor_values_chain, + joint_nodes=joint_nodes, + joint_weights=joint_weights, + transition_func=transition_func, + total_n_transition_params=total_n_transition_params, + total_n_inv_params=total_n_inv_params, + n_inv_eq_params_per=n_inv_eq_params_per, + observed_factor_values=observed_factor_values, + stability_floor=stability_floor, + state_factor_indices_in_latent=state_factor_indices_in_latent, + n_shock_factors=n_shock_factors, + shock_factor_indices=shock_factor_indices, + n_obs_per_batch=n_obs_per_batch, + measurement_families=measurement_families, + measurement_lowers=measurement_lowers, + measurement_uppers=measurement_uppers, + prev_measurement_families=prev_measurement_families, + prev_measurement_lowers=prev_measurement_lowers, + prev_measurement_uppers=prev_measurement_uppers, + target_control_tensor=target_control_tensor, + prev_control_contrib=prev_control_contrib, + ) + return -jnp.mean(log_likes) + + +def _parse_transition_params( + params: Array, + n_state_factors: int, + n_endogenous_factors: int, + n_measures: int, + n_controls: int, + total_n_transition_params: int, + total_n_inv_params: int, + _n_inv_eq_params_per: int, + *, + n_shock_factors: int | None = None, +) -> dict[str, Array]: + """Parse flat parameter vector for a transition period.""" + effective_n_shock = n_state_factors if n_shock_factors is None else n_shock_factors + idx = 0 + + # Transition parameters (flat, for state factors only) + transition_params = params[idx : idx + total_n_transition_params] + idx += total_n_transition_params + + # Shock SDs per shock-bearing state factor (subset of state factors). + shock_sds = params[idx : idx + effective_n_shock] + idx += effective_n_shock + + # Investment equation params (if any endogenous factors) + inv_eq_params = params[idx : idx + total_n_inv_params] + idx += total_n_inv_params + + # Investment shock SDs + inv_sds = params[idx : idx + n_endogenous_factors] + idx += n_endogenous_factors + + # Control params: (n_measures, n_controls) + n_ctrl = n_measures * n_controls + control_params = params[idx : idx + n_ctrl].reshape(n_measures, n_controls) + idx += n_ctrl + + # Packed loadings + n_loadings = int(params.shape[0]) - idx - n_measures + loadings_flat = params[idx : idx + n_loadings] + idx += n_loadings + + # Measurement SDs + meas_sds = params[idx : idx + n_measures] + + return { + "transition_params": transition_params, + "shock_sds": shock_sds, + "inv_eq_params": inv_eq_params, + "inv_sds": inv_sds, + "control_params": control_params, + "loadings_flat": loadings_flat, + "meas_sds": meas_sds, + } + + +def _transition_loglike_per_obs( + *, + transition_params: Array, + shock_sds: Array, + inv_eq_params: Array, + inv_sds: Array, + control_params: Array, + loadings_flat: Array, + meas_sds: Array, + measurements: Array, + controls: Array, + loading_mask: Array, + target_control_tensor: Array | None = None, + prev_residuals_base: Array, + prev_measurements_safe: Array, + prev_meas_mask: Array, + prev_full_loadings: Array, + prev_meas_sds: Array, + prev_distribution: Mapping[str, Array | np.ndarray], + chain_links: tuple[ChainLink, ...], + obs_factor_values_chain: Array, + joint_nodes: Array, + joint_weights: Array, + transition_func: Callable, + n_state_factors: int, + n_endogenous_factors: int, + n_shock_factors: int, + shock_factor_indices: Array, + state_factor_indices_in_latent: Array, + observed_factor_values: Array, + stability_floor: float, + n_obs_per_batch: int | None = None, + measurement_families: Array | None = None, + measurement_lowers: Array | None = None, + measurement_uppers: Array | None = None, + prev_measurement_families: Array | None = None, + prev_measurement_lowers: Array | None = None, + prev_measurement_uppers: Array | None = None, +) -> Array: + """Compute per-observation log-likelihood for a transition period. + + Uses the joint-Halton chain rebuild scheme: at every transition step, + a single joint Halton design covers (z_state, z_inv_chain, + z_shock_chain, z_inv_t, z_shock_t). The chained sample θ_0 → θ_{t-1} + is rebuilt on-demand inside the integrand from this single joint + Halton, mirroring MATLAB's ``create_nodes_weights_01/12``. + + Scope / Assumptions: + Production shocks (eta_theta,t) and investment shocks (eta_I,t) + are integrated as INDEPENDENT Halton coordinate blocks + (z_shock_curr and z_inv_shock). This implements the + exogenous-investment special case kappa_t = 0 of the + control-function decomposition eta_theta,t = kappa_t * eta_I,t + + eps_C,t (Antweiler-Freyberger Assumption 1(g)): production and + investment shocks are uncorrelated, cov(eta_theta,t, eta_I,t)=0. + A nonzero kappa_t (endogenous investment) is NOT implemented. + """ + n_measures, n_loading_factors = loading_mask.shape + full_loadings = jnp.zeros((n_measures, n_loading_factors)) + full_loadings = full_loadings.at[loading_mask].set(loadings_flat) + + families, lowers, uppers = _resolve_families( + n_measures, measurement_families, measurement_lowers, measurement_uppers + ) + n_prev_measures = prev_full_loadings.shape[0] + prev_families, prev_lowers, prev_uppers = _resolve_families( + n_prev_measures, + prev_measurement_families, + prev_measurement_lowers, + prev_measurement_uppers, + ) + + # NaN-safety for current-period measurements (see `_initial_loglike_per_obs`). + meas_mask = jnp.isfinite(measurements) + safe_measurements = jnp.where(meas_mask, measurements, 0.0) + + # On the calendar-adapter path each target row carries its own control_period, so + # the control data is a per-row tensor `(n_obs, n_measures, n_controls)` and the + # contribution is an einsum with the free control params. The plain path keeps the + # single shared-matrix matmul (one destination-period controls matrix). + if target_control_tensor is None: + control_contrib = controls @ control_params.T + else: + control_contrib = jnp.einsum( + "omc,mc->om", target_control_tensor, control_params + ) + residuals_base = safe_measurements - control_contrib + + cond_weights = prev_distribution["cond_weights"] + cond_means = prev_distribution["cond_means"] + cond_chols = prev_distribution["cond_chols"] + # cond_means shape (n_components, n_obs, n_state). Re-shape to + # (n_obs, n_components, n_state) so we can map per-obs. + cond_means_by_obs = jnp.transpose(cond_means, (1, 0, 2)) + + @jax.checkpoint + def _single_obs( + residual_base: Array, + y_meas: Array, + prev_residual_base: Array, + prev_y_meas: Array, + obs_cond_weights: Array, + obs_factor_values: Array, + obs_cond_means: Array, + obs_factor_values_chain_i: Array, + meas_mask_i: Array, + prev_meas_mask_i: Array, + ) -> Array: + return _integrate_transition_single_obs( + residual_base=residual_base, + y_meas=y_meas, + meas_mask=meas_mask_i, + full_loadings=full_loadings, + meas_sds=meas_sds, + measurement_families=families, + measurement_lowers=lowers, + measurement_uppers=uppers, + prev_residual_base=prev_residual_base, + prev_y_meas=prev_y_meas, + prev_meas_mask=prev_meas_mask_i, + prev_full_loadings=prev_full_loadings, + prev_meas_sds=prev_meas_sds, + prev_measurement_families=prev_families, + prev_measurement_lowers=prev_lowers, + prev_measurement_uppers=prev_uppers, + obs_cond_weights=obs_cond_weights, + obs_cond_means=obs_cond_means, + cond_chols=cond_chols, + chain_links=chain_links, + obs_factor_values_chain=obs_factor_values_chain_i, + joint_nodes=joint_nodes, + joint_weights=joint_weights, + transition_func=transition_func, + transition_params=transition_params, + shock_sds=shock_sds, + inv_eq_params=inv_eq_params, + inv_sds=inv_sds, + n_state_factors=n_state_factors, + n_endogenous_factors=n_endogenous_factors, + n_shock_factors=n_shock_factors, + shock_factor_indices=shock_factor_indices, + state_factor_indices_in_latent=state_factor_indices_in_latent, + obs_factor_values=obs_factor_values, + stability_floor=stability_floor, + ) + + return _map_over_obs( + _single_obs, + residuals_base, + safe_measurements, + prev_residuals_base, + prev_measurements_safe, + cond_weights, + observed_factor_values, + cond_means_by_obs, + obs_factor_values_chain, + meas_mask, + prev_meas_mask, + n_obs_per_batch=n_obs_per_batch, + ) + + +def _compute_investment( + theta_prev: Array, + obs_factor_values: Array, + inv_eq_params: Array | np.ndarray, + inv_sds: Array | np.ndarray, + eps_i: Array, + n_endogenous_factors: int, + n_state_factors: int, +) -> Array: + """Compute investment from the AF investment equation. + + I_j = beta_0 + beta_k @ theta + beta_y @ Y + sigma_I * eps_I + + """ + n_obs_factors = obs_factor_values.shape[0] + n_per = 1 + n_state_factors + n_obs_factors + result = jnp.zeros(n_endogenous_factors) + for j in range(n_endogenous_factors): + beta = inv_eq_params[j * n_per : (j + 1) * n_per] + intercept = beta[0] + state_coeffs = beta[1 : 1 + n_state_factors] + obs_coeffs = beta[1 + n_state_factors :] + inv_j = ( + intercept + + jnp.dot(state_coeffs, theta_prev) + + jnp.dot(obs_coeffs, obs_factor_values) + + inv_sds[j] * eps_i[j] + ) + result = result.at[j].set(inv_j) + return result + + +def _rebuild_chain_at_period( + *, + z_state: Array, + z_inv_per_step: Array, + z_shock_per_step: Array, + initial_mean: Array | np.ndarray, + initial_chol: Array | np.ndarray, + chain_links: tuple[ChainLink, ...], + obs_factor_values_at_obs_per_step: Array, + n_state_factors: int, + n_endogenous_factors: int, +) -> Array: + """Forward-iterate θ_0 → θ_{t-1} from one joint-Halton draw. + + Mirrors MATLAB's `create_nodes_weights_12`: rebuild the chained sample + on-demand inside the transition likelihood from a single joint Halton + draw, so the (z_state, z_inv_per_step, z_shock_per_step) triple is + quasi-uniformly distributed in joint space at each index `j` (rather + than paired across two independent Halton sequences as the previous + static `samples_per_component` carry-over did). + + Args: + z_state: Shape (n_state_factors,). Standard-normal sample driving + the period-0 latent state for one (j, i, l). + z_inv_per_step: Shape (n_chain, n_endogenous_factors). One row + per prior chain step (period 1 .. period t-1). Standard-normal + inv shocks. + z_shock_per_step: Shape (n_chain, n_shock_factors). Standard-normal + production shocks per prior chain step. + initial_mean: Shape (n_state_factors,). Schur-conditional mean of + the period-0 state for one (i, l). + initial_chol: Shape (n_state_factors, n_state_factors). Cholesky + of the period-0 conditional covariance, shared across i. + chain_links: Tuple of ChainLink objects, one per prior transition + step (period 1 → period 2 → ...). Length n_chain. + obs_factor_values_at_obs_per_step: Shape (n_chain, n_obs_factors). + Observed factor values at the *source* period of each chain + step (i.e. period 0 for the first link, period 1 for the + second, etc.) for one observation. + n_state_factors: Number of state factors. + n_endogenous_factors: Number of endogenous factors (investment). + + Return: + theta at period t-1 (= start period of the current likelihood + step), shape (n_state_factors,). When `chain_links` is empty, + returns the period-0 state directly. + """ + theta = jnp.asarray(initial_mean + initial_chol @ z_state) + for step_idx, link in enumerate(chain_links): + z_inv = z_inv_per_step[step_idx] + z_shock = z_shock_per_step[step_idx] + obs_y = obs_factor_values_at_obs_per_step[step_idx] + inv = _compute_investment( + theta, + obs_y, + link.inv_eq_params, + link.inv_sds, + z_inv, + n_endogenous_factors, + n_state_factors, + ) + full_with_obs = jnp.concatenate([theta, inv, obs_y]) + state_shock_contrib = ( + jnp.zeros(n_state_factors) + .at[link.shock_factor_indices] + .set(link.shock_sds * z_shock) + ) + theta = ( + link.transition_func(full_with_obs, link.transition_params) + + state_shock_contrib + ) + return theta + + +def _integrate_transition_single_obs( + *, + residual_base: Array, + y_meas: Array, + meas_mask: Array, + full_loadings: Array, + meas_sds: Array, + measurement_families: Array, + measurement_lowers: Array, + measurement_uppers: Array, + prev_residual_base: Array, + prev_y_meas: Array, + prev_meas_mask: Array, + prev_full_loadings: Array, + prev_meas_sds: Array, + prev_measurement_families: Array, + prev_measurement_lowers: Array, + prev_measurement_uppers: Array, + obs_cond_weights: Array | np.ndarray, + obs_cond_means: Array | np.ndarray, + cond_chols: Array | np.ndarray, + chain_links: tuple[ChainLink, ...], + obs_factor_values_chain: Array, + joint_nodes: Array, + joint_weights: Array, + transition_func: Callable, + transition_params: Array, + shock_sds: Array, + inv_eq_params: Array, + inv_sds: Array, + n_state_factors: int, + n_endogenous_factors: int, + n_shock_factors: int, + shock_factor_indices: Array, + state_factor_indices_in_latent: Array, + obs_factor_values: Array, + stability_floor: float, +) -> Array: + """Joint-Halton importance integration for one obs at a transition step. + + Rebuilds the chained sample theta_0 -> theta_{t-1} on-demand from a + single joint Halton design at every transition step (matching MATLAB's + ``create_nodes_weights_01/12``). At index j, the joint Halton draw + couples (z_state, z_inv_chain, z_shock_chain, z_inv_t, z_shock_t) in + a quasi-uniform 3D+ space, replacing the previous broken scheme that + paired a period-0-seeded chained-sample's z_state[j] with a + period-t-seeded shock z[j] across two independent Halton sequences at + the same index. The split scheme aliased into sigma_prod optimization + (see commit message and ``sigma-prod-collapse-2026-05-07.md``). + + The non-trivial inputs: + + * ``obs_cond_means``: per-component Schur-conditional means for this + obs at period 0, shape ``(n_components, n_state_factors)``. + * ``cond_chols``: per-component Schur-conditional Cholesky factors at + period 0, shape ``(n_components, n_state_factors, n_state_factors)``. + Shared across observations. + * ``chain_links``: tuple of `ChainLink` objects, one per prior + transition step (length ``period - 1`` for the (period-1)->period + step). Empty for the 0->1 step. + * ``obs_factor_values_chain``: observed factor values at the source + period of each prior chain step for this observation, shape + ``(n_chain, n_obs_factors)``. The current step's observed factors + are passed via ``obs_factor_values``. + + The joint Halton design has dimension + ``n_state_factors + n_chain * (n_shock_factors + n_endogenous_factors) + + (n_shock_factors + n_endogenous_factors)``. Layout per draw j: + + * ``[:n_state_factors]``: z_state for theta_0 (shared across comps) + * for s in 0..n_chain-1: per-step ``z_shock`` followed by ``z_inv`` + * tail: current step's ``z_shock`` followed by ``z_inv``. + + The previous-period measurement density factor is restricted to + state-factor loadings (matches MATLAB's deliberate omission of + ``Z_inv_est_0`` from the chained-sample importance weight at + ``create_nodes_weights_12``). + """ + n_components = obs_cond_weights.shape[0] + n_chain = len(chain_links) + z_block = n_shock_factors + n_endogenous_factors + + def _log_draw_contribution(j_idx: Array) -> Array: + """Per-draw log kernel at Halton index j, LogSumExp over mixture comps.""" + z_at_j = joint_nodes[j_idx] + z_state = z_at_j[:n_state_factors] + # Chain shocks at indices [n_state, n_state + n_chain*z_block). + chain_block_start = n_state_factors + chain_block_end = chain_block_start + n_chain * z_block + if n_chain > 0: + z_chain = z_at_j[chain_block_start:chain_block_end].reshape( + n_chain, z_block + ) + z_shock_chain = z_chain[:, :n_shock_factors] + z_inv_chain = z_chain[:, n_shock_factors:] + else: + z_shock_chain = jnp.zeros((0, n_shock_factors)) + z_inv_chain = jnp.zeros((0, n_endogenous_factors)) + # Current step shocks at the tail. + # Exogenous-investment case (kappa_t = 0): the production shock + # z_shock_curr and the investment shock z_inv_shock are independent + # Halton coordinates; theta_t receives only shock_sds * z_shock_curr + # (see _compute_investment for z_inv_shock). cov(eta_theta, eta_I)=0. + z_shock_curr = z_at_j[chain_block_end : chain_block_end + n_shock_factors] + z_inv_shock = z_at_j[chain_block_end + n_shock_factors :] + + log_component_vals = [] + for l_idx in range(n_components): + # Rebuild θ_{t-1} from the joint Halton. + theta_prev = _rebuild_chain_at_period( + z_state=z_state, + z_inv_per_step=z_inv_chain, + z_shock_per_step=z_shock_chain, + initial_mean=obs_cond_means[l_idx], + initial_chol=cond_chols[l_idx], + chain_links=chain_links, + obs_factor_values_at_obs_per_step=obs_factor_values_chain, + n_state_factors=n_state_factors, + n_endogenous_factors=n_endogenous_factors, + ) + inv = _compute_investment( + theta_prev, + obs_factor_values, + inv_eq_params, + inv_sds, + z_inv_shock, + n_endogenous_factors, + n_state_factors, + ) + full_prev_with_obs = jnp.concatenate([theta_prev, inv, obs_factor_values]) + + # Previous-period measurement density: state-factor (skill) + # measurements at theta_prev only. Endogenous-factor (inv) + # measurements at t-1 are NOT re-evaluated here -- they were + # already used as current-period measurements at the (t-2)->(t-1) + # step (matches MATLAB's likelihood_12, which omits Z_inv_est_0 + # from the chained-sample importance weight). For rows that load + # only on endogenous factors, the slice picks zero loadings and + # the residual reduces to the centered measurement, contributing + # a per-obs constant that is invariant under the parameters. + prev_state_loadings = prev_full_loadings[:, state_factor_indices_in_latent] + prev_residuals = prev_residual_base - prev_state_loadings @ theta_prev + prev_log_pdf = _measurement_log_density( + prev_y_meas, + prev_residuals, + prev_meas_sds, + prev_measurement_families, + prev_measurement_lowers, + prev_measurement_uppers, + ) + log_prev_inv_meas = jnp.sum(jnp.where(prev_meas_mask, prev_log_pdf, 0.0)) + + # Current-period measurement density. Shocks only apply to + # factors with has_production_shock=True; scatter them into the + # state-factor ordering and leave deterministic factors as is. + state_shock_contrib = ( + jnp.zeros(n_state_factors) + .at[shock_factor_indices] + .set(shock_sds * z_shock_curr) + ) + theta_t = ( + transition_func(full_prev_with_obs, transition_params) + + state_shock_contrib + ) + # Investment calendar: `inv` is the endogenous investment GENERATED from + # theta_{t-1} that drove the transition to theta_t -- i.e. I_s for step + # s=t-1 -> d=t. @pro: this kernel is shared and UNCHANGED by the calendar + # adapter; correctness now comes from the inputs. Under the adapter the + # current block's `y_meas`/`full_loadings`/`residual_base` are the layout's + # SOURCE-period investment indicators, so `full_loadings @ [theta_t, inv]` + # scores I_s indicators on I_s (contemporaneous in the source period). + # Confirm the re-sourced inputs flow correctly into this unchanged kernel. + all_factors_t = jnp.concatenate([theta_t, inv]) + residuals = residual_base - full_loadings @ all_factors_t + log_pdf = _measurement_log_density( + y_meas, + residuals, + meas_sds, + measurement_families, + measurement_lowers, + measurement_uppers, + ) + log_meas = jnp.sum(jnp.where(meas_mask, log_pdf, 0.0)) + + log_kernel = ( + jnp.log(obs_cond_weights[l_idx] + stability_floor) + + log_prev_inv_meas + + log_meas + ) + log_component_vals.append(log_kernel) + + return jax.scipy.special.logsumexp(jnp.array(log_component_vals)) + + n_halton = joint_nodes.shape[0] + log_contribs = jax.vmap(_log_draw_contribution)(jnp.arange(n_halton)) + return jax.scipy.special.logsumexp(log_contribs + jnp.log(joint_weights)) + + +def _log_normal_pdf(x: Array, mean: Array, sd: Array) -> Array: + """Log of normal PDF, element-wise.""" + return -0.5 * jnp.log(2 * jnp.pi) - jnp.log(sd) - 0.5 * ((x - mean) / sd) ** 2 + + +def create_loglike_and_gradient( + loglike_fn: Callable, + **kwargs: Any, # noqa: ANN401 +) -> Callable: + """Create a jitted function returning (loglike, gradient). + + Args: + loglike_fn: The negative log-likelihood function. + **kwargs: Keyword arguments to partially apply (data, nodes, etc.). + + Return: + Function mapping free_params -> (neg_loglike, gradient). + + """ + partial_fn = functools.partial(loglike_fn, **kwargs) + value_and_grad_fn = jax.value_and_grad(partial_fn) + return jax.jit(value_and_grad_fn) diff --git a/src/skillmodels/af/params.py b/src/skillmodels/af/params.py new file mode 100644 index 00000000..f2013d49 --- /dev/null +++ b/src/skillmodels/af/params.py @@ -0,0 +1,487 @@ +"""Parameter index construction and parsing for AF estimation.""" + +from types import MappingProxyType +from typing import Any + +import numpy as np +import optimagic as om +import pandas as pd + +from skillmodels.common.constraints import FixedConstraintWithValue +from skillmodels.common.types import Normalizations, TransitionInfo + + +def get_initial_period_params_index( + *, + n_mixture_components: int, + latent_factors: tuple[str, ...], + measurements_period_0: dict[str, tuple[str, ...]], + controls: tuple[str, ...], + observed_factors: tuple[str, ...] = (), + reconstructed_factors: tuple[str, ...] = (), +) -> pd.MultiIndex: + """Build parameter index for the initial period (Step 0). + + Parameters estimated in Step 0: + - Mixture weights, means, Cholesky covariances for the joint distribution + of the *state* latent factors (those with + ``has_initial_distribution=True``) and observed factors at period 0. + - Investment equation parameters (one block per ``reconstructed_factor``) + and an investment shock SD per reconstructed factor. These pin the + period-0 value of each reconstructed factor as a deterministic + function of the state latents plus a shock. + - Measurement loadings, intercepts, SDs for period 0. + + When ``observed_factors`` is non-empty, the initial distribution is + modelled over the joint vector (state_latent, observed). Per-individual + observed values let the likelihood condition on them via the Schur + complement, which concentrates Halton draws and improves estimation + precision. + + Args: + n_mixture_components: Number of Gaussian mixture components. + latent_factors: Names of *all* latent factors (including reconstructed + ones). Used for loading entries in the measurement block so + reconstructed factors can still load on period-0 measurements. + measurements_period_0: Factor name -> tuple of measurement variable names. + controls: Control variable names (includes "constant"). + observed_factors: Names of observed factors included in the joint + initial distribution. + reconstructed_factors: Latent factors with + ``has_initial_distribution=False``. These are excluded from the + mixture and receive their own investment-equation block at + period 0 instead. + + Return: + MultiIndex with levels (category, period, name1, name2). + + """ + ind_tups: list[tuple[str, int, str, str]] = [] + state_latent_factors = tuple( + f for f in latent_factors if f not in reconstructed_factors + ) + joint_factors = (*state_latent_factors, *observed_factors) + + # Measurements for the initial step exclude those that only load on + # reconstructed factors; their period-0 measurement params are + # estimated in the transition step 0->1 instead (matching MATLAB's + # transition_01 block convention). + measurements_period_0_filtered = { + f: m for f, m in measurements_period_0.items() if f in state_latent_factors + } + + # Mixture weights + for m in range(n_mixture_components): + ind_tups.append(("mixture_weights", 0, f"mixture_{m}", "-")) + + # Initial means per component per joint factor (state latent + observed) + for m in range(n_mixture_components): + for factor in joint_factors: + ind_tups.append(("initial_states", 0, f"mixture_{m}", factor)) + + # Initial Cholesky covariances per component (lower triangular) over joint factors + for m in range(n_mixture_components): + for row, f1 in enumerate(joint_factors): + for col, f2 in enumerate(joint_factors): + if col <= row: + ind_tups.append( + ( + "initial_cholcovs", + 0, + f"mixture_{m}", + f"{f1}-{f2}", + ) + ) + + # Measurement params for period 0 over state-latent factors only. + # Reconstructed factors' period-0 measurement params live in the + # transition step 0->1 params index. + ind_tups.extend( + _measurement_index_tuples( + period=0, + latent_factors=state_latent_factors, + measurements=measurements_period_0_filtered, + controls=controls, + ) + ) + + return pd.MultiIndex.from_tuples( + ind_tups, + names=["category", "period", "name1", "name2"], + ) + + +def get_transition_period_params_index( + *, + period: int, + latent_factors: tuple[str, ...], + transition_info: TransitionInfo, + measurements_at_period: dict[str, tuple[str, ...]], + controls: tuple[str, ...], + endogenous_factors: tuple[str, ...] = (), + observed_factors: tuple[str, ...] = (), + shock_factors: tuple[str, ...] | None = None, + measurement_index_tuples: list[tuple[str, int, str, str]] | None = None, +) -> pd.MultiIndex: + """Build parameter index for a transition period (Step t, t >= 1). + + Parameters estimated in Step t: + - Transition parameters and shock SDs for period t-1 -> t + - Measurement loadings, intercepts, SDs for period t + - Investment equation params for each endogenous factor (if any) + + Args: + period: Calendar period (t >= 1). + latent_factors: Names of latent (non-endogenous) state factors. + transition_info: Transition function info from ProcessedModel. + measurements_at_period: Factor name -> measurement variables at period t. + controls: Control variable names. + endogenous_factors: Names of endogenous (investment) factors. + observed_factors: Names of observed factors. + shock_factors: Subset of `latent_factors` for which a production shock + SD is estimated. Factors omitted here get no shock SD parameter + and are integrated deterministically (dropping their shock + dimension from the Halton draw). Defaults to `latent_factors`. + measurement_index_tuples: Pre-compiled mixed-calendar measurement index + rows (source/destination calendar adapter). When given, used verbatim + for the measurement block instead of single-period emission. + + Return: + MultiIndex with levels (category, period, name1, name2). + + """ + if shock_factors is None: + shock_factors = latent_factors + ind_tups: list[tuple[str, int, str, str]] = [] + + # Transition parameters (for t-1 -> t) + for factor in latent_factors: + if factor in transition_info.param_names: + for name in transition_info.param_names[factor]: + ind_tups.append(("transition", period - 1, factor, name)) + + # Shock SDs (for t-1 -> t): only factors that have a production shock + for factor in shock_factors: + ind_tups.append(("shock_sds", period - 1, factor, "-")) + + # Investment equation parameters (for t-1) + for endog_factor in endogenous_factors: + # Intercept + ind_tups.append(("investment_eq", period - 1, endog_factor, "constant")) + # Coefficients on each state factor + for factor in latent_factors: + ind_tups.append(("investment_eq", period - 1, endog_factor, factor)) + # Coefficients on observed factors + for obs_factor in observed_factors: + ind_tups.append(("investment_eq", period - 1, endog_factor, obs_factor)) + # Investment shock SD + ind_tups.append(("investment_sds", period - 1, endog_factor, "-")) + + # Measurement params. By default emit period-t rows for all factors; when the + # source/destination calendar adapter supplies a pre-compiled mixed-calendar + # measurement index (destination skills at d, source investment at s, in global + # category order), use it verbatim instead. + if measurement_index_tuples is not None: + ind_tups.extend(measurement_index_tuples) + else: + all_factor_measurements = dict(measurements_at_period) + all_latent = (*latent_factors, *endogenous_factors) + ind_tups.extend( + _measurement_index_tuples( + period=period, + latent_factors=all_latent, + measurements=all_factor_measurements, + controls=controls, + ) + ) + + return pd.MultiIndex.from_tuples( + ind_tups, + names=["category", "period", "name1", "name2"], + ) + + +def _measurement_index_tuples( + *, + period: int, + latent_factors: tuple[str, ...], + measurements: dict[str, tuple[str, ...]], + controls: tuple[str, ...], +) -> list[tuple[str, int, str, str]]: + """Generate index tuples for measurement system parameters. + + Includes controls (intercept/control coefficients), loadings, and + measurement error SDs for all measurements in the given period. + + """ + ind_tups: list[tuple[str, int, str, str]] = [] + + # Collect all unique measurement variables for this period, preserving order + all_measures: list[str] = [] + measure_to_factors: dict[str, list[str]] = {} + for factor, measures in measurements.items(): + for m in measures: + if m not in measure_to_factors: + all_measures.append(m) + measure_to_factors[m] = [] + measure_to_factors[m].append(factor) + + # Controls (intercept + control variables) per measurement + for meas in all_measures: + for ctrl in controls: + ind_tups.append(("controls", period, meas, ctrl)) + + # Loadings: one per (measurement, factor) pair + for meas in all_measures: + for factor in latent_factors: + if factor in measure_to_factors.get(meas, []): + ind_tups.append(("loadings", period, meas, factor)) + + # Measurement error SDs + for meas in all_measures: + ind_tups.append(("meas_sds", period, meas, "-")) + + return ind_tups + + +def get_measurements_per_factor( + factors: MappingProxyType[str, Any], + period: int, +) -> dict[str, tuple[str, ...]]: + """Extract measurement variable names per factor for a given period. + + Args: + factors: ModelSpec.factors mapping. + period: Calendar period index. + + Return: + Dict mapping factor name to tuple of measurement variable names. + + """ + result: dict[str, tuple[str, ...]] = {} + for name, spec in factors.items(): + if period < len(spec.measurements) and len(spec.measurements[period]) > 0: + result[name] = spec.measurements[period] + return result + + +def get_normalizations_for_period( + factors: MappingProxyType[str, Any], + period: int, +) -> dict[str, dict[tuple[str, str], float]]: + """Extract normalization constraints for a given period. + + Return: + Dict of category ("loadings" or "intercepts") to dict of + (measurement, factor_or_control) -> fixed value. + + """ + loading_fixes: dict[tuple[str, str], float] = {} + intercept_fixes: dict[tuple[str, str], float] = {} + + for factor_name, spec in factors.items(): + norms: Normalizations | None = spec.normalizations + if norms is None: + continue + + if norms.loadings is not None and period < len(norms.loadings): + for meas, value in norms.loadings[period].items(): + loading_fixes[(meas, factor_name)] = value + + if norms.intercepts is not None and period < len(norms.intercepts): + for meas, value in norms.intercepts[period].items(): + # intercept normalizations fix the constant control + intercept_fixes[(meas, "constant")] = value + + return {"loadings": loading_fixes, "intercepts": intercept_fixes} + + +def create_af_params_template( + params_index: pd.MultiIndex, + normalizations: dict[str, dict[tuple[str, str], float]], + period: int, + *, + bounds_distance: float = 0.001, +) -> pd.DataFrame: + """Create parameter template DataFrame with bounds and fixed values. + + Args: + params_index: Parameter MultiIndex for this period. + normalizations: Loading and intercept normalizations. + period: Calendar period. + bounds_distance: Minimum distance from zero for SD parameters. + + Return: + DataFrame with columns: value, lower_bound, upper_bound. + + """ + params = pd.DataFrame( + index=params_index, + data={ + "value": np.nan, + "lower_bound": -np.inf, + "upper_bound": np.inf, + }, + ) + + # Set bounds for SD parameters + sd_categories = ("meas_sds", "shock_sds", "investment_sds") + for cat in sd_categories: + mask = params.index.get_level_values("category") == cat + params.loc[mask, "lower_bound"] = bounds_distance + params.loc[mask, "value"] = 0.5 + + # Set bounds for mixture weights + weight_mask = params.index.get_level_values("category") == "mixture_weights" + params.loc[weight_mask, "lower_bound"] = 0.001 + params.loc[weight_mask, "upper_bound"] = 0.999 + + # Bound the log_ces substitution parameter phi from above. Without + # an upper bound the optimizer can drift phi to large positive + # values where exp(states * phi) overflows and the gradient turns + # to NaN. The lower side is well-behaved (phi -> -inf collapses to + # a finite minimum via logsumexp), so leave it unbounded to match + # MATLAB's (-inf, 1 - c) convention. + phi_mask = (params.index.get_level_values("category") == "transition") & ( + params.index.get_level_values("name2") == "phi" + ) + params.loc[phi_mask, "upper_bound"] = 1.0 - bounds_distance + + # Set bounds for Cholesky diagonals (must be positive) + chol_mask = params.index.get_level_values("category") == "initial_cholcovs" + for idx in params.index[chol_mask]: + # Diagonal entries have matching factor names (e.g., "fac1-fac1") + pair = idx[3] # name2 level + parts = pair.split("-") + if len(parts) == 2 and parts[0] == parts[1]: + params.loc[idx, "lower_bound"] = bounds_distance + + # Apply normalization fixes + loading_fixes = normalizations.get("loadings", {}) + for (meas, factor), val in loading_fixes.items(): + loc = ("loadings", period, meas, factor) + if loc in params.index: + params.loc[loc, "value"] = val + params.loc[loc, "lower_bound"] = val + params.loc[loc, "upper_bound"] = val + + intercept_fixes = normalizations.get("intercepts", {}) + for (meas, ctrl), val in intercept_fixes.items(): + loc = ("controls", period, meas, ctrl) + if loc in params.index: + params.loc[loc, "value"] = val + params.loc[loc, "lower_bound"] = val + params.loc[loc, "upper_bound"] = val + + # Default values for parameters still NaN + still_nan = params["value"].isna() + params.loc[still_nan, "value"] = 0.5 + + return params + + +def apply_start_params( + params_template: pd.DataFrame, + start_params: pd.DataFrame, +) -> None: + """Override heuristic defaults with user-supplied starting values. + + Match on the 4-level MultiIndex. Only free (non-fixed) parameters whose + index appears in `start_params` are updated. Fixed parameters and + parameters not in `start_params` are left unchanged. Modifies + `params_template` in place. + """ + common = params_template.index.intersection(start_params.index) + if common.empty: + return + free = ( + params_template.loc[common, "lower_bound"] + != params_template.loc[common, "upper_bound"] + ) + to_update = common[free] + if not to_update.empty: + params_template.loc[to_update, "value"] = start_params.loc[to_update, "value"] + + +def apply_fixed_params( + params_template: pd.DataFrame, + fixed_params: pd.DataFrame, +) -> None: + """Set template values to match user-provided fixed values. + + Used to pin parameters that would otherwise be free -- e.g., identity + transitions and zero shock SDs for time-invariant latent factors. The + pinning itself is enforced through `FixedConstraintWithValue` objects + emitted by `build_optimagic_inputs`; this helper only aligns the + template's starting values with the fixes so early likelihood evaluations + use the correct values. Modifies `params_template` in place. + """ + common = params_template.index.intersection(fixed_params.index) + if common.empty: + return + params_template.loc[common, "value"] = fixed_params.loc[common, "value"] + + +def build_optimagic_inputs( + params_template: pd.DataFrame, + fixed_params: pd.DataFrame | None, +) -> tuple[pd.DataFrame, list[om.constraints.Constraint]]: + """Prepare the params DataFrame and fixed-constraint list for `om.minimize`. + + The AF template encodes normalization fixes by clamping + ``lower_bound == upper_bound`` on affected rows. User-provided + `fixed_params` add further pinned rows. Both are translated into + `FixedConstraintWithValue` objects so optimagic can treat them uniformly + -- in particular so fixes that overlap a `ProbabilityConstraint` selector + get folded correctly. The returned DataFrame has infinite bounds on every + row that is pinned by a constraint, since optimagic rejects finite bounds + on probability selectors. + + Args: + params_template: AF parameter template with value/lower_bound/upper_bound. + fixed_params: Optional user-provided fixes (DataFrame with a "value" + column and the same 4-level MultiIndex as the template). + + Return: + Tuple of (full_params_df, fixed_constraints) where full_params_df + carries the template values plus any user fixes on all rows, and + fixed_constraints is a list of `FixedConstraintWithValue` objects + covering every pinned row (normalisation and user fixes alike). + + """ + params = params_template.copy() + + if fixed_params is not None: + common = params.index.intersection(fixed_params.index) + if not common.empty: + params.loc[common, "value"] = fixed_params.loc[common, "value"] + + fixed_from_bounds = ( + params["lower_bound"].to_numpy() == params["upper_bound"].to_numpy() + ) + fixed_from_user: np.ndarray + if fixed_params is not None: + common = params.index.intersection(fixed_params.index) + fixed_from_user = np.asarray(params.index.isin(common)) + else: + fixed_from_user = np.zeros(len(params), dtype=bool) + + pinned = fixed_from_bounds | fixed_from_user + + constraints: list[om.constraints.Constraint] = [] + for idx in params.index[pinned]: + constraints.append( + FixedConstraintWithValue( + loc=idx, + value=float(params.loc[idx, "value"]), + ) + ) + + # Relax bounds on pinned rows: optimagic rejects finite bounds that + # overlap a probability selector, and the FixedConstraint now does the + # pinning. + pinned_idx = params.index[pinned] + params.loc[pinned_idx, "lower_bound"] = -np.inf + params.loc[pinned_idx, "upper_bound"] = np.inf + + return params, constraints diff --git a/src/skillmodels/af/posterior_states.py b/src/skillmodels/af/posterior_states.py new file mode 100644 index 00000000..0aebf72f --- /dev/null +++ b/src/skillmodels/af/posterior_states.py @@ -0,0 +1,297 @@ +"""Compute posterior state estimates from AF estimation results. + +For each individual and period, compute E[theta_t | Z_{0:t,i}] using +Halton quadrature and the estimated conditional distributions. +""" + +from typing import Any + +import jax +import jax.numpy as jnp +import numpy as np +import pandas as pd +from beartype import beartype +from jax import Array + +from skillmodels._beartype_conf import ESTIMATION_CONF +from skillmodels.af.initial_period import _build_loading_mask, _get_ordered_measures +from skillmodels.af.likelihood import _log_normal_pdf +from skillmodels.af.params import get_measurements_per_factor +from skillmodels.af.types import AFEstimationResult, ConditionalDistribution +from skillmodels.common.model_spec import ModelSpec +from skillmodels.common.state_ranges import create_state_ranges + + +@beartype(conf=ESTIMATION_CONF) +def get_af_posterior_states( + af_result: AFEstimationResult, + model_spec: ModelSpec, + data: pd.DataFrame, + n_halton_points: int = 100, # noqa: ARG001 +) -> dict[str, dict[str, Any]]: + """Compute posterior state means from AF estimation results. + + For each individual i and period t, compute the posterior mean + E[theta_t | Z_{0:t,i}] against the per-observation, income-conditioned + chained importance sample carried by the estimator + (`ConditionalDistribution.samples_per_component`). Each stored sample is + a prior draw already encoding the period-0 income conditioning; it is + weighted by the per-observation prior mixture weights + (`conditional_weights`) and reweighted by the current-period measurement + likelihood, then the posterior mean is the weighted average of the + samples. + + Args: + af_result: Result from `estimate_af()`. Must NOT have gone through + `to_numpy()`, which drops the per-obs chained sample this + computation needs. + model_spec: Model specification. + data: Dataset in long format with MultiIndex (id, period). + n_halton_points: Retained for API/backward compatibility only; no + longer used (posterior means are computed from the carried + chained sample, not from freshly drawn Halton nodes). + + Return: + Dict with "unanchored_states" containing "states" DataFrame + (columns: id, period, factor1, ...) and "state_ranges". + + """ + if model_spec != af_result.model_spec: + msg = ( + "get_af_posterior_states received a model_spec that does not match " + "af_result.model_spec; pass the same specification used for estimation." + ) + raise ValueError(msg) + jax.config.update("jax_enable_x64", val=True) + + idx_names = data.index.names + id_col = str(idx_names[0]) + period_col = str(idx_names[1]) + + # Identify state factors from the conditional distribution dimension + n_state = af_result.conditional_distributions[0].components[0].mean.shape[0] + state_factors = tuple( + f for f in model_spec.factors if not model_spec.factors[f].is_endogenous + )[:n_state] + + rows: list[dict[str, float | int]] = [] + + for t, (period_result, cond_dist) in enumerate( + zip( + af_result.period_results, + af_result.conditional_distributions, + strict=True, + ) + ): + measurements_pt = get_measurements_per_factor(model_spec.factors, period=t) + if not measurements_pt: + continue + + period_mask = data.index.get_level_values(period_col) == t + period_df = data.loc[period_mask] + ids = period_df.index.get_level_values(id_col) + + # Keep only the measurements that load on a STATE factor and are present in + # the data. A state factor's own indicators are parsed correctly at their own + # period, so the single-period extraction below is valid for them. Under the + # source/destination calendar adapter the reconstructed investment's indicators + # load on no state factor and are sourced from a different step (their params + # live at a different `param_period`), so the single-period parse would misread + # them; drop them. Investment is endogenous, not a state coordinate, so it is + # not reported either way. The resulting posterior conditions on the + # state-loading measurements plus the period-0 chained sample; it does not fold + # in the investment indicators' information about the state, so it is slightly + # less precise than (but unbiased relative to) the full-information posterior. + # For plain models every measurement loads on a state factor, so this is a + # no-op and the result is byte-identical to the pre-migration output. + state_meas_pt = { + f: tuple(m for m in measurements_pt[f] if m in period_df.columns) + for f in state_factors + if f in measurements_pt + and any(m in period_df.columns for m in measurements_pt[f]) + } + kept = _get_ordered_measures(state_meas_pt) + if not kept: + continue + + meas_info = _extract_period_measurement_info( + period_result.params, + state_factors, + t, + kept, + state_meas_pt, + ) + measurements = jnp.array( + period_df[kept].to_numpy(dtype=np.float64, na_value=np.nan), + ) + + # Build per-observation control contribution + ctrl_arrays = [] + for ctrl in meas_info["control_names"]: + if ctrl == "constant": + ctrl_arrays.append(np.ones(len(period_df))) + elif ctrl in period_df.columns: + ctrl_arrays.append(period_df[ctrl].to_numpy(dtype=np.float64)) + else: + ctrl_arrays.append(np.zeros(len(period_df))) + controls = jnp.array(np.column_stack(ctrl_arrays)) + control_contrib = controls @ meas_info["control_params"].T + + posterior_means = _compute_posterior_means( + cond_dist=cond_dist, + measurements=measurements, + control_contrib=control_contrib, + full_loadings=meas_info["full_loadings"], + meas_sds=meas_info["meas_sds"], + ) + + for idx_i, obs_id in enumerate(ids): + row: dict[str, float | int] = {id_col: obs_id, "period": t} + for f_idx, factor in enumerate(state_factors): + row[factor] = float(posterior_means[idx_i, f_idx]) + rows.append(row) + + states_df = pd.DataFrame(rows) + state_ranges = create_state_ranges( + filtered_states=states_df, + factors=state_factors, + ) + + return { + "unanchored_states": { + "states": states_df, + "state_ranges": state_ranges, + }, + } + + +def _extract_period_measurement_info( + period_params: pd.DataFrame, + factors: tuple[str, ...], + period: int, + measures: list[str], + measurements_pt: dict[str, tuple[str, ...]], +) -> dict[str, Any]: + """Extract measurement loadings, control contribution, and SDs. + + `measures` is the ordered list of measurement columns to score against the + state `factors`, and `measurements_pt` maps each state factor to those of its + measures. Reconstructed investment indicators, which load on no state factor, + are excluded by the caller so the single-period parse never reaches for + source-period rows (and `_build_loading_mask` never indexes a non-state factor). + """ + loading_mask = _build_loading_mask(measures, factors, measurements_pt) + + loadings_list = [] + for mi, meas in enumerate(measures): + for fi, factor in enumerate(factors): + if loading_mask[mi, fi]: + loc = ("loadings", period, meas, factor) + if loc in period_params.index: + loadings_list.append( + float(period_params.loc[loc, "value"]) # ty: ignore[invalid-argument-type] + ) + + full_loadings = jnp.zeros((len(measures), len(factors))) + full_loadings = full_loadings.at[jnp.array(loading_mask)].set( # noqa: PD008 + jnp.array(loadings_list) + ) + + # Extract ALL control coefficients (not just "constant") + ctrl_entries = period_params.loc[ + period_params.index.get_level_values("category") == "controls" + ] + ctrl_names = ( + sorted(set(ctrl_entries.index.get_level_values("name2"))) + if len(ctrl_entries) > 0 + else ["constant"] + ) + ctrl_params_list = [] + for meas in measures: + for ctrl in ctrl_names: + loc = ("controls", period, meas, ctrl) + if loc in period_params.index: + ctrl_params_list.append(float(period_params.loc[loc, "value"])) + else: + ctrl_params_list.append(0.0) + control_params = jnp.array(ctrl_params_list).reshape(len(measures), len(ctrl_names)) + + sd_list = [ + float(period_params.loc[loc, "value"]) # ty: ignore[invalid-argument-type] + if (loc := ("meas_sds", period, meas, "-")) in period_params.index + else 0.5 + for meas in measures + ] + + return { + "full_loadings": full_loadings, + "control_params": control_params, + "control_names": ctrl_names, + "meas_sds": jnp.array(sd_list), + } + + +def _compute_posterior_means( + *, + cond_dist: ConditionalDistribution, + measurements: Array, + full_loadings: Array, + control_contrib: Array, + meas_sds: Array, +) -> Array: + """Compute posterior means for all individuals at one period. + + Use the per-observation, income-conditioned chained importance sample + (`samples_per_component`) carried by the estimator, weighted by the + per-observation prior mixture weights (`conditional_weights`), and + reweight each sample by the current-period measurement likelihood. + + Return shape (n_obs, n_factors). + """ + if not cond_dist.samples_per_component: + msg = ( + "get_af_posterior_states needs the per-observation chained " + "importance sample (`samples_per_component`). It is dropped by " + "AFEstimationResult.to_numpy(); call get_af_posterior_states on " + "the estimation result BEFORE to_numpy()." + ) + raise ValueError(msg) + + # Stack to shape n_components by n_summary by n_obs by n_state. + samples = jnp.stack([jnp.asarray(s) for s in cond_dist.samples_per_component]) + n_components, n_summary, n_obs = ( + samples.shape[0], + samples.shape[1], + samples.shape[2], + ) + + if cond_dist.conditional_weights is not None: + cond_weights = jnp.asarray(cond_dist.conditional_weights) + else: + cond_weights = jnp.broadcast_to( + jnp.asarray(cond_dist.mixture_weights)[None, :], (n_obs, n_components) + ) + + residuals_base = measurements - control_contrib # (n_obs, n_meas) + # obs-major samples for vmap: (n_obs, n_components, n_summary, n_state) + samples_obs_major = jnp.transpose(samples, (2, 0, 1, 3)) + + def _single_obs( + residual_base: Array, # (n_meas,) + obs_samples: Array, # (n_components, n_summary, n_state) + obs_weights: Array, # (n_components,) + ) -> Array: + def _per_sample(theta: Array) -> Array: # (n_state,) -> scalar + residuals = residual_base - full_loadings @ theta + return jnp.sum( + _log_normal_pdf(residuals, jnp.zeros_like(residuals), meas_sds) + ) + + log_lik = jax.vmap(jax.vmap(_per_sample))(obs_samples) # (n_comp, n_summary) + log_prior = jnp.log(obs_weights + 1e-300)[:, None] - jnp.log(n_summary) + log_post = (log_prior + log_lik).reshape(-1) + post_weights = jax.nn.softmax(log_post) + flat_theta = obs_samples.reshape(-1, obs_samples.shape[-1]) + return jnp.sum(post_weights[:, None] * flat_theta, axis=0) + + return jax.vmap(_single_obs)(residuals_base, samples_obs_major, cond_weights) diff --git a/src/skillmodels/af/step_assembly.py b/src/skillmodels/af/step_assembly.py new file mode 100644 index 00000000..509e7eb7 --- /dev/null +++ b/src/skillmodels/af/step_assembly.py @@ -0,0 +1,204 @@ +"""Assemble an AF transition step's target + importance arrays from a compiled layout. + +Combines the layout (which says *which* measurement belongs in each block and from which +period) with the per-period ID-indexed data frames and the cumulative `HistoricalParams` +to produce the arrays the integrand consumes: + +- the free **target** block (destination skills + source investment) -- data + loading + mask; +- the fixed **importance** block (source skills + every static-persistent factor's + period-0 rows) -- data, loading mask, and fixed loadings/controls/SDs read from + history by each row's true `param_period`. + +All columns are sourced on one common individual-ID set (the intersection across every +period the step touches), so target and importance rows refer to the same individuals. +""" + +from collections.abc import Mapping, Sequence +from dataclasses import dataclass + +import numpy as np +import pandas as pd + +from skillmodels.af.step_data import build_block_loading_mask +from skillmodels.af.step_layout import ( + AFMeasurementTerm, + AFStepLayout, + HistoricalParams, +) + + +@dataclass(frozen=True) +class AFStepArrays: + """Target + importance measurement arrays for one AF transition step.""" + + ids: np.ndarray + """The step's common individual-ID vector (sorted intersection).""" + target_measurements: np.ndarray + """`(n_ids, n_target)` free target measurement values.""" + target_loading_mask: np.ndarray + """`(n_target, n_latent)` target loading mask.""" + target_order: list[tuple[int, tuple[str, int]]] + """`(column, (measurement, data_period))` for each target column.""" + importance_measurements: np.ndarray + """`(n_ids, n_importance)` fixed importance measurement values.""" + importance_loading_mask: np.ndarray + """`(n_importance, n_latent)` importance loading mask.""" + imp_order: list[tuple[int, tuple[str, int]]] + """`(column, (measurement, data_period))` for each importance column.""" + importance_loadings_flat: np.ndarray + """Fixed importance loadings, packed in loading-mask order, from history.""" + importance_control_params: np.ndarray + """`(n_importance, n_controls)` fixed importance control params, from history.""" + importance_meas_sds: np.ndarray + """`(n_importance,)` fixed importance measurement SDs, from history.""" + target_controls: np.ndarray + """`(n_ids, n_target, n_controls)` per-row target control data, each row sourced + from its term's own `control_period` (the free target control coefficients are + estimated, so only the data -- not the contribution -- can be precompiled).""" + importance_control_contrib: np.ndarray + """`(n_ids, n_importance)` fixed importance control contribution, each row's control + data (at its `control_period`) dotted with its fixed control params from history.""" + + +def assemble_step_arrays( + layout: AFStepLayout, + frames_by_period: Mapping[int, pd.DataFrame], + latent_factors: Sequence[str], + historical: HistoricalParams, + controls: tuple[str, ...], +) -> AFStepArrays: + """Assemble the target + importance arrays for one transition step. + + Args: + layout: The compiled step layout. + frames_by_period: Calendar period -> frame indexed by individual ID. + latent_factors: Latent-factor ordering the integrand dots loadings against. + historical: Cumulative parameter registry for fixed importance params. + controls: Control variable names (for importance control params). + + Return: + An `AFStepArrays` with target/importance data, masks, and fixed params. + + """ + # @pro: calendar split for step s->d. The FREE target block = {destination skills + # on theta_d, source investment I_s on period s}; the FIXED importance block = + # {source skills on theta_s, every static-persistent factor's period-0 rows}. The + # importance loadings/controls/SDs are read from `historical` by each row's true + # param_period (period-0 for static factors), so the carry-over density is fixed at + # its originally estimated value. Confirm target/importance membership and the + # history sourcing are the right ones for the MATLAB sequential likelihood. + targets = layout.target_terms() + importances = layout.importance_terms() + + needed = {term.data_period for term in (*targets, *importances)} + common: set | None = None + for period in needed: + period_ids = set(frames_by_period[period].index) + common = period_ids if common is None else (common & period_ids) + # Preserve the individual-ID values as-is (object dtype) rather than coercing to + # int64: the adapter's contract is stable ID alignment, which must hold for string, + # UUID, or other non-integer identifiers, not just CNLSY-style numeric case IDs. + ids = np.array(sorted(common or set()), dtype=object) + + target_order, target_values = _source_block(targets, frames_by_period, ids) + imp_order, imp_values = _source_block(importances, frames_by_period, ids) + target_mask = build_block_loading_mask(targets, latent_factors) + imp_mask = build_block_loading_mask(importances, latent_factors) + + loadings_flat: list[float] = [] + for row, term in enumerate(importances): + for factor_idx, factor in enumerate(latent_factors): + if imp_mask[row, factor_idx]: + loadings_flat.append( + historical.value( + "loadings", term.param_period, term.measurement, factor + ) + ) + control_params = np.array( + [ + [ + historical.value( + "controls", term.control_period, term.measurement, ctrl + ) + for ctrl in controls + ] + for term in importances + ], + dtype=np.float64, + ).reshape(len(importances), len(controls)) + meas_sds = np.array( + [ + historical.value("meas_sds", term.param_period, term.measurement, "-") + for term in importances + ], + dtype=np.float64, + ) + + target_controls = _source_control_tensor(targets, frames_by_period, ids, controls) + imp_controls = _source_control_tensor(importances, frames_by_period, ids, controls) + # Importance control params are fixed (from history), so the contribution can be + # precompiled per row at its own control_period: (n_ids, n_imp, n_ctrl) . (n_imp, + # n_ctrl) -> (n_ids, n_imp). Target control params are estimated, so only the data + # tensor is precompiled; the kernel forms its contribution each iteration. + importance_control_contrib = np.einsum( + "imc,mc->im", imp_controls, control_params, optimize=False + ) + + return AFStepArrays( + ids=ids, + target_measurements=target_values, + target_loading_mask=target_mask, + target_order=list(enumerate(target_order)), + importance_measurements=imp_values, + importance_loading_mask=imp_mask, + imp_order=list(enumerate(imp_order)), + importance_loadings_flat=np.array(loadings_flat, dtype=np.float64), + importance_control_params=control_params, + importance_meas_sds=meas_sds, + target_controls=target_controls, + importance_control_contrib=importance_control_contrib, + ) + + +def _source_block( + terms: Sequence[AFMeasurementTerm], + frames_by_period: Mapping[int, pd.DataFrame], + ids: np.ndarray, +) -> tuple[list[tuple[str, int]], np.ndarray]: + """Source a block's columns on a shared ID set, each from its term's data period.""" + order = [(term.measurement, term.data_period) for term in terms] + if not terms: + return order, np.zeros((len(ids), 0), dtype=np.float64) + columns = [ + frames_by_period[term.data_period] + .loc[ids, term.measurement] + .to_numpy(dtype=np.float64) + for term in terms + ] + return order, np.column_stack(columns) + + +def _source_control_tensor( + terms: Sequence[AFMeasurementTerm], + frames_by_period: Mapping[int, pd.DataFrame], + ids: np.ndarray, + controls: tuple[str, ...], +) -> np.ndarray: + """Source each term's control values on the shared IDs from its `control_period`. + + Returns shape `(n_ids, n_terms, n_controls)`. A `"constant"` control is a column of + ones; a named control is read from that term's `control_period` frame; an absent + control is zero. Reading each row at its own `control_period` is what keeps a + mixed-calendar block (e.g. destination skills at `d` with source investment at `s`) + from evaluating every row against one shared period's controls. + """ + tensor = np.zeros((len(ids), len(terms), len(controls)), dtype=np.float64) + for row, term in enumerate(terms): + frame = frames_by_period[term.control_period] + for col, ctrl in enumerate(controls): + if ctrl == "constant": + tensor[:, row, col] = 1.0 + elif ctrl in frame.columns: + tensor[:, row, col] = frame.loc[ids, ctrl].to_numpy(dtype=np.float64) + return tensor diff --git a/src/skillmodels/af/step_data.py b/src/skillmodels/af/step_data.py new file mode 100644 index 00000000..c509888b --- /dev/null +++ b/src/skillmodels/af/step_data.py @@ -0,0 +1,84 @@ +"""ID-aligned assembly of an AF step's mixed-calendar measurement arrays. + +A compiled `AFStepLayout` draws measurement columns from different calendar periods +(destination skills at `d`, source investment at `s`, static factors at 0). Their +per-period frames can differ in individual order and sample, so columns must be joined +on individual ID -- never concatenated positionally -- and each column sourced from its +term's own `data_period`. +""" + +from collections.abc import Mapping, Sequence + +import numpy as np +import pandas as pd + +from skillmodels.af.step_layout import AFMeasurementTerm + + +def build_step_measurement_array( + terms: Sequence[AFMeasurementTerm], + frames_by_period: Mapping[int, pd.DataFrame], +) -> tuple[np.ndarray, np.ndarray, list[tuple[str, int]]]: + """Assemble one ID-aligned measurement value array for a set of step terms. + + Each term's column is read from `frames_by_period[term.data_period]` at the term's + measurement variable. The step sample is the intersection of individual IDs across + every sourced period, sorted ascending, so columns from different periods are paired + by ID rather than by row position. + + Args: + terms: The measurement terms (e.g. a layout's target or importance terms). + frames_by_period: Calendar period -> frame indexed by individual ID with + measurement-variable columns. + + Return: + `(ids, values, term_order)` where `ids` is the sorted common ID vector, `values` + is `(n_ids, n_terms)` with `values[:, j]` the `j`-th term's column, and + `term_order` lists `(measurement, data_period)` per column. + + """ + if not terms: + ids_empty = np.array([], dtype=object) + return ids_empty, np.zeros((0, 0), dtype=np.float64), [] + + needed_periods = {term.data_period for term in terms} + common_ids: set | None = None + for period in needed_periods: + period_ids = set(frames_by_period[period].index) + common_ids = period_ids if common_ids is None else (common_ids & period_ids) + # Preserve ID values as-is (object dtype) rather than coercing to int64, so + # string/UUID identifiers align rather than raise (matches `assemble_step_arrays`). + ids = np.array(sorted(common_ids or set()), dtype=object) + + columns = [] + term_order: list[tuple[str, int]] = [] + for term in terms: + frame = frames_by_period[term.data_period] + column = frame.loc[ids, term.measurement].to_numpy(dtype=np.float64) + columns.append(column) + term_order.append((term.measurement, term.data_period)) + + values = ( + np.column_stack(columns) + if columns + else np.zeros((len(ids), 0), dtype=np.float64) + ) + return ids, values, term_order + + +def build_block_loading_mask( + terms: Sequence[AFMeasurementTerm], + latent_factors: Sequence[str], +) -> np.ndarray: + """Build the `(n_terms, n_latent_factors)` boolean loading mask for a block. + + Row `j` is `True` in the `latent_factors` columns that term `j` loads on, matching + the latent-factor ordering the integrand dots loadings against. The returned array + has boolean dtype and shape `(len(terms), len(latent_factors))`. + """ + factor_index = {name: i for i, name in enumerate(latent_factors)} + mask = np.zeros((len(terms), len(latent_factors)), dtype=np.bool_) + for row, term in enumerate(terms): + for factor in term.factor_loadings: + mask[row, factor_index[factor]] = True + return mask diff --git a/src/skillmodels/af/step_layout.py b/src/skillmodels/af/step_layout.py new file mode 100644 index 00000000..4b90b105 --- /dev/null +++ b/src/skillmodels/af/step_layout.py @@ -0,0 +1,342 @@ +"""Source/destination calendar layout for the AF estimator. + +The AF estimator is sequential: step `s -> d = s+1` jointly estimates the `s -> d` +transition, the period-`s` investment equation, and a measurement block. The public +`ModelSpec` is contemporaneous -- an investment indicator declared at calendar period +`c` measures `I_c` -- so a calendar-to-step adapter is needed to feed AF's blocks. This +module compiles that adapter as row-level `AFMeasurementTerm`s grouped into one +`AFStepLayout` per transition. + +For step `s -> d` the compiled blocks (validated against MATLAB `likelihood_01`/ +`likelihood_12` + `create_nodes_weights_12`) are: + +- FREE **target**: destination dynamic-state (skill) indicators scored on `theta_d`, + and source endogenous (investment) indicators scored on `I_s`. +- FIXED **importance**: source dynamic-state indicators scored on `theta_s`, plus every + static-persistent factor's period-0 indicators scored on its time-invariant value + (re-applied at every step -- the dropped-MC/MN importance fix). + +Carrying `family`/`lower`/`upper` on each term lets limited-dependent (probit/Tobit) +measurements compose with the shared measurement kernel without a second calendar pass. +""" + +import enum +import math +from collections.abc import Iterable, Mapping, Sequence +from dataclasses import dataclass +from typing import Literal, SupportsFloat, cast + +import pandas as pd + +from skillmodels.common.measurement_models import MeasurementFamily +from skillmodels.common.model_spec import ModelSpec + +# A term's role: a free, this-step target density vs a fixed, historical importance +# reweighting density. +AFTermRole = Literal["target", "importance"] + + +def model_uses_calendar_adapter(model_spec: ModelSpec) -> bool: + """Return whether a model takes the AF source/destination calendar-adapter path. + + The adapter activates for a reconstructed endogenous factor (`is_endogenous` with + `has_initial_distribution=False`) or any static-persistent factor. Plain AF models + keep the single-period path. + """ + specs = model_spec.factors.values() + reconstructed_endog = any( + spec.is_endogenous and not spec.has_initial_distribution for spec in specs + ) + static_persistent = any(spec.af_state_role == "static_persistent" for spec in specs) + return reconstructed_endog or static_persistent + + +def fail_if_calendar_adapter_unsupported(model_spec: ModelSpec, feature: str) -> None: + """Raise if `feature` is requested for a calendar-adapter model. + + AF standard-error inference and posterior-state extraction still reconstruct the + single-period measurement layout, which is wrong for the mixed-calendar adapter: + source-investment params live in the next step's result and the per-step parser + counts differ. Reject adapter models on those paths -- rather than return standard + errors that differentiate the wrong objective or posterior rows attached to the + wrong latent -- until they consume the compiled `AFStepLayout`. + """ + if model_uses_calendar_adapter(model_spec): + msg = ( + f"{feature} is not yet supported for AF models that use the " + "source/destination calendar adapter (a reconstructed-endogenous or " + "static-persistent factor). That path must be migrated to the compiled " + "AFStepLayout before it returns valid results." + ) + raise NotImplementedError(msg) + + +def fail_if_spearman_unsupported_on_adapter( + model_spec: ModelSpec, strategy: str +) -> None: + """Raise if a Spearman moment start is requested for a calendar-adapter model. + + The Spearman/OLS start routine discovers measurements at the destination period and + writes loading/SD rows there, so it does not seed the mixed-calendar target + (destination skills at `d` plus source investment at `s`). Rather than silently fall + back to the constant start -- which contradicts the requested option -- reject it on + the adapter path until a layout-aware moment initializer exists. + """ + if strategy == "spearman" and model_uses_calendar_adapter(model_spec): + msg = ( + "start_params_strategy='spearman' is not supported for AF models that use " + "the source/destination calendar adapter: the moment start discovers " + "measurements at the destination period and would mis-seed the " + "source-investment block. Use start_params_strategy='constant' (or 'amn') " + "until a calendar-aware moment initializer is implemented." + ) + raise NotImplementedError(msg) + + +class AFFactorRole(enum.Enum): + """How a latent factor participates in AF's sequential calendar.""" + + DYNAMIC = "dynamic" + """Real transition, measured across periods (e.g. skills).""" + STATIC_PERSISTENT = "static_persistent" + """Time-invariant; its period-0 measurement density is re-applied as an importance + factor at every transition step (e.g. MC, MN).""" + ENDOGENOUS = "endogenous" + """Reconstructed from the investment equation (`has_initial_distribution=False`).""" + + +class AFEval(enum.Enum): + """Which assembled latent vector a measurement term is scored against.""" + + THETA_DEST = "theta_dest" + """Destination dynamic state `theta_d`.""" + THETA_SRC = "theta_src" + """Source dynamic state `theta_s`.""" + INV_SRC = "inv_src" + """Source endogenous reconstruction `I_s = g(theta_s, Y_s)`.""" + STATIC = "static" + """Time-invariant static-persistent latent coordinate.""" + + +@dataclass(frozen=True) +class AFFactorInfo: + """A factor's AF role and its per-calendar-period measurement declarations.""" + + name: str + """Factor name.""" + role: AFFactorRole + """The factor's AF calendar role.""" + measurements_by_period: tuple[tuple[str, ...], ...] + """Per-period tuple of measurement variable names (empty where inactive).""" + + +@dataclass(frozen=True) +class AFMeasurementTerm: + """One observed measurement equation instance within an AF step.""" + + measurement: str + """Observed measurement variable name.""" + factor_loadings: tuple[str, ...] + """Latent factors this row loads on (a single factor for non-cross-loaded rows).""" + data_period: int + """Calendar period the observed values are read from.""" + param_period: int + """Calendar period the measurement params are indexed under.""" + control_period: int + """Calendar period the controls are read from.""" + eval_node: AFEval + """Which assembled latent vector the loadings are scored against.""" + family: MeasurementFamily + """Measurement family (Gaussian/probit/Tobit).""" + lower: float + """Tobit lower censoring bound (`-inf` if not applicable).""" + upper: float + """Tobit upper censoring bound (`+inf` if not applicable).""" + role: AFTermRole + """`"target"` (free, this step) or `"importance"` (fixed, historical).""" + free: bool + """Whether this row's params are estimated at this step vs fixed from history.""" + + +@dataclass(frozen=True) +class AFStepLayout: + """The compiled measurement layout for one AF transition step `s -> d`.""" + + source_period: int + """The source calendar period `s`.""" + destination_period: int + """The destination calendar period `d = s + 1`.""" + terms: tuple[AFMeasurementTerm, ...] + """All target and importance measurement terms for the step.""" + equation_period: int + """Calendar period indexing the transition, investment-eq, and shock params.""" + observed_factor_period: int + """Calendar period the observed factors (income) entering `g` are read from.""" + + def target_terms(self) -> tuple[AFMeasurementTerm, ...]: + """Return the free, this-step target terms.""" + return tuple(t for t in self.terms if t.role == "target") + + def importance_terms(self) -> tuple[AFMeasurementTerm, ...]: + """Return the fixed, historical importance terms.""" + return tuple(t for t in self.terms if t.role == "importance") + + +@dataclass(frozen=True) +class HistoricalParams: + """Cumulative AF parameter registry keyed by the full param MultiIndex. + + Importance terms re-apply fixed period-0 static-factor (MC/MN) densities, whose + params live in the initial-step result, not the immediately-previous step result. + A single concatenated registry makes every earlier estimate reachable. + """ + + table: pd.DataFrame + """Concatenated per-step params with a unique MultiIndex and a `value` column.""" + + @classmethod + def from_param_frames(cls, frames: Iterable[pd.DataFrame]) -> HistoricalParams: + """Concatenate per-step param frames, rejecting duplicate index entries.""" + combined = pd.concat(list(frames)) + if combined.index.has_duplicates: + dups = sorted(set(combined.index[combined.index.duplicated()].tolist())) + msg = f"Duplicate parameter index entries across AF steps: {dups}" + raise ValueError(msg) + return cls(table=combined) + + def value(self, category: str, period: int, name1: str, name2: str) -> float: + """Return the estimated value at one full-index coordinate.""" + # The index is unique (validated), so this `.loc` is a scalar; pandas-stubs + # still type it as a broad union, hence the cast to a float-coercible value. + cell = self.table.loc[(category, period, name1, name2), "value"] + return float(cast("SupportsFloat", cell)) + + +def compile_target_measurement_index( + layout: AFStepLayout, + controls: tuple[str, ...], +) -> list[tuple[str, int, str, str]]: + """Build the free target measurement param index in the flat parser's global order. + + Emits all control rows, then all loading rows, then all measurement-SD rows (the + order `_parse_transition_params` expects), each tagged with its term's true + `param_period` so a mixed-calendar target (destination skills at `d`, source + investment at `s`) parses correctly. + """ + targets = layout.target_terms() + ind_tups: list[tuple[str, int, str, str]] = [] + for term in targets: + for ctrl in controls: + ind_tups.append(("controls", term.param_period, term.measurement, ctrl)) + for term in targets: + for factor in term.factor_loadings: + ind_tups.append(("loadings", term.param_period, term.measurement, factor)) + for term in targets: + ind_tups.append(("meas_sds", term.param_period, term.measurement, "-")) + return ind_tups + + +def compile_af_step_layouts( + factor_infos: Sequence[AFFactorInfo], + n_periods: int, + families: Mapping[str, tuple[MeasurementFamily, float, float]] | None = None, +) -> tuple[AFStepLayout, ...]: + """Compile one `AFStepLayout` per transition step from contemporaneous declarations. + + Args: + factor_infos: Per-factor AF role + per-period measurement declarations. + n_periods: Number of calendar periods (transitions are `0..n_periods-2`). + families: Optional measurement -> `(family, lower, upper)`; absent measurements + default to Gaussian. + + Return: + One `AFStepLayout` per transition step `s -> s+1`. + + """ + fam_map = dict(families) if families is not None else {} + layouts = [] + for source in range(n_periods - 1): + destination = source + 1 + terms: list[AFMeasurementTerm] = [] + for info in factor_infos: + terms.extend(_terms_for_factor(info, source, destination, fam_map)) + layouts.append( + AFStepLayout( + source_period=source, + destination_period=destination, + terms=tuple(terms), + equation_period=source, + observed_factor_period=source, + ) + ) + return tuple(layouts) + + +def _terms_for_factor( + info: AFFactorInfo, + source: int, + destination: int, + fam_map: Mapping[str, tuple[MeasurementFamily, float, float]], +) -> list[AFMeasurementTerm]: + """Build the step's measurement terms contributed by one factor.""" + if info.role == AFFactorRole.DYNAMIC: + return [ + *_terms_at( + info, destination, AFEval.THETA_DEST, "target", free=True, fam=fam_map + ), + *_terms_at( + info, source, AFEval.THETA_SRC, "importance", free=False, fam=fam_map + ), + ] + if info.role == AFFactorRole.ENDOGENOUS: + # @pro: THE calendar fix. The endogenous (investment) indicators are sourced + # from the SOURCE period s and scored on I_s -- the investment that drives the + # s->d transition -- not from destination d (the prior I_{d-1} mispairing). + # Confirm this matches MATLAB likelihood_01/12, where the period-s investment + # block enters transition_{s->d}. + return _terms_at(info, source, AFEval.INV_SRC, "target", free=True, fam=fam_map) + # STATIC_PERSISTENT: only the period-0 indicators are re-applied as importance. + # @pro: a static factor's period-0 measurement block is re-emitted as a FIXED + # importance term at every step s->d (period-0 rows only, re-applied each step), so + # its time-invariant density carries over in the importance weight without any later + # period's declaration leaking into an earlier step. Is re-anchoring the static + # block at its declared period-0 the correct carry-over weight at every later step? + return _terms_at(info, 0, AFEval.STATIC, "importance", free=False, fam=fam_map) + + +def _terms_at( + info: AFFactorInfo, + period: int, + eval_node: AFEval, + role: AFTermRole, + *, + free: bool, + fam: Mapping[str, tuple[MeasurementFamily, float, float]], +) -> list[AFMeasurementTerm]: + """Build terms for one factor's measurements at a single calendar period.""" + measures = ( + info.measurements_by_period[period] + if period < len(info.measurements_by_period) + else () + ) + terms = [] + for measure in measures: + family, lower, upper = fam.get( + measure, (MeasurementFamily.GAUSSIAN, -math.inf, math.inf) + ) + terms.append( + AFMeasurementTerm( + measurement=measure, + factor_loadings=(info.name,), + data_period=period, + param_period=period, + control_period=period, + eval_node=eval_node, + family=family, + lower=lower, + upper=upper, + role=role, + free=free, + ) + ) + return terms diff --git a/src/skillmodels/af/transition_period.py b/src/skillmodels/af/transition_period.py new file mode 100644 index 00000000..565a35a9 --- /dev/null +++ b/src/skillmodels/af/transition_period.py @@ -0,0 +1,1548 @@ +"""Step t (t >= 1) of the AF estimator: transition period estimation. + +Estimate transition function parameters and measurement system parameters +using Halton quadrature over the latent factor distribution from the +previous period. + +Assumption (income non-informativeness): the carried state distribution is +conditioned on period-0 observed factors (income) Y_0 only. Later-period +income Y_t (t > 0) enters the investment and transition equations but does +NOT re-condition the state distribution -- there is no filtering update for +f(theta_t | Y_{0:t}). This is valid iff Y_t adds no information about +theta_t once Y_0 and the modeled transition history are conditioned on. +""" + +import inspect +from collections.abc import Callable, Mapping + +import jax +import jax.numpy as jnp +import numpy as np +import optimagic as om +import pandas as pd +from jax import Array + +from skillmodels.af.batching import auto_n_obs_per_batch +from skillmodels.af.halton import create_halton_nodes_and_weights +from skillmodels.af.initial_period import _build_loading_mask, _get_ordered_measures +from skillmodels.af.likelihood import af_loglike_transition, create_loglike_and_gradient +from skillmodels.af.params import ( + apply_fixed_params, + apply_start_params, + build_optimagic_inputs, + create_af_params_template, + get_measurements_per_factor, + get_normalizations_for_period, + get_transition_period_params_index, +) +from skillmodels.af.step_assembly import AFStepArrays, assemble_step_arrays +from skillmodels.af.step_layout import ( + AFFactorInfo, + AFFactorRole, + HistoricalParams, + compile_af_step_layouts, + compile_target_measurement_index, + model_uses_calendar_adapter, +) +from skillmodels.af.types import ( + AFEstimationOptions, + AFPeriodResult, + ChainLink, + ConditionalDistribution, + MixtureComponent, +) +from skillmodels.amn.moments import ( + SpearmanResult, + seed_beta_from_ols, + spearman_factor_moments, +) +from skillmodels.common.constraints import ( + filter_within_step_constraints, + reconcile_start_to_equality, +) +from skillmodels.common.measurement_models import GaussianMeasurement +from skillmodels.common.model_spec import ModelSpec +from skillmodels.common.types import ProcessedModel, TransitionInfo, to_plain_dict + + +def estimate_transition_period( + period: int, + model_spec: ModelSpec, + processed_model: ProcessedModel, + measurements: Array, + controls: Array, + prev_measurements: Array, + prev_controls: Array, + prev_period_params: pd.DataFrame, + prev_distribution: ConditionalDistribution, + af_options: AFEstimationOptions, + endogenous_factors: tuple[str, ...] = (), + observed_factors: tuple[str, ...] = (), + observed_factor_data: Array | None = None, + start_params: pd.DataFrame | None = None, + fixed_params: pd.DataFrame | None = None, + user_constraints: list[om.constraints.Constraint] | None = None, + frames_by_period: Mapping[int, pd.DataFrame] | None = None, + historical: HistoricalParams | None = None, +) -> tuple[AFPeriodResult, ConditionalDistribution]: + """Estimate a transition period (Step t, t >= 1) of the AF procedure. + + Given the estimated distribution of latent factors from previous periods, + estimate the transition function parameters and measurement system + parameters for the current period via MLE with Halton quadrature. + + Args: + period: Calendar period index (t >= 1). + model_spec: Model specification. + processed_model: Processed model from `process_model()`. + measurements: Shape (n_obs, n_measures), period t measurement values. + controls: Shape (n_obs, n_controls), period t control values. + prev_measurements: Shape (n_obs, n_prev_measures), period t-1 measurements. + prev_controls: Shape (n_obs, n_prev_controls), period t-1 controls. + prev_period_params: Estimated params DataFrame from period t-1. + prev_distribution: Estimated conditional distribution from period t-1. + af_options: AF estimation options. + endogenous_factors: Names of endogenous (investment) factors. + observed_factors: Names of observed (non-latent) factors. + observed_factor_data: Shape (n_obs, n_obs_factors), observed factor + values. Required when `observed_factors` is non-empty. + start_params: Optional starting values. Matching index entries + override heuristic defaults. + fixed_params: Optional DataFrame with a "value" column pinning + specified parameters (value + bounds both clamped to the value). + user_constraints: Optional optimagic constraint list forwarded + from `estimate_af(constraints=...)`. Entries whose members + all sit in this step's params index are appended to the + step's `om.minimize` call (within-step equalities). + frames_by_period: Per-period individual-ID-indexed measurement frames, + required for endogenous / static-persistent models (the source/ + destination calendar adapter sources the target block from them). + historical: Cumulative parameter registry; supplies the fixed importance + block (source skills + static-persistent period-0 rows) when the + calendar adapter is active. + + Return: + Tuple of (AFPeriodResult, ConditionalDistribution). The returned + distribution is the conditional state distribution + f(theta_t | Z_{0:t}, Y_0), i.e. conditioned on all measurements + through period t and on the *period-0* observed factors (income) + Y_0 via the Schur complement carried from the initial period. It + is NOT conditioned on later-period income Y_1, ..., Y_t: those + enter only the investment and transition equations, never a + re-conditioning/filtering update of the state distribution. + Treating this as the correct period-t state distribution requires + the assumption that, given Y_0 and the modeled transition history, + Y_t carries no further information about theta_t (sequential + non-informativeness of income). The Monte Carlo designs with + Y_t == Y_0 satisfy this by construction; with serially varying, + skill-correlated income it is a substantive restriction. + + """ + factors = processed_model.labels.latent_factors + controls_names = processed_model.labels.controls + + transition_info = processed_model.transition_info + + state_factors = tuple(f for f in factors if f not in endogenous_factors) + n_state = len(state_factors) + n_endog = len(endogenous_factors) + shock_factors = tuple( + f for f in state_factors if model_spec.factors[f].has_production_shock + ) + n_shock = len(shock_factors) + shock_factor_indices = jnp.array( + [state_factors.index(f) for f in shock_factors], dtype=jnp.int32 + ) + # Indices of the state factors within the full latent-factor ordering. + # `prev_full_loadings` has columns in `factors` order (state + + # endogenous, possibly interleaved); the prev-meas factor restricts to + # state-factor columns to mirror MATLAB's likelihood_12 (which omits + # period-(t-1) inv measurements from the chained-sample importance + # weight). Build the mapping explicitly rather than relying on + # state-before-endogenous ordering. + state_factor_indices_in_latent = jnp.array( + [factors.index(f) for f in state_factors], dtype=jnp.int32 + ) + + normalizations = get_normalizations_for_period(model_spec.factors, period=period) + + measurements, all_measures, loading_mask, params_template, step_arrays = ( + _assemble_target_measurements( + period=period, + model_spec=model_spec, + factors=factors, + controls_names=controls_names, + state_factors=state_factors, + shock_factors=shock_factors, + transition_info=transition_info, + endogenous_factors=endogenous_factors, + observed_factors=observed_factors, + measurements=measurements, + frames_by_period=frames_by_period, + historical=historical, + normalizations=normalizations, + ) + ) + + params_template = _initialize_transition_params( + params_template, + measurements, + start_params, + fixed_params, + period=period, + model_spec=model_spec, + state_factors=state_factors, + endogenous_factors=endogenous_factors, + observed_factors=observed_factors, + observed_factor_data=observed_factor_data, + prev_measurements=prev_measurements, + af_options=af_options, + normalizations=normalizations, + ) + + # Collect transition function constraints (only for state factors' transitions) + transition_constraints = _collect_transition_constraints( + transition_info, + state_factors, + processed_model.labels.all_factors, + period, + ) + + _seed_probability_start_values( + params_template, transition_constraints, fixed_params + ) + + # JOINT Halton design covering ALL randomness needed at this step, + # mirroring MATLAB's `create_nodes_weights_01/12`. The chained sample + # θ_0 → θ_{period-1} is rebuilt on-demand inside the integrand from + # this single joint sequence (see `_rebuild_chain_at_period` in + # `af/likelihood.py` and the obsidian note + # `sigma-prod-collapse-2026-05-07.md` for why this matters). + # + # Layout of joint_nodes[j]: + # [:n_state] -- z_state for θ_0 + # for s in 0..period-2: -- prior chain steps + # [n_state+s*zb : n_state+s*zb+n_shock] -- z_P at period s+1 + # [...n_shock+n_endog] -- z_inv at period s+1 + # [tail: n_shock] -- z_P at current step (period) + # [tail: n_endog] -- z_inv at current step (period) + # + # Seed the Halton design with the period index. Each step draws an + # independent low-discrepancy sequence; the joint structure within a + # step delivers proper quasi-uniform 3D+ coverage (vs. the previous + # split scheme which paired two independent sequences at the same j). + n_chain = period - 1 # number of prior transition steps already estimated + z_block = n_shock + n_endog + joint_dim = n_state + n_chain * z_block + z_block + joint_nodes, joint_weights = create_halton_nodes_and_weights( + af_options.n_halton_points, + joint_dim, + seed=period, + ) + + prev_dist_arrays, total_n_transition_params = _prepare_transition_inputs( + prev_distribution, + transition_info, + state_factors, + measurements.shape[0], + ) + + # Build combined transition from raw transition functions. + # Only state factors have transitions; endogenous factors use the investment eq. + raw_funcs = _get_raw_transition_functions( + model_spec, + state_factors, + all_factors=processed_model.labels.all_factors, + param_names=transition_info.param_names, + ) + param_counts = tuple(len(transition_info.param_names[f]) for f in state_factors) + + def combined_transition( + full_states: Array, + params: Array, + ) -> Array: + """Apply per-factor transitions.""" + result = jnp.zeros(n_state) + p_idx = 0 + for i in range(n_state): + n_p = param_counts[i] + factor_params = params[p_idx : p_idx + n_p] + result = result.at[i].set( # noqa: PD008 + raw_funcs[i](full_states, factor_params) + ) + p_idx += n_p + return result + + # Count investment equation params (per endogenous factor: intercept + state + obs) + n_inv_eq_params_per = 1 + n_state + len(observed_factors) if n_endog > 0 else 0 + total_n_inv_params = n_endog * n_inv_eq_params_per + + # Observed factor values for investment equation (from previous period) + n_obs_fac = len(observed_factors) + obs_factor_values = ( + observed_factor_data + if observed_factor_data is not None + else jnp.zeros((measurements.shape[0], n_obs_fac)) + ) + + # Carry forward chain links from prior transition steps for the + # joint-Halton chain rebuild. The period-0→1 step has chain_links == (). + chain_links = prev_distribution.chain_links + + # Per-obs observed factors at the source period of each chain link + # (period 0 for link 0, period 1 for link 1, ...). Stack across + # links into shape (n_obs, n_chain, n_obs_factors). Each ChainLink + # already carries its own period's `obs_factor_values` internally; + # extract them here in obs-major order to match the per-obs map in + # `_transition_loglike_per_obs`. + if len(chain_links) == 0: + obs_factor_values_chain = jnp.zeros((measurements.shape[0], 0, n_obs_fac)) + else: + obs_factor_values_chain = jnp.stack( + [link.obs_factor_values for link in chain_links], axis=1 + ) + + result_params, opt_res = _run_transition_optimization( + params_template=params_template, + prev_period_params=prev_period_params, + model_spec=model_spec, + factors=factors, + period=period, + n_state=n_state, + n_endog=n_endog, + n_shock=n_shock, + shock_factor_indices=shock_factor_indices, + state_factor_indices_in_latent=state_factor_indices_in_latent, + all_measures=all_measures, + controls_names=controls_names, + measurements=measurements, + controls=controls, + prev_measurements=prev_measurements, + prev_controls=prev_controls, + loading_mask=loading_mask, + prev_dist_arrays=prev_dist_arrays, + chain_links=chain_links, + obs_factor_values_chain=obs_factor_values_chain, + joint_nodes=joint_nodes, + joint_weights=joint_weights, + combined_transition=combined_transition, + total_n_transition_params=total_n_transition_params, + total_n_inv_params=total_n_inv_params, + n_inv_eq_params_per=n_inv_eq_params_per, + obs_factor_values=obs_factor_values, + af_options=af_options, + transition_constraints=transition_constraints, + fixed_params=fixed_params, + user_constraints=user_constraints, + importance=step_arrays, + ) + + # Build the next ChainLink from the just-fitted period parameters and + # append it to the chain history. Future transition steps will replay + # this link as part of their joint-Halton chain rebuild. + new_link = _build_chain_link( + period=period, + result_params=result_params, + combined_transition=combined_transition, + shock_factor_indices=shock_factor_indices, + n_inv_eq_params_per=n_inv_eq_params_per, + obs_factor_values=obs_factor_values, + ) + new_chain_links = (*chain_links, new_link) + + # Build the importance-sample SUMMARY (mean, chol_cov per component) + # for posterior-state extraction. This path is no longer load-bearing + # for the transition likelihood (rebuilt on-demand from joint Halton), + # but `posterior_states.py` still consumes the per-component summary + # statistics derived from the chained sample. + updated_dist = _update_conditional_distribution( + prev_distribution=prev_distribution, + result_params=result_params, + combined_transition=combined_transition, + joint_nodes=joint_nodes, + n_state=n_state, + n_endog=n_endog, + n_shock=n_shock, + shock_factor_indices=shock_factor_indices, + observed_factor_values=obs_factor_values, + n_observed_factors=len(observed_factors), + ) + # Carry the accumulated chain history forward. + updated_dist = _replace_chain_links(updated_dist, new_chain_links) + + period_result = AFPeriodResult( + period=period, + params=result_params, + loglikelihood=-float(opt_res.fun), + success=bool(opt_res.success), + optimize_result=opt_res, + ) + + return period_result, updated_dist + + +def _assemble_target_measurements( + *, + period: int, + model_spec: ModelSpec, + factors: tuple[str, ...], + controls_names: tuple[str, ...], + state_factors: tuple[str, ...], + shock_factors: tuple[str, ...], + transition_info: TransitionInfo, + endogenous_factors: tuple[str, ...], + observed_factors: tuple[str, ...], + measurements: Array, + frames_by_period: Mapping[int, pd.DataFrame] | None, + historical: HistoricalParams | None, + normalizations: dict[str, dict[tuple[str, str], float]], +) -> tuple[Array, list[str], np.ndarray, pd.DataFrame, AFStepArrays | None]: + """Build the target measurements, names, loading mask, params template, arrays. + + With endogenous or static-persistent factors the target block mixes calendars + (destination skills at period d, source investment at period s), sourced from the + compiled layout; plain models keep the single-period path, byte-identical to before. + """ + # The calendar adapter applies to RECONSTRUCTED investment (endogenous with + # has_initial_distribution=False): its period-0 indicators are excluded from the + # initial step and scored once, at the 0->1 step, against I_0. Legacy endogenous + # factors that keep an initial distribution stay on the single-period path. + reconstructed_endog = tuple( + f + for f in endogenous_factors + if not model_spec.factors[f].has_initial_distribution + ) + use_layout = bool(reconstructed_endog) or any( + model_spec.factors[f].af_state_role == "static_persistent" + for f in state_factors + ) + if not use_layout: + measurements_pt = get_measurements_per_factor(model_spec.factors, period=period) + all_measures = _get_ordered_measures(measurements_pt) + loading_mask = _build_loading_mask(all_measures, factors, measurements_pt) + params_index = get_transition_period_params_index( + period=period, + latent_factors=state_factors, + transition_info=transition_info, + measurements_at_period=measurements_pt, + controls=controls_names, + endogenous_factors=endogenous_factors, + observed_factors=observed_factors, + shock_factors=shock_factors, + ) + params_template = create_af_params_template( + params_index, normalizations, period=period + ) + return measurements, all_measures, loading_mask, params_template, None + + if frames_by_period is None or historical is None: + msg = ( + "frames_by_period and historical are required for AF models with " + "endogenous or static-persistent factors." + ) + raise ValueError(msg) + _fail_if_endogenous_precedes_state(factors, endogenous_factors) + _fail_if_unsupported_adapter_measurements(model_spec) + n_calendar_periods = max( + len(spec.measurements) for spec in model_spec.factors.values() + ) + layout = compile_af_step_layouts( + _factor_infos_from_spec(model_spec, endogenous_factors), + n_periods=n_calendar_periods, + )[period - 1] + target_terms = layout.target_terms() + # @pro: the free target block for this step is the mixed-calendar set {destination + # skills at d, source investment I_s at s}; the params index, template, and + # normalizations below are indexed at each row's own param_period so the mixed + # calendar parses correctly. The matching fixed importance block is built in + # `_run_transition_optimization`. + step_arrays = assemble_step_arrays( + layout, frames_by_period, factors, historical, controls_names + ) + measurements = jnp.asarray(step_arrays.target_measurements) + all_measures = [term.measurement for term in target_terms] + loading_mask = step_arrays.target_loading_mask + params_index = get_transition_period_params_index( + period=period, + latent_factors=state_factors, + transition_info=transition_info, + measurements_at_period={}, + controls=controls_names, + endogenous_factors=endogenous_factors, + observed_factors=observed_factors, + shock_factors=shock_factors, + measurement_index_tuples=compile_target_measurement_index( + layout, controls_names + ), + ) + params_template = create_af_params_template(params_index, {}, period=period) + params_template = _apply_layout_normalizations( + params_template, model_spec, target_terms + ) + return measurements, all_measures, loading_mask, params_template, step_arrays + + +def _factor_infos_from_spec( + model_spec: ModelSpec, + endogenous_factors: tuple[str, ...], +) -> list[AFFactorInfo]: + """Build per-factor AF role + measurement info for the layout compiler. + + The source-investment calendar is defined only for a *reconstructed* endogenous + factor -- one with `has_initial_distribution=False`. An endogenous factor that still + carries an initial distribution is not a reconstructed investment, so it cannot take + the `ENDOGENOUS` source-period role; the adapter does not support it and raises. + """ + infos: list[AFFactorInfo] = [] + for name, spec in model_spec.factors.items(): + if name in endogenous_factors: + if spec.has_initial_distribution: + msg = ( + f"AF calendar adapter: endogenous factor {name!r} has " + "has_initial_distribution=True. The source-investment calendar is " + "only defined for reconstructed endogenous factors " + "(has_initial_distribution=False); a carried endogenous factor is " + "not supported on the adapter path." + ) + raise ValueError(msg) + role = AFFactorRole.ENDOGENOUS + elif spec.af_state_role == "static_persistent": + role = AFFactorRole.STATIC_PERSISTENT + else: + role = AFFactorRole.DYNAMIC + infos.append( + AFFactorInfo(name=name, role=role, measurements_by_period=spec.measurements) + ) + return infos + + +def _fail_if_endogenous_precedes_state( + latent_factors: tuple[str, ...], + endogenous_factors: tuple[str, ...], +) -> None: + """Reject a public factor order that interleaves endogenous before state factors. + + The shared integrand assembles the latent vector as all dynamic-state factors + followed by all reconstructed-endogenous factors, while the loading mask columns + follow `latent_factors` (public insertion order). If an endogenous factor appears + before a state factor in public order, those two orderings disagree and a loading + row would score the wrong latent. Until the two representations are unified, require + every state factor to precede every endogenous factor and raise otherwise. + """ + endo = set(endogenous_factors) + seen_endogenous = False + for name in latent_factors: + if name in endo: + seen_endogenous = True + elif seen_endogenous: + msg = ( + "AF calendar adapter: all dynamic-state factors must precede every " + f"endogenous factor in the ModelSpec, but state factor {name!r} " + "follows an endogenous factor. Reorder so state factors come first." + ) + raise ValueError(msg) + + +def _fail_if_unsupported_adapter_measurements(model_spec: ModelSpec) -> None: + """Reject cross-loaded or non-Gaussian measurements on the calendar-adapter path. + + The compiler emits one single-factor density term per measurement declaration and + does not plumb measurement-family metadata through the adapter, so a cross-loaded + measurement (declared under more than one factor) would be double-counted as two + rows, and a non-Gaussian (probit/Tobit) measurement would be silently scored as + Gaussian. Both are rejected until row-merging and family plumbing land. + """ + owner: dict[str, str] = {} + for factor_name, spec in model_spec.factors.items(): + for period_measures in spec.measurements: + for measure in period_measures: + if measure in owner and owner[measure] != factor_name: + msg = ( + f"AF calendar adapter: measurement {measure!r} is " + f"cross-loaded on factors {owner[measure]!r} and " + f"{factor_name!r}; cross-loaded measurements are not supported." + ) + raise ValueError(msg) + owner[measure] = factor_name + for measure in owner: + model = model_spec.measurement_models.get(measure) + if model is not None and not isinstance(model, GaussianMeasurement): + msg = ( + f"AF calendar adapter: measurement {measure!r} has a non-Gaussian " + f"family ({type(model).__name__}); the adapter supports only Gaussian " + "measurements." + ) + raise ValueError(msg) + + +def _apply_layout_normalizations( + params_template: pd.DataFrame, + model_spec: ModelSpec, + target_terms: tuple, +) -> pd.DataFrame: + """Pin loading/intercept normalizations at each target term's true param period. + + The mixed-calendar target indexes destination skills at `d` and source investment + at `s`, so normalizations must be applied per row's `param_period` rather than at a + single period (which `create_af_params_template` assumes). + """ + params = params_template + for term in target_terms: + period = term.param_period + for factor in term.factor_loadings: + norms = model_spec.factors[factor].normalizations + if norms is None: + continue + if norms.loadings is not None and period < len(norms.loadings): + val = norms.loadings[period].get(term.measurement) + loc = ("loadings", period, term.measurement, factor) + if val is not None and loc in params.index: + params.loc[loc, ["value", "lower_bound", "upper_bound"]] = val + if norms.intercepts is not None and period < len(norms.intercepts): + val = norms.intercepts[period].get(term.measurement) + loc = ("controls", period, term.measurement, "constant") + if val is not None and loc in params.index: + params.loc[loc, ["value", "lower_bound", "upper_bound"]] = val + return params + + +def _run_transition_optimization( + *, + params_template: pd.DataFrame, + prev_period_params: pd.DataFrame, + model_spec: ModelSpec, + factors: tuple[str, ...], + period: int, + n_state: int, + n_endog: int, + n_shock: int, + shock_factor_indices: Array, + state_factor_indices_in_latent: Array, + all_measures: list[str], + controls_names: tuple[str, ...], + measurements: Array, + controls: Array, + prev_measurements: Array, + prev_controls: Array, + loading_mask: np.ndarray, + prev_dist_arrays: dict[str, Array | np.ndarray], + chain_links: tuple[ChainLink, ...], + obs_factor_values_chain: Array, + joint_nodes: Array, + joint_weights: Array, + combined_transition: Callable, + total_n_transition_params: int, + total_n_inv_params: int, + n_inv_eq_params_per: int, + obs_factor_values: Array, + af_options: AFEstimationOptions, + transition_constraints: list[om.constraints.Constraint], + fixed_params: pd.DataFrame | None, + user_constraints: list[om.constraints.Constraint] | None = None, + importance: AFStepArrays | None = None, +) -> tuple[pd.DataFrame, om.OptimizeResult]: + """Build likelihood, run the optimizer, and return updated params. + + Handle the mechanical optimization setup: construct the log-likelihood + keyword arguments, create the jitted value-and-gradient function, build + the params DataFrame + constraint list, and call `om.minimize`. + + Return: + Tuple of (result_params DataFrame, OptimizeResult). + + """ + full_params_df, fixed_constraints = build_optimagic_inputs( + params_template, fixed_params + ) + + # Importance/previous block. @pro: with the calendar adapter, the importance block + # is the layout's fixed source-skills (+ static-persistent period-0) rows from + # history -- it EXCLUDES the source investment (now the free target), avoiding the + # double-count, and RE-INCLUDES the static factors' period-0 density at every step + # (the dropped-MC/MN fix). Without the adapter, fall back to extracting all + # previous-period measurement params (the legacy single-calendar path). + if importance is not None: + prev_measurements = jnp.asarray(importance.importance_measurements) + # `assemble_step_arrays` returns host (numpy) arrays; move them on-device so + # they satisfy the `jax.Array` kwargs contract under the beartype claw (mirrors + # the target `loading_mask` wrap below). Numerically a no-op. + prev_meas_info = { + "loading_mask": jnp.asarray(importance.importance_loading_mask), + "control_params": jnp.asarray(importance.importance_control_params), + "loadings_flat": jnp.asarray(importance.importance_loadings_flat), + "meas_sds": jnp.asarray(importance.importance_meas_sds), + } + else: + prev_meas_info = _extract_prev_measurement_params( + prev_period_params, + model_spec, + factors, + period - 1, + ) + + n_obs_per_batch = af_options.n_obs_per_batch + if n_obs_per_batch is None: + n_obs_per_batch = auto_n_obs_per_batch( + n_obs=int(measurements.shape[0]), + n_halton_points=af_options.n_halton_points, + n_halton_points_shock=af_options.n_halton_points_shock, + n_latent=n_state, + n_endogenous=n_endog, + ) + + loglike_kwargs = { + "n_state_factors": n_state, + "n_endogenous_factors": n_endog, + "n_shock_factors": n_shock, + "shock_factor_indices": shock_factor_indices, + "state_factor_indices_in_latent": state_factor_indices_in_latent, + "n_measures": len(all_measures), + "n_controls": len(controls_names), + "measurements": measurements, + "controls": controls, + "loading_mask": jnp.array(loading_mask), + "prev_measurements": prev_measurements, + "prev_controls": prev_controls, + "prev_loading_mask": prev_meas_info["loading_mask"], + "prev_control_params": prev_meas_info["control_params"], + "prev_loadings_flat": prev_meas_info["loadings_flat"], + "prev_meas_sds": prev_meas_info["meas_sds"], + "prev_distribution": prev_dist_arrays, + "chain_links": chain_links, + "obs_factor_values_chain": obs_factor_values_chain, + "joint_nodes": joint_nodes, + "joint_weights": joint_weights, + "transition_func": combined_transition, + "total_n_transition_params": total_n_transition_params, + "total_n_inv_params": total_n_inv_params, + "n_inv_eq_params_per": n_inv_eq_params_per, + "observed_factor_values": obs_factor_values, + "stability_floor": af_options.stability_floor, + "n_obs_per_batch": n_obs_per_batch, + } + if importance is not None: + # Layout path: feed the per-row target control data and the precompiled + # importance control contribution, each sourced at its own control_period, so + # the kernel stops applying one shared period's controls to a mixed block. + loglike_kwargs["target_control_tensor"] = jnp.asarray( + importance.target_controls + ) + loglike_kwargs["prev_control_contrib"] = jnp.asarray( + importance.importance_control_contrib + ) + + loglike_and_grad = create_loglike_and_gradient( + af_loglike_transition, + **loglike_kwargs, + ) + + def fun(params_df: pd.DataFrame) -> float: + val, _grad = loglike_and_grad(jnp.array(params_df["value"].to_numpy())) + return float(val) + + def fun_and_jac(params_df: pd.DataFrame) -> tuple[float, np.ndarray]: + val, grad = loglike_and_grad(jnp.array(params_df["value"].to_numpy())) + return float(val), np.array(grad) + + within_step_constraints = filter_within_step_constraints( + user_constraints, full_params_df.index + ) + combined_constraints = ( + list(transition_constraints) + list(fixed_constraints) + within_step_constraints + ) + full_params_df = reconcile_start_to_equality( + full_params_df, within_step_constraints + ) + + opt_res = om.minimize( + fun=fun, + params=full_params_df[["value"]], + algorithm=af_options.optimizer_algorithm, + bounds=om.Bounds( + lower=full_params_df["lower_bound"], + upper=full_params_df["upper_bound"], + ), + constraints=combined_constraints or None, + fun_and_jac=fun_and_jac, + **to_plain_dict(af_options.optimizer_options), + ) + + result_params = params_template.copy() + result_params["value"] = opt_res.params["value"].to_numpy() + + return result_params, opt_res + + +def _collect_transition_constraints( + transition_info: TransitionInfo, + factors: tuple[str, ...], + all_factors: tuple[str, ...], + period: int, +) -> list[om.constraints.Constraint]: + """Collect transition function constraints for the AF optimizer. + + Look for `constraints_{function_name}()` in `transition_functions.py`, + mirroring how CHS collects them in `constraints.py`. + """ + import skillmodels.common.transition_functions as tf_mod # noqa: PLC0415 + + constraints: list[om.constraints.Constraint] = [] + for factor in factors: + if factor not in transition_info.function_names: + continue + fname = transition_info.function_names[factor] + constraint_fn = getattr(tf_mod, f"constraints_{fname}", None) + if constraint_fn is not None: + constraints.append( + constraint_fn( + factor=factor, + factors=all_factors, + aug_period=period - 1, + ) + ) + return constraints + + +def _extract_prev_measurement_params( + prev_params: pd.DataFrame, + model_spec: ModelSpec, + factors: tuple[str, ...], + prev_period: int, +) -> dict[str, Array]: + """Extract estimated measurement params from the previous period. + + These are used as fixed (known) values when conditioning the transition + likelihood on individual-specific previous-period data. + """ + measurements_prev = get_measurements_per_factor( + model_spec.factors, period=prev_period + ) + all_prev_measures = _get_ordered_measures(measurements_prev) + loading_mask = _build_loading_mask(all_prev_measures, factors, measurements_prev) + + # Extract loadings (packed, in order of the mask) + loadings_list = [] + for mi, meas in enumerate(all_prev_measures): + for fi, factor in enumerate(factors): + if loading_mask[mi, fi]: + loc = ("loadings", prev_period, meas, factor) + if loc in prev_params.index: + loadings_list.append( + float(prev_params.loc[loc, "value"]) # ty: ignore[invalid-argument-type] + ) + + # Extract control params + ctrl_entries = prev_params.loc[ + prev_params.index.get_level_values("category") == "controls" + ] + ctrl_names = ( + sorted(set(ctrl_entries.index.get_level_values("name2"))) + if len(ctrl_entries) > 0 + else ["constant"] + ) + ctrl_params_list = _collect_ctrl_params( + prev_params, + all_prev_measures, + ctrl_names, + prev_period, + ) + control_params = jnp.array(ctrl_params_list).reshape( + len(all_prev_measures), len(ctrl_names) + ) + + # Extract measurement SDs + meas_sds_list = [] + for meas in all_prev_measures: + loc = ("meas_sds", prev_period, meas, "-") + if loc in prev_params.index: + meas_sds_list.append( + float(prev_params.loc[loc, "value"]) # ty: ignore[invalid-argument-type] + ) + + return { + "loading_mask": jnp.array(loading_mask), + "loadings_flat": jnp.array(loadings_list), + "control_params": control_params, + "meas_sds": jnp.array(meas_sds_list), + } + + +def _collect_ctrl_params( + prev_params: pd.DataFrame, + measures: list[str], + ctrl_names: list[str], + prev_period: int, +) -> list[float]: + """Collect control parameter values from the previous period's estimate.""" + result = [] + for meas in measures: + for ctrl in ctrl_names: + loc = ("controls", prev_period, meas, ctrl) + if loc in prev_params.index: + result.append( + float(prev_params.loc[loc, "value"]) # ty: ignore[invalid-argument-type] + ) + else: + result.append(0.0) + return result + + +def _get_raw_transition_functions( + model_spec: ModelSpec, + factors: tuple[str, ...], + *, + all_factors: tuple[str, ...], + param_names: Mapping[str, tuple[str, ...]], +) -> tuple[Callable, ...]: + """Get the raw (non-vmapped) transition functions for each factor. + + Returns callables with a uniform `(states, params_array) -> scalar` + signature for use inside JIT-compiled code. Built-in transitions + from `transition_functions.py` already match that signature; + `@register_params`-decorated user functions take individual factor + arguments plus a `params` dict, so they are wrapped here to convert + from AF's packed representation. + """ + import skillmodels.common.transition_functions as tf_mod # noqa: PLC0415 + + funcs: list[Callable] = [] + for factor in factors: + spec = model_spec.factors[factor] + tf = spec.transition_function + if isinstance(tf, str): + funcs.append(getattr(tf_mod, tf)) + elif callable(tf): + if hasattr(tf, "__registered_params__"): + funcs.append( + _wrap_registered_transition_function( + tf, + all_factors=all_factors, + param_names=tuple(param_names[factor]), + ) + ) + else: + funcs.append(tf) + else: + msg = f"Factor '{factor}': no transition function specified." + raise TypeError(msg) + return tuple(funcs) + + +def _wrap_registered_transition_function( + user_func: Callable, + *, + all_factors: tuple[str, ...], + param_names: tuple[str, ...], +) -> Callable: + """Bridge `@register_params` user functions to AF's `(states, params)` convention. + + A user-defined transition function takes one positional argument + per factor it consumes (matching factor names in `all_factors`) + plus a final `params` dict keyed by `__registered_params__`. AF's + `combined_transition`, in contrast, supplies a packed state vector + and a flat parameter slice. This wrapper looks up each consumed + factor's position in `all_factors`, slices `states` accordingly, + rebuilds the `params` dict, and forwards the call. + """ + sig = inspect.signature(user_func) + arg_names = [name for name in sig.parameters if name != "params"] + arg_positions = tuple(all_factors.index(name) for name in arg_names) + + def wrapped(states: Array, factor_params: Array) -> Array: + kwargs: dict[str, Array | dict[str, Array]] = { + name: states[pos] + for name, pos in zip(arg_names, arg_positions, strict=True) + } + kwargs["params"] = dict(zip(param_names, factor_params, strict=True)) + return user_func(**kwargs) + + return wrapped + + +def _prepare_transition_inputs( + prev_distribution: ConditionalDistribution, + transition_info: TransitionInfo, + factors: tuple[str, ...], + n_obs: int, +) -> tuple[dict[str, Array | np.ndarray], int]: + """Pack the period-0 conditional distribution payload for the likelihood. + + Returns a dict the transition likelihood reads to seed its on-demand + chain rebuild from a joint Halton draw. The chain is rebuilt fresh at + every likelihood call from the period-0 cond_means/cond_chols plus + the carried `chain_links` (handled separately); no static + chained-sample carry-over is consumed here. + + Return: + Tuple of (prev_dist_arrays dict, n_transition_params). The dict + contains keys "cond_weights" (per-obs Bayes-posterior mixture + weights), "cond_means" (per-component, per-obs Schur-conditional + means at period 0), and "cond_chols" (per-component + Schur-conditional Cholesky factors at period 0). + + """ + n_components = len(prev_distribution.components) + + if prev_distribution.conditional_weights is not None: + cond_weights = prev_distribution.conditional_weights + else: + cond_weights = jnp.broadcast_to( + prev_distribution.mixture_weights[None, :], + (n_obs, n_components), + ) + + if prev_distribution.cond_means is None or prev_distribution.cond_chols is None: + msg = ( + "prev_distribution must carry cond_means and cond_chols (the " + "period-0 Schur-conditional payload). Initial period must be " + "estimated before any transition step." + ) + raise ValueError(msg) + + prev_dist_arrays = { + "cond_weights": cond_weights, + "cond_means": prev_distribution.cond_means, + "cond_chols": prev_distribution.cond_chols, + } + + total_n_transition_params = sum( + len(transition_info.param_names[f]) + for f in factors + if f in transition_info.param_names + ) + + return prev_dist_arrays, total_n_transition_params + + +def _seed_probability_start_values( + params_template: pd.DataFrame, + transition_constraints: list[om.constraints.Constraint], + fixed_params: pd.DataFrame | None, +) -> None: + """Seed start values for probability-constrained selectors. + + Distribute ``1 - sum(fixed_values)`` uniformly over the unfixed entries + so the simplex sums to one before optimization. + """ + fixed_loc = set(fixed_params.index) if fixed_params is not None else set() + for constr in transition_constraints: + if not isinstance(constr, om.ProbabilityConstraint): + continue + prob_idx = constr.selector(params_template[["value"]]).index + fixed_mask = prob_idx.isin(fixed_loc) + fixed_sum = ( + float(params_template.loc[prob_idx[fixed_mask], "value"].sum()) + if fixed_mask.any() + else 0.0 + ) + free_prob_idx = prob_idx[~fixed_mask] + if len(free_prob_idx) > 0: + params_template.loc[free_prob_idx, "value"] = (1.0 - fixed_sum) / len( + free_prob_idx + ) + + +def _initialize_transition_params( + params_template: pd.DataFrame, + measurements: Array, + start_params: pd.DataFrame | None = None, + fixed_params: pd.DataFrame | None = None, + *, + period: int | None = None, + model_spec: ModelSpec | None = None, + state_factors: tuple[str, ...] = (), + endogenous_factors: tuple[str, ...] = (), + observed_factors: tuple[str, ...] = (), + observed_factor_data: Array | None = None, + prev_measurements: Array | None = None, + af_options: AFEstimationOptions | None = None, + normalizations: dict[str, dict[tuple[str, str], float]] | None = None, +) -> pd.DataFrame: + """Initialize transition period parameters with reasonable defaults. + + If `start_params` is provided, matching entries override the defaults. + If `fixed_params` is provided, matching entries are pinned (value + + bounds clamped). + + When ``af_options.start_params_strategy == "spearman"``, run + Spearman cross-covariance estimation per factor at the current period + and seed loadings, sigma_meas, sigma_shock, sigma_inv, and inv-equation β from + those moments. Falls back to the static defaults below for any factor + with fewer than two measurements or where Spearman identification is + degenerate. + """ + params = params_template.copy() + meas_np = np.array(measurements) + + # Transition params: small values (near identity) + trans_mask = params.index.get_level_values("category") == "transition" + for idx in params.index[trans_mask]: + if params.loc[idx, "lower_bound"] != params.loc[idx, "upper_bound"]: + # Set linear terms close to identity + params.loc[idx, "value"] = 0.5 + + # Shock SDs: moderate + shock_mask = params.index.get_level_values("category") == "shock_sds" + params.loc[shock_mask, "value"] = 0.5 + + # Measurement SDs from data + sd_mask = params.index.get_level_values("category") == "meas_sds" + for i, idx in enumerate(params.index[sd_mask]): + if i < meas_np.shape[1]: + obs_sd = float(np.nanstd(meas_np[:, i])) + params.loc[idx, "value"] = max(obs_sd * 0.5, 0.01) + + # Loadings to 1.0 where free + load_mask = params.index.get_level_values("category") == "loadings" + for idx in params.index[load_mask]: + if params.loc[idx, "lower_bound"] != params.loc[idx, "upper_bound"]: + params.loc[idx, "value"] = 1.0 + + # Optional moment-based override: seed loadings / sigma_meas / sigma_shock / + # sigma_inv from Spearman cross-covariances of the current-period + # measurements. This puts the optimizer near the strongly-identified + # MLE neighborhood; for sigma_inv_0 specifically, this is the difference + # between converging at truth and drifting to the lower bound along + # the sigma_inv / sigma_meas constant-Var ridge. + # The Spearman moment override discovers measurements at the destination period and + # writes loading/SD rows there, so it is not aware of the mixed-calendar target + # (destination skills at d + source investment at s). On the calendar-adapter path + # it would mis-seed the source-investment block, so skip it and keep the constant + # defaults (which converge for the adapter); calendar-aware moment seeding is future + # work. The point estimate is unaffected -- only start values differ. + if ( + af_options is not None + and af_options.start_params_strategy == "spearman" + and model_spec is not None + and period is not None + and not model_uses_calendar_adapter(model_spec) + ): + params = _apply_moment_based_overrides_transition( + params, + measurements, + prev_measurements=prev_measurements, + observed_factor_data=observed_factor_data, + model_spec=model_spec, + period=period, + state_factors=state_factors, + endogenous_factors=endogenous_factors, + observed_factors=observed_factors, + normalizations=normalizations or {}, + ) + + if start_params is not None: + apply_start_params(params, start_params) + + if fixed_params is not None: + apply_fixed_params(params, fixed_params) + + return params + + +def _apply_moment_based_overrides_transition( # noqa: C901, PLR0912, PLR0915 + params: pd.DataFrame, + measurements: Array, + *, + prev_measurements: Array | None, + observed_factor_data: Array | None, + model_spec: ModelSpec, + period: int, + state_factors: tuple[str, ...], + endogenous_factors: tuple[str, ...], + observed_factors: tuple[str, ...], + normalizations: dict[str, dict[tuple[str, str], float]], +) -> pd.DataFrame: + """Override transition-period params with Spearman cross-cov moments. + + For each factor with at least two measurements at the current period, + run `spearman_factor_moments` and write back loadings, sigma_meas, and + derive a starting sigma_shock (state factors) or sigma_inv (endogenous factors) + from the latent variance. Investment-equation β coefficients are seeded + via OLS of the endogenous-factor anchor measurement on the prev-period + state anchor measurements plus the observed factors. + """ + out = params.copy() + meas_np = np.array(measurements) + measurements_pt = get_measurements_per_factor(model_spec.factors, period=period) + all_measures = _get_ordered_measures(measurements_pt) + meas_index = {m: i for i, m in enumerate(all_measures)} + loading_norms = normalizations.get("loadings", {}) + + spearman_results: dict[str, SpearmanResult] = {} + + for factor, factor_meas in measurements_pt.items(): + if len(factor_meas) < 2: + continue + cols = [meas_index[m] for m in factor_meas if m in meas_index] + if len(cols) < 2: + continue + if max(cols) >= meas_np.shape[1]: + continue + sub = meas_np[:, cols] + + anchor_loading = 1.0 + anchor_local = 0 + for local_idx, meas_name in enumerate(factor_meas): + if (meas_name, factor) in loading_norms: + anchor_local = local_idx + anchor_loading = float(loading_norms[(meas_name, factor)]) + break + + result = spearman_factor_moments( + sub, + anchor_idx=anchor_local, + anchor_loading=anchor_loading, + ) + if not result.valid: + continue + spearman_results[factor] = result + + # Override loadings (skip pinned rows). + for local_idx, meas_name in enumerate(factor_meas): + loc = ("loadings", period, meas_name, factor) + if loc not in out.index: + continue + if out.loc[loc, "lower_bound"] != out.loc[loc, "upper_bound"]: + out.loc[loc, "value"] = float(result.loadings[local_idx]) + + # Override measurement SDs (skip pinned rows). + for local_idx, meas_name in enumerate(factor_meas): + loc = ("meas_sds", period, meas_name, "-") + if loc not in out.index: + continue + if out.loc[loc, "lower_bound"] != out.loc[loc, "upper_bound"]: + out.loc[loc, "value"] = float(result.meas_sds[local_idx]) + + # Seed shock_sds (state factors) and investment_sds (endogenous + # factors), and the investment equation's β coefficients, via OLS of + # the current-period anchor measurement on the prev-period state + # anchors plus observed factors. The OLS residual variance gives + # sigma_shock² + sigma_meas² (state) or sigma_inv² + sigma_meas² (endogenous); + # subtracting sigma_meas² gives a clean starting point for the latent + # shock SD that correctly accounts for variance explained by + # observed factors and the prev state. (Without this subtraction + # the seed is dominated by observed-factor variance, which can make + # sigma_inv start orders of magnitude above truth.) + if prev_measurements is not None and len(state_factors) > 0: + prev_meas_np = np.array(prev_measurements) + prev_measurements_pt = get_measurements_per_factor( + model_spec.factors, period=period - 1 + ) + prev_all_measures = _get_ordered_measures(prev_measurements_pt) + prev_meas_index = {m: i for i, m in enumerate(prev_all_measures)} + + state_anchor_cols: list[int] = [] + for sf in state_factors: + sf_meas = prev_measurements_pt.get(sf, ()) + if not sf_meas or sf_meas[0] not in prev_meas_index: + state_anchor_cols.append(-1) + continue + state_anchor_cols.append(prev_meas_index[sf_meas[0]]) + + obs_data = ( + np.array(observed_factor_data) + if observed_factor_data is not None and len(observed_factors) > 0 + else np.zeros((prev_meas_np.shape[0], 0)) + ) + + anchors_ok = all(c >= 0 for c in state_anchor_cols) + + # Seed sigma_shock for each state factor: residual variance of + # OLS(Z_state_anchor_t ~ Z_state_anchor_{t-1}, observed) minus + # sigma_meas². + if anchors_ok: + state_anchor_data = prev_meas_np[:, state_anchor_cols] + regressors_state = np.column_stack([state_anchor_data, obs_data]) + for sf in state_factors: + if sf not in spearman_results: + continue + sf_meas = measurements_pt.get(sf, ()) + if not sf_meas: + continue + anchor_idx = meas_index.get(sf_meas[0]) + if anchor_idx is None: + continue + response = meas_np[:, anchor_idx] + if response.shape[0] != regressors_state.shape[0]: + continue + beta_hat = seed_beta_from_ols(response, regressors_state) + if not np.all(np.isfinite(beta_hat)): + continue + fitted = regressors_state @ beta_hat + resid = response - fitted + resid_finite = resid[np.isfinite(resid)] + if resid_finite.size < 2: + continue + resid_var = float(np.var(resid_finite, ddof=1)) + sigma_meas_anchor = float(spearman_results[sf].meas_sds[0]) + seed_sd = float(np.sqrt(max(resid_var - sigma_meas_anchor**2, 1e-6))) + loc = ("shock_sds", period - 1, sf, "-") + if ( + loc in out.index + and out.loc[loc, "lower_bound"] != out.loc[loc, "upper_bound"] + ): + out.loc[loc, "value"] = seed_sd + + # Seed sigma_inv and inv-equation β for each endogenous factor. β goes + # from OLS coefs (the same regression used for the sigma_inv residual). + if anchors_ok and len(endogenous_factors) > 0: + state_anchor_data = prev_meas_np[:, state_anchor_cols] + regressors_inv = np.column_stack([state_anchor_data, obs_data]) + for ef in endogenous_factors: + if ef not in spearman_results: + continue + ef_meas = measurements_pt.get(ef, ()) + if not ef_meas: + continue + ef_anchor_idx = meas_index.get(ef_meas[0]) + if ef_anchor_idx is None: + continue + response = meas_np[:, ef_anchor_idx] + if response.shape[0] != regressors_inv.shape[0]: + continue + beta_hat = seed_beta_from_ols(response, regressors_inv) + if not np.all(np.isfinite(beta_hat)): + continue + fitted = regressors_inv @ beta_hat + resid = response - fitted + resid_finite = resid[np.isfinite(resid)] + if resid_finite.size < 2: + continue + resid_var = float(np.var(resid_finite, ddof=1)) + sigma_meas_anchor = float(spearman_results[ef].meas_sds[0]) + seed_sd = float(np.sqrt(max(resid_var - sigma_meas_anchor**2, 1e-6))) + loc = ("investment_sds", period - 1, ef, "-") + if ( + loc in out.index + and out.loc[loc, "lower_bound"] != out.loc[loc, "upper_bound"] + ): + out.loc[loc, "value"] = seed_sd + + # Write β into inv_eq rows. + state_betas = beta_hat[: len(state_factors)] + obs_betas = beta_hat[len(state_factors) :] + for sf, b in zip(state_factors, state_betas, strict=True): + loc = ("investment_eq", period - 1, ef, sf) + if ( + loc in out.index + and out.loc[loc, "lower_bound"] != out.loc[loc, "upper_bound"] + ): + out.loc[loc, "value"] = float(b) + for of, b in zip(observed_factors, obs_betas, strict=True): + loc = ("investment_eq", period - 1, ef, of) + if ( + loc in out.index + and out.loc[loc, "lower_bound"] != out.loc[loc, "upper_bound"] + ): + out.loc[loc, "value"] = float(b) + + return out + + +def _replace_chain_links( + cond_dist: ConditionalDistribution, + chain_links: tuple[ChainLink, ...], +) -> ConditionalDistribution: + """Return a new ConditionalDistribution with `chain_links` replaced. + + Used by `estimate_transition_period` to carry the accumulated chain + history forward (one extra `ChainLink` per estimated transition). + """ + return ConditionalDistribution( + mixture_weights=cond_dist.mixture_weights, + components=cond_dist.components, + samples_per_component=cond_dist.samples_per_component, + conditional_weights=cond_dist.conditional_weights, + cond_means=cond_dist.cond_means, + cond_chols=cond_dist.cond_chols, + chain_links=chain_links, + ) + + +def _build_chain_link( + *, + period: int, + result_params: pd.DataFrame, + combined_transition: Callable, + shock_factor_indices: Array, + n_inv_eq_params_per: int, + obs_factor_values: Array, +) -> ChainLink: + """Pack a freshly-fitted period's parameters into a ChainLink. + + The resulting `ChainLink` is appended to the carried `chain_links` so + that downstream transition periods can replay this period inside their + joint-Halton chain rebuild (see `_rebuild_chain_at_period`). + """ + transition_mask = result_params.index.get_level_values("category") == "transition" + transition_params = jnp.array( + result_params.loc[transition_mask, "value"].to_numpy() + ) + + shock_mask = result_params.index.get_level_values("category") == "shock_sds" + shock_sds = jnp.array(result_params.loc[shock_mask, "value"].to_numpy()) + + inv_eq_mask = result_params.index.get_level_values("category") == "investment_eq" + inv_eq_params = jnp.array(result_params.loc[inv_eq_mask, "value"].to_numpy()) + + inv_sd_mask = result_params.index.get_level_values("category") == "investment_sds" + inv_sds = jnp.array(result_params.loc[inv_sd_mask, "value"].to_numpy()) + + return ChainLink( + period=period, + transition_func=combined_transition, + transition_params=transition_params, + shock_sds=shock_sds, + shock_factor_indices=shock_factor_indices, + inv_eq_params=inv_eq_params, + inv_sds=inv_sds, + n_inv_eq_params_per=n_inv_eq_params_per, + obs_factor_values=obs_factor_values, + ) + + +def _update_conditional_distribution( + prev_distribution: ConditionalDistribution, + result_params: pd.DataFrame, + combined_transition: Callable, + joint_nodes: Array, + n_state: int, + n_endog: int, + n_shock: int, + shock_factor_indices: Array, + observed_factor_values: Array, + n_observed_factors: int, +) -> ConditionalDistribution: + """Build the next-period importance sample by chaining forward. + + For each mixture component l, each Halton index j, and each observation + i: + + 1. ``theta_prev = prev_samples[l][j, i, :]`` (no fresh draw). + 2. ``inv = beta_0 + beta_state @ theta_prev + beta_obs @ Y_i + + sigma_inv * z_inv[j]`` (current-period investment equation, + evaluated at the just-estimated parameters and the same z_inv that + the period-t likelihood used). + 3. ``theta_t = transition(full_prev_with_obs, trans_params) + + sigma_prod * z_prod[j]``. + + The result is a per-component array of shape + ``(n_halton, n_obs, n_state)`` which we hand to the next period's + likelihood. Per-component summary stats (mean, chol_cov) are computed + from each new sample for use by `posterior_states` and `inference`. + + This mirrors MATLAB's `create_nodes_weights_12` style: the previous + period's Halton-driven samples are propagated through the just-fitted + chain, and that chained sample becomes the next period's importance + distribution. + """ + # Extract estimated transition params, shock SDs, investment-equation + # params, and investment-shock SDs. + trans_mask = result_params.index.get_level_values("category") == "transition" + shock_mask = result_params.index.get_level_values("category") == "shock_sds" + inv_eq_mask = result_params.index.get_level_values("category") == "investment_eq" + inv_sd_mask = result_params.index.get_level_values("category") == "investment_sds" + + trans_params = jnp.array(result_params.loc[trans_mask, "value"].to_numpy()) + shock_sds = jnp.array(result_params.loc[shock_mask, "value"].to_numpy()) + inv_eq_params = ( + jnp.array(result_params.loc[inv_eq_mask, "value"].to_numpy()) + if inv_eq_mask.any() + else jnp.zeros(0) + ) + inv_sds = ( + jnp.array(result_params.loc[inv_sd_mask, "value"].to_numpy()) + if inv_sd_mask.any() + else jnp.zeros(0) + ) + + n_per_inv_eq = 1 + n_state + n_observed_factors if n_endog > 0 else 0 + + # The joint Halton design has a larger dimension than just the + # current step's shocks (it also covers the chain rebuild's z_state + # and prior-step shocks; see `estimate_transition_period`). The + # current-step shocks live in the LAST `n_shock + n_endog` columns. + # The chain rebuild below iterates only over `prev_sample.shape[0]` + # leading rows (the summary-halton subset), not over all + # `joint_nodes.shape[0]` rows. + z_block_curr = n_shock + n_endog + + def _chain_one_component(prev_sample: Array | np.ndarray) -> Array: + """Map (j, i) -> theta_t given prev_sample (n_halton, n_obs, n_state).""" + + def _at_node(j_idx: int | Array, i_idx: int | Array) -> Array: + theta_prev = prev_sample[j_idx, i_idx] + obs_y = ( + observed_factor_values[i_idx] + if n_observed_factors > 0 + else jnp.zeros(0) + ) + z_at_j_full = joint_nodes[j_idx] + z_at_j = z_at_j_full[-z_block_curr:] + z_shock = z_at_j[:n_shock] + z_inv_shock = z_at_j[n_shock:] + + # Investment equation at the just-estimated params. + inv = jnp.zeros(n_endog) + for k in range(n_endog): + beta = inv_eq_params[k * n_per_inv_eq : (k + 1) * n_per_inv_eq] + intercept = beta[0] + state_coeffs = beta[1 : 1 + n_state] + obs_coeffs = beta[1 + n_state :] + inv_k = ( + intercept + + jnp.dot(state_coeffs, theta_prev) + + jnp.dot(obs_coeffs, obs_y) + + inv_sds[k] * z_inv_shock[k] + ) + inv = inv.at[k].set(inv_k) # noqa: PD008 + + full_prev_with_obs = jnp.concatenate([theta_prev, inv, obs_y]) + state_shock_contrib = ( + jnp.zeros(n_state) # noqa: PD008 + .at[shock_factor_indices] + .set(shock_sds * z_shock) + ) + return combined_transition(full_prev_with_obs, trans_params) + ( + state_shock_contrib + ) + + # Iterate over `prev_sample`'s leading axis (the retained + # summary draws, controlled by + # `AFEstimationOptions.n_halton_points_posterior_summary`) so + # the rebuilt sample stays at the summary size. The summary + # count is bounded by the joint Halton size, so the + # `joint_nodes[j_idx]` indexing inside `_at_node` is valid. + n_halton_summary, n_obs = prev_sample.shape[0], prev_sample.shape[1] + return jax.vmap( + jax.vmap(_at_node, in_axes=(None, 0)), + in_axes=(0, None), + )(jnp.arange(n_halton_summary), jnp.arange(n_obs)) + + new_samples_per_component: list[Array] = [] + new_components: list[MixtureComponent] = [] + for prev_sample in prev_distribution.samples_per_component: + new_sample = _chain_one_component(prev_sample) + new_samples_per_component.append(new_sample) + # Summary stats: per-Halton mean across obs for posterior_states + # consumption. (Mean is also taken across obs to give a population- + # level summary; the actual likelihood uses the per-obs sample.) + flat = new_sample.reshape(-1, n_state) + new_mean = jnp.mean(flat, axis=0) + centered = flat - new_mean[None, :] + new_cov = (centered.T @ centered) / flat.shape[0] + 1e-8 * jnp.eye(n_state) + new_chol = jnp.linalg.cholesky(new_cov) + new_components.append(MixtureComponent(mean=new_mean, chol_cov=new_chol)) + + return ConditionalDistribution( + mixture_weights=prev_distribution.mixture_weights, + components=tuple(new_components), + samples_per_component=tuple(new_samples_per_component), + conditional_weights=prev_distribution.conditional_weights, + # Carry the period-0 Schur conditional payload AND the chain + # history forward; downstream transition steps replay the chain + # from period 0, not from this period's chained samples. + cond_means=prev_distribution.cond_means, + cond_chols=prev_distribution.cond_chols, + chain_links=prev_distribution.chain_links, + ) diff --git a/src/skillmodels/af/types.py b/src/skillmodels/af/types.py new file mode 100644 index 00000000..a7333e9b --- /dev/null +++ b/src/skillmodels/af/types.py @@ -0,0 +1,430 @@ +"""Frozen dataclass definitions for the AF estimator.""" + +import dataclasses +import gc +from collections.abc import Callable, Mapping +from dataclasses import dataclass, field +from types import MappingProxyType +from typing import Any, Literal + +import jax +import numpy as np +import pandas as pd +from jax import Array + +from skillmodels._beartype_conf import OPTIONS_CONF, beartype_init +from skillmodels.common.model_spec import ModelSpec +from skillmodels.common.types import ensure_containers_are_immutable + + +@beartype_init(OPTIONS_CONF) +@dataclass(frozen=True, init=False) +class AFEstimationOptions: + """Configuration options for the AF estimator.""" + + n_halton_points: int + """Halton quadrature nodes per dimension.""" + + n_halton_points_shock: int + """Quadrature nodes for production shock integration.""" + + optimizer_algorithm: str + """Optimization algorithm for each period's MLE. + + Passed to `optimagic.minimize(algorithm=...)`. + """ + + optimizer_options: MappingProxyType[str, Any] + """Additional options passed to `optimagic.minimize(**optimizer_options)`.""" + + two_stage: bool + """Whether to use coarse-then-fine grid strategy.""" + + coarse_fraction: float + """Fraction of quadrature points for coarse stage (if two_stage is True).""" + + stability_floor: float + """Floor added to likelihood for numerical stability.""" + + n_obs_per_batch: int | None + """Observations per reverse-mode autodiff chunk. + + When `None` (default), an auto-detected value is derived from the + available GPU/CPU memory in `estimate_af`. Setting this to a small + integer trades compile time and throughput for lower peak VRAM; the + likelihood value is unchanged. + """ + + start_params_strategy: Literal["none", "constant", "spearman", "amn"] + """Strategy for seeding optimizer start values. + + Canonical name shared with `CHSEstimationOptions`; the literal set is + unified across the two likelihood estimators. + + `"amn"` (default) runs the full AMN 2020 three-stage estimator + upfront and uses its parameter estimates as start values for the + per-period MLE. `"spearman"` uses Spearman cross-covariance + moments per period (factor-analysis identification) to seed + loadings, sigma_meas, sigma_shock, and sigma_inv. `"constant"` + reproduces the legacy 0.5 / 0.5*obs_sd defaults; provided for + regression testing and pre-fix reproducibility. `"none"` is accepted + for cross-estimator symmetry and behaves identically to `"constant"` + (AF always needs concrete per-period starts, so there is no NaN-leave + mode; the static defaults stand and the caller's `start_params` + overlay them). + """ + + keep_conditional_distributions: bool + """If True (default), the result's `conditional_distributions` field + holds the per-period filtered state distributions, materialised on + host as numpy. Set to False to skip the device→host transfer of + these arrays entirely and return an empty tuple; useful on small + GPUs (e.g. P100 12 GB) where the final materialisation OOMs even + after the per-period optimiser has finished. + """ + + n_halton_points_posterior_summary: int + """Halton draws kept per period for `samples_per_component`, the + posterior-state summary tensor. + + `samples_per_component` is an `(n, n_obs, n_state)` array per mixture + component used only by `posterior_states.py` and the inference + sandwich to compute summary statistics; it is NOT consumed by the + transition likelihood (which rebuilds the chain on-demand from a + joint Halton via `_rebuild_chain_at_period`). The likelihood always + uses `n_halton_points`; this knob only controls the persistent + summary tensor's size. + + Defaults to 256, which keeps the per-period summary tensor under + a few MB even at `n_obs = 50_000`. Bump higher (e.g. 2_000) if + posterior-state summary precision matters for downstream analysis. + """ + + def __init__( # noqa: D107 + self, + n_halton_points: int = 50, + n_halton_points_shock: int = 30, + optimizer_algorithm: str = "fides", + optimizer_options: Mapping[str, Any] | None = None, + *, + two_stage: bool = False, + coarse_fraction: float = 0.5, + stability_floor: float = 1e-217, + n_obs_per_batch: int | None = None, + start_params_strategy: Literal["none", "constant", "spearman", "amn"] = "amn", + keep_conditional_distributions: bool = True, + n_halton_points_posterior_summary: int = 256, + ) -> None: + if n_halton_points_posterior_summary < 1: + msg = ( + "n_halton_points_posterior_summary must be >= 1, " + f"got {n_halton_points_posterior_summary}." + ) + raise ValueError(msg) + object.__setattr__(self, "n_halton_points", n_halton_points) + object.__setattr__(self, "n_halton_points_shock", n_halton_points_shock) + object.__setattr__(self, "optimizer_algorithm", optimizer_algorithm) + object.__setattr__( + self, + "optimizer_options", + ensure_containers_are_immutable(optimizer_options or {}), + ) + object.__setattr__(self, "two_stage", two_stage) + object.__setattr__(self, "coarse_fraction", coarse_fraction) + object.__setattr__(self, "stability_floor", stability_floor) + object.__setattr__(self, "n_obs_per_batch", n_obs_per_batch) + object.__setattr__(self, "start_params_strategy", start_params_strategy) + object.__setattr__( + self, "keep_conditional_distributions", keep_conditional_distributions + ) + object.__setattr__( + self, + "n_halton_points_posterior_summary", + n_halton_points_posterior_summary, + ) + + +@dataclass(frozen=True) +class MixtureComponent: + """Single component of a Gaussian mixture distribution.""" + + mean: Array | np.ndarray + """Mean vector, shape (n_factors,).""" + + chol_cov: Array | np.ndarray + """Lower-triangular Cholesky factor of covariance, shape (n_factors, n_factors).""" + + +@dataclass(frozen=True) +class ChainLink: + """Frozen-period parameters for one prior step in the θ_0→θ_{t-1} chain. + + Used by the AF transition likelihood to rebuild the chained importance + sample on-demand from a single joint Halton design at every transition + step (mirroring MATLAB's ``create_nodes_weights_01/12``). Each + `ChainLink` carries the just-fitted parameters of one prior transition + so the chain can be replayed inside the next step's likelihood call. + """ + + period: int + """Calendar period at which this link applies (1-indexed; the link + transforms θ_{period-1} → θ_period).""" + + transition_func: Callable + """Combined per-factor transition function f(full_states, params).""" + + transition_params: Array | np.ndarray + """Flat transition parameter vector for this period, shape + ``(total_n_transition_params,)``.""" + + shock_sds: Array | np.ndarray + """Production shock SDs for shock-bearing state factors, shape + ``(n_shock_factors,)``.""" + + shock_factor_indices: Array | np.ndarray + """Mapping each shock slot to its position in the state-factor + ordering, shape ``(n_shock_factors,)`` int.""" + + inv_eq_params: Array | np.ndarray + """Flat investment-equation parameters, shape + ``(n_endogenous * n_inv_eq_params_per,)``.""" + + inv_sds: Array | np.ndarray + """Investment shock SDs, shape ``(n_endogenous,)``.""" + + n_inv_eq_params_per: int + """Investment equation parameters per endogenous factor (1 + n_state + + n_observed_factors when n_endogenous > 0; 0 otherwise).""" + + obs_factor_values: Array | np.ndarray + """Observed factor values at this link's source period (i.e. period - + 1), shape ``(n_obs, n_observed_factors)``. Used in the chain rebuild + for the inv equation and the transition function.""" + + +# Register ChainLink as a JAX pytree so tuples of ChainLinks can be passed +# through `jax.jit` in the AF transition likelihood. Array fields are +# leaves; the period index, transition function, and per-link int counts +# are static metadata baked into the trace. +jax.tree_util.register_dataclass( + ChainLink, + data_fields=[ + "transition_params", + "shock_sds", + "shock_factor_indices", + "inv_eq_params", + "inv_sds", + "obs_factor_values", + ], + meta_fields=["period", "transition_func", "n_inv_eq_params_per"], +) + + +@dataclass(frozen=True) +class ConditionalDistribution: + """Estimated conditional distribution of latent factors at a given period. + + Holds two things that downstream code consumes: + + * Per-component summary statistics (`mean`, `chol_cov`) of the chained + sample at this period — used by `posterior_states.py` and the + inference sandwich code. + * The chain history (`chain_links`) needed to rebuild the chained + sample on-demand inside the next transition step's likelihood (joint + Halton design — see `_rebuild_chain_at_period` in + `af.likelihood`). + + For the period-0 distribution: per-obs `cond_means` / `cond_chols` + encode the Schur conditional of latent factors given observed factors + (`Y_0`); `conditional_weights` are the Bayes posterior mixture weights + given `Y_0`. These period-0 quantities are carried forward UNCHANGED + across every transition step (the chain replays from period 0), so the + state distribution at any later period is conditioned on `Y_0` only. + Later-period observed factors (income `Y_t`, t > 0) enter solely the + investment and transition equations; they never re-condition the state + distribution. Interpreting the carried distribution as the period-t + conditional state density therefore rests on a sequential + non-informativeness assumption for income (given `Y_0` and the modeled + transition history, `Y_t` adds no information about `theta_t`). + + Note: `samples_per_component` is retained for backward compatibility + and posterior-state-summary computation, but is no longer load-bearing + inside the transition likelihood (which rebuilds the chain on-demand). + """ + + mixture_weights: Array | np.ndarray + """Mixture weights, shape (n_components,).""" + + components: tuple[MixtureComponent, ...] + """Per-component summary statistics (mean, chol_cov) derived from the + importance sample. Used by `posterior_states` and `inference`; not used + in the transition likelihood itself.""" + + samples_per_component: tuple[Array | np.ndarray, ...] + """One importance-sample array per mixture component, each shape + ``(n_halton, n_obs, n_state)``. Retained for posterior-state summary + statistics; not consumed by the transition likelihood (which rebuilds + the chain on-demand from a joint Halton). May use a smaller Halton + count than the likelihood's `n_halton_points`.""" + + conditional_weights: Array | np.ndarray | None = None + """Individual-specific conditional mixture weights, shape (n_obs, n_components). + + When not None, these override `mixture_weights` for each observation (computed + from Bayes' rule using data from previous periods). + """ + + cond_means: Array | np.ndarray | None = None + """Per-obs Schur-conditional means of the latent state given observed + factors at period 0, shape ``(n_components, n_obs, n_state)``. Built + by the initial period only. None for transition-period distributions. + """ + + cond_chols: Array | np.ndarray | None = None + """Per-component Schur-conditional Cholesky factors at period 0, shape + ``(n_components, n_state, n_state)``. Shared across observations + because the conditional covariance does not depend on Y_i (it's the + prior cov_yy minus a Schur term). None for transition-period + distributions.""" + + chain_links: tuple[ChainLink, ...] = field(default_factory=tuple) + """Sequence of frozen prior-period parameter packages, one per + transition already estimated. Empty before period 1; one entry after + period 1 estimation; two entries after period 2; etc. Used by the + transition likelihood to rebuild the chained sample on-demand from a + single joint Halton.""" + + +@dataclass(frozen=True) +class AFPeriodResult: + """Result from estimating a single period.""" + + period: int + """Calendar period index.""" + + params: pd.DataFrame + """Estimated parameters with 4-level MultiIndex (category, period, name1, name2).""" + + loglikelihood: float + """Per-observation **mean** log-likelihood criterion at the optimum. + + This is the negated optimiser objective `-mean(neg_log_like)`, i.e. an average over + observations, not a summed log-likelihood. Multiply by the step's sample size to + recover a total.""" + + success: bool + """Whether optimization converged.""" + + optimize_result: Any + """Raw optimagic result object.""" + + +@dataclass(frozen=True) +class AFEstimationResult: + """Complete result from AF estimation across all periods.""" + + period_results: tuple[AFPeriodResult, ...] + """Per-period estimation results, ordered by period.""" + + params: pd.DataFrame + """Combined parameters from all periods with standard 4-level MultiIndex.""" + + model_spec: ModelSpec + """The ModelSpec used for estimation.""" + + conditional_distributions: tuple[ConditionalDistribution, ...] + """Estimated conditional distributions per period (for filtered states).""" + + success: bool + """AND across the per-period optimiser convergence flags. Conforms to + `skillmodels.common.estimation.CommonEstimationResult`.""" + + loglikelihood: float + """Alias of `sequential_criterion`, retained for `CommonEstimationResult` + conformance and back-compat. + + It is the sum of the per-period **mean** log-likelihood criteria, which is a + sequential/composite criterion, **not** a joint sample log-likelihood: each term is + a per-observation average and the static-factor (e.g. MC/MN) densities are + deliberately re-applied across independently optimised steps. It is therefore not + valid for AIC/BIC or likelihood-ratio comparisons; use it only as the optimiser + objective scale. See `period_mean_criteria` for the per-step breakdown.""" + + sequential_criterion: float = float("nan") + """The summed per-period mean log-likelihood criteria (same value as + `loglikelihood`, under its honest name). A sequential criterion, not a joint + log-likelihood — see `loglikelihood`.""" + + period_mean_criteria: tuple[float, ...] = () + """Per-period mean log-likelihood criteria, ordered by period (each is the + corresponding `AFPeriodResult.loglikelihood`).""" + + md_criterion: float | None = None + """Always `None` for AF; present to satisfy the common result Protocol.""" + + def to_numpy(self) -> AFEstimationResult: + """Return a copy with all device arrays materialised as numpy. + + Drops `samples_per_component` (per-period + `(n_halton, n_obs, n_state)` importance buffers, typically + multi-GB) and replaces every `jax.Array` inside the conditional + distributions with a host-side `np.ndarray`. + + Call this before pickling the result or when device memory needs + to be released. `estimate_af` itself returns arrays on-device so + repeated calls can reuse the JAX/XLA compilation cache; that + cache is freed here (the side effect is necessary because the + host-staging buffer for the GPU→host copy must fit, and on a + device loaded with compiled per-period likelihoods + gradients + it routinely OOMs without this). + """ + # Free compiled executables + unreferenced device buffers so the + # host staging copy below has room. + jax.clear_caches() + gc.collect() + new_cds = tuple( + _conditional_distribution_to_numpy(cd) + for cd in self.conditional_distributions + ) + return dataclasses.replace(self, conditional_distributions=new_cds) + + +def _array_to_numpy(value: Array | np.ndarray | None) -> np.ndarray | None: + if value is None: + return None + return np.asarray(jax.device_get(value)) + + +def _chain_link_to_numpy(link: ChainLink) -> ChainLink: + return dataclasses.replace( + link, + transition_params=_array_to_numpy(link.transition_params), + shock_sds=_array_to_numpy(link.shock_sds), + shock_factor_indices=_array_to_numpy(link.shock_factor_indices), + inv_eq_params=_array_to_numpy(link.inv_eq_params), + inv_sds=_array_to_numpy(link.inv_sds), + obs_factor_values=_array_to_numpy(link.obs_factor_values), + ) + + +def _conditional_distribution_to_numpy( + cond_dist: ConditionalDistribution, +) -> ConditionalDistribution: + new_components = tuple( + MixtureComponent( + mean=_array_to_numpy(c.mean), # ty: ignore[invalid-argument-type] + chol_cov=_array_to_numpy(c.chol_cov), # ty: ignore[invalid-argument-type] + ) + for c in cond_dist.components + ) + new_chain_links = tuple(_chain_link_to_numpy(cl) for cl in cond_dist.chain_links) + return dataclasses.replace( + cond_dist, + mixture_weights=_array_to_numpy(cond_dist.mixture_weights), + components=new_components, + samples_per_component=(), + conditional_weights=_array_to_numpy(cond_dist.conditional_weights), + cond_means=_array_to_numpy(cond_dist.cond_means), + cond_chols=_array_to_numpy(cond_dist.cond_chols), + chain_links=new_chain_links, + ) diff --git a/src/skillmodels/af/validate.py b/src/skillmodels/af/validate.py new file mode 100644 index 00000000..393ee282 --- /dev/null +++ b/src/skillmodels/af/validate.py @@ -0,0 +1,285 @@ +"""AF-specific ModelSpec validation.""" + +import warnings + +import optimagic as om +import pandas as pd + +from skillmodels.common.identification import ( + check_initial_anchors, + warn_if_overrestricted, +) +from skillmodels.common.model_spec import FactorSpec, ModelSpec + +# Transition functions compatible with AF estimation (parametric, differentiable). +_AF_COMPATIBLE_TRANSITIONS = frozenset( + { + "linear", + "translog", + "translog_af", + "robust_translog", + "stable_translog", + "log_ces", + "log_ces_af", + "log_ces_with_constant", + "log_ces_general", + "linear_and_squares", + } +) + +# Built-in production transition functions that enumerate parameters over +# `all_factors` (latent + observed). When such a function is used for a +# (non-endogenous) production factor and observed factors are present, the +# observed factors (e.g. income) receive free linear / square / interaction / +# CES-weight coefficients and silently enter the production function — which +# changes the AF estimand (income must affect skills only through the +# investment equation). `translog_af` / `log_ces_af` are deliberately NOT in +# this set because they are documented to receive production factors only. +_LEAKY_BUILTIN_PRODUCTION = frozenset( + { + "linear", + "linear_and_squares", + "translog", + "robust_translog", + "stable_translog", + "log_ces", + "log_ces_with_constant", + "log_ces_general", + } +) + +# Hard minimum: 2 measurements + a loading normalization just-identify the +# per-period measurement system (3 moments — Var(Z1), Var(Z2), Cov(Z1,Z2) — +# vs 1 free loading + 2 sigma_meas) given Var(F) pinned by the chain. +_MIN_MEASURES_PER_FACTOR = 2 +# Recommended minimum: the AF paper's identification arguments assume 3 +# indicators per factor per period (over-identified Spearman moments). +# Below this, Stage-B Spearman is noisy and cross-period equality +# constraints on loadings / sigma_meas become load-bearing for ID. +_RECOMMENDED_MEASURES_PER_FACTOR = 3 + + +def validate_af_model( + model_spec: ModelSpec, + fixed_params: pd.DataFrame | None = None, + constraints: list[om.constraints.Constraint] | None = None, +) -> None: + """Validate that a ModelSpec is compatible with AF estimation. + + Check: + - At least 3 measurements per factor in each period where the factor is measured + - Transition functions are parametric (built-in or registered) + - Normalizations are present for each factor + - Each factor's period-0 (initial-distribution) affine orbit is anchored: + the initial distribution is not produced by any transition, so its scale + and location must be pinned directly by a loading/intercept normalization, + a `fixed_params` pin, or an equality constraint. A `Normalizations` object + with empty period-0 maps would otherwise leave the trans-log model + under-identified. Periods t>0 are not checked here -- the transition can + legitimately propagate the anchor, so verifying their identification needs + a transition-aware diagnostic (tracked separately). + + The optional `fixed_params` and `constraints` (the same objects passed to + `estimate_af`) supply the alternative anchors. They default to None so the + measurement-system and transition checks can be run on a bare ModelSpec. + + A reconstructed endogenous factor (investment, `is_endogenous=True` and + `has_initial_distribution=False`) is contemporaneous: a period-c investment + indicator measures `I_c`, the same calendar CHS / AMN read. The calendar + adapter makes the public `ModelSpec` contemporaneous and the AF step + assembler re-times the source investment internally, so no calendar warning + is emitted for such factors -- a user who shifted their data to satisfy one + would reintroduce the original off-by-one bug. + + Also emit a loud `UserWarning` (not an error) when a built-in production + transition function would silently absorb observed factors (income). + Built-in transitions enumerate parameters over ALL factors (latent + + observed), so an observed factor enters the production function with free + coefficients. The AF model assumes observed factors (e.g. income) affect + skills ONLY through the investment equation; using a built-in transition + on a production factor while observed factors are present violates that + assumption. The warning (rather than a hard error) keeps existing models + runnable while surfacing the wrong-estimand risk so it is an explicit + choice; use `translog_af` / `log_ces_af` (production-factors only) to + avoid the leakage entirely. + + Raise: + ValueError: If validation fails, with a detailed error message. + NotImplementedError: If the model declares a control-function correction + (`FactorSpec.correction`), which AF does not implement. + + """ + corrected = [ + name for name, spec in model_spec.factors.items() if spec.correction is not None + ] + if corrected: + msg = ( + "AF estimation does not implement the control-function correction " + f"(kappa != 0) declared by FactorSpec.correction on {corrected}. AF " + "covers only the kappa=0 (exogenous-investment) special case. Use " + "estimate_chs for the correction, or strip it with " + "ModelSpec.without_correction()." + ) + raise NotImplementedError(msg) + + errors: list[str] = [] + for factor_name, factor_spec in model_spec.factors.items(): + errors.extend(_validate_factor(factor_name, factor_spec)) + + errors.extend(check_initial_anchors(model_spec, fixed_params, constraints)) + + warn_if_overrestricted(model_spec, fixed_params, constraints) + _warn_on_observed_factor_leakage(model_spec) + + if errors: + msg = "ModelSpec is not compatible with AF estimation:\n" + "\n".join( + f" - {e}" for e in errors + ) + raise ValueError(msg) + + +def _validate_factor(factor_name: str, factor_spec: FactorSpec) -> list[str]: + """Return a list of error messages for a single factor.""" + errors: list[str] = [] + + # Check measurements: need >= 2 per factor in each active period; warn + # below 3 (the recommended count from the AF paper). + for period, measures in enumerate(factor_spec.measurements): + if len(measures) == 0: + continue + if len(measures) < _MIN_MEASURES_PER_FACTOR: + errors.append( + f"Factor '{factor_name}' period {period}: AF requires at least " + f"{_MIN_MEASURES_PER_FACTOR} measurements, got {len(measures)}." + ) + elif len(measures) < _RECOMMENDED_MEASURES_PER_FACTOR: + warnings.warn( + f"Factor '{factor_name}' period {period}: only {len(measures)} " + f"measurements (AF paper assumes at least " + f"{_RECOMMENDED_MEASURES_PER_FACTOR}). Identification of " + f"loadings + sigma_meas at this period relies on " + f"cross-period equality constraints across the AF MLE chain; " + f"supply explicit `fixed_params` for the loading if needed.", + stacklevel=3, + ) + + # Check transition function is parametric + tf = factor_spec.transition_function + if tf is not None and isinstance(tf, str) and tf not in _AF_COMPATIBLE_TRANSITIONS: + errors.append( + f"Factor '{factor_name}': transition function '{tf}' is not in the " + f"set of AF-compatible functions: {sorted(_AF_COMPATIBLE_TRANSITIONS)}." + ) + # Custom callables are accepted if they have __registered_params__ + if callable(tf) and not hasattr(tf, "__registered_params__"): + errors.append( + f"Factor '{factor_name}': custom transition function must be decorated " + f"with @register_params to be used with AF estimation." + ) + + # Check normalizations exist. The required pattern is transition-specific + # (audit F7a): trans-log needs a per-factor affine anchor (loading=1 and + # intercept=0) at the initial period; restricted CES (psi=1) needs only a + # SINGLE scale anchor (lambda_theta,0,1=1) -- CES identifies the remaining + # loadings -- with location supplied by the simplex (plain log_ces) or a + # pinned intercept (log_ces_with_constant). So do not prescribe the trans-log + # "one per period" pattern for every factor. + if factor_spec.normalizations is None: + errors.append( + f"Factor '{factor_name}': AF requires explicit normalizations. " + f"Provide a scale anchor (a finite nonzero loading=1) for one " + f"measurement, plus a finite period-0 measurement-intercept (or " + f"equivalent latent-location pin) as the absolute initial location " + f"anchor mu_theta,0,1=0. The CES simplex and the free constant of " + f"log_ces_with_constant do NOT supply that initial location anchor. " + f"Trans-log needs the affine anchor at the initial period; restricted " + f"CES needs only the single scale anchor lambda_theta,0,1=1 (the " + f"later loadings are then identified)." + ) + + # has_initial_distribution=False requires is_endogenous=True so the + # factor can be reconstructed via the investment equation at period 0. + if not factor_spec.has_initial_distribution and not factor_spec.is_endogenous: + errors.append( + f"Factor '{factor_name}': has_initial_distribution=False is only " + f"supported for endogenous factors (set is_endogenous=True)." + ) + + # A reconstructed factor (has_initial_distribution=False) MAY declare period-0 + # measurements under the contemporaneous convention: they measure the period-0 + # reconstruction I_0 = g(theta_0). They are excluded from the initial step (which + # has no latent value for them) and sourced by the source/destination calendar + # adapter as the free target of the 0->1 step, scored against I_0. So period-0 + # reconstructed-factor measurements are allowed and not an error here. + + return errors + + +def _warn_on_observed_factor_leakage(model_spec: ModelSpec) -> None: + """Warn when a built-in production function silently absorbs observed factors. + + Built-in transition functions enumerate parameters over `all_factors` + (latent + observed), so observed factors (e.g. income) get FREE linear / + square / interaction / CES-weight coefficients in the production function. + The AF model assumes income affects skills ONLY through the investment + equation. Emit a loud `UserWarning` so the wrong-estimand risk is an + explicit, visible choice rather than a silent default. Use a + production-factors-only transition (`translog_af` / `log_ces_af`, or a + custom `@register_params` callable consuming only production factors) to + remove the leakage. The warning is deliberately NOT an error: it must not + break existing, intentionally-leaky models, and `validate_af_model` has no + access to `fixed_params` to detect an explicit opt-out (pinned-zero + observed-factor coefficients). + """ + observed = tuple(model_spec.observed_factors) + if not observed: + return + for fac, fspec in model_spec.factors.items(): + if fspec.is_endogenous: + # The investment equation legitimately uses observed factors. + continue + tf = fspec.transition_function + if isinstance(tf, str) and tf in _LEAKY_BUILTIN_PRODUCTION: + warnings.warn( + f"Factor '{fac}': built-in transition '{tf}' enumerates " + f"parameters over ALL factors including observed factors " + f"{observed}, so they enter the production function with free " + f"coefficients. The AF model assumes observed factors affect " + f"skills only through the investment equation. Use a " + f"production-factors-only transition ('translog_af' or " + f"'log_ces_af'), or pin every observed-factor transition " + f"coefficient to 0.0 via `fixed_params`, to avoid changing " + f"the production estimand.", + stacklevel=3, + ) + + +def fail_if_unsupported_kappa_params( + start_params: pd.DataFrame | None, + fixed_params: pd.DataFrame | None, + constraints: list | None, # noqa: ARG001 +) -> None: + """Raise if any supplied params reference an unimplemented kappa category. + + AF integrates production and investment shocks as independent draws + (kappa_t = 0). A nonzero kappa_t control-function term is not + implemented; fail loudly rather than silently dropping such entries. + Unknown parameter categories never enter any period index and would + otherwise vanish without error, letting a caller believe endogenous + coupling is being estimated. + """ + bad = {"kappa", "kappa_t"} + + def _has_kappa(df: pd.DataFrame | None) -> bool: + if df is None or df.index.nlevels < 1: + return False + cats = df.index.get_level_values(0) + return any(c in bad for c in cats) + + if _has_kappa(start_params) or _has_kappa(fixed_params): + msg = ( + "AF estimation does not implement endogenous investment " + "(kappa_t != 0): production and investment shocks are assumed " + "independent (kappa_t = 0). Remove 'kappa'/'kappa_t' parameters." + ) + raise NotImplementedError(msg) diff --git a/src/skillmodels/amn/__init__.py b/src/skillmodels/amn/__init__.py new file mode 100644 index 00000000..cfe07022 --- /dev/null +++ b/src/skillmodels/amn/__init__.py @@ -0,0 +1,79 @@ +"""AMN: Attanasio-Meghir-Nix (2020) latent factor estimator (and start values). + +This package exposes two distinct surfaces: + +1. **Start-value helpers** -- the Spearman cross-covariance moments + (`spearman_factor_moments`) and Bartlett-score OLS + (`seed_beta_from_ols`) that seed every estimator's starting values + (`get_spearman_start_params`, used by CHS and AF). + +2. **Full AMN estimator** -- a three-stage mixture-EM / + minimum-distance / simulate-and-regress procedure mirroring AMN 2020, + plus bootstrap inference and a per-observation posterior-state helper + for diagnostic plots. + +Public API: + +* Start-value helpers: `spearman_factor_moments`, `derive_unexplained_sd`, + `seed_beta_from_ols`, `SpearmanResult`, `get_spearman_start_params`, + `pool_equality_groups`. +* AMN estimator: `estimate_amn`, `compute_amn_standard_errors`, + `get_amn_posterior_states`, `AMNEstimationOptions`, + `AMNEstimationResult`, `AMNInferenceResult`, `AMNStageResults`. +* Stage 1 building blocks (for testing / advanced use): + `fit_mixture_em`, `build_augmented_measure_layout`, + `build_augmented_measure_matrix`, `MixtureFitResult`, + `AugmentedMeasureLayout`. +""" + +from skillmodels.amn.estimate import estimate_amn +from skillmodels.amn.inference import compute_amn_standard_errors +from skillmodels.amn.mixture_em import ( + build_augmented_measure_layout, + build_augmented_measure_matrix, + fit_mixture_em, +) +from skillmodels.amn.moments import ( + SpearmanResult, + derive_unexplained_sd, + seed_beta_from_ols, + spearman_factor_moments, +) +from skillmodels.amn.posterior_states import get_amn_posterior_states +from skillmodels.amn.start_values import ( + get_spearman_start_params, + pool_equality_groups, +) +from skillmodels.amn.types import ( + AMNEstimationOptions, + AMNEstimationResult, + AMNInferenceResult, + AMNStageResults, + AugmentedMeasureLayout, + MinimumDistanceResult, + MixtureFitResult, + ProductionFitResult, +) + +__all__ = [ + "AMNEstimationOptions", + "AMNEstimationResult", + "AMNInferenceResult", + "AMNStageResults", + "AugmentedMeasureLayout", + "MinimumDistanceResult", + "MixtureFitResult", + "ProductionFitResult", + "SpearmanResult", + "build_augmented_measure_layout", + "build_augmented_measure_matrix", + "compute_amn_standard_errors", + "derive_unexplained_sd", + "estimate_amn", + "fit_mixture_em", + "get_amn_posterior_states", + "get_spearman_start_params", + "pool_equality_groups", + "seed_beta_from_ols", + "spearman_factor_moments", +] diff --git a/src/skillmodels/amn/ces_recovery.py b/src/skillmodels/amn/ces_recovery.py new file mode 100644 index 00000000..75123c11 --- /dev/null +++ b/src/skillmodels/amn/ces_recovery.py @@ -0,0 +1,174 @@ +"""Freyberger's restricted-CES primitive scale recovery (audit F2). + +AMN fits the restricted-CES production function in *transformed* (tilde) +coordinates: it estimates the joint distribution of the transformed factors +under the internal anchors lambda~_{theta,t,1}=lambda~_{I,t,1}=1, then fits the +transformed production function (Freyberger eq prod_fn_ces_norm, with psi_t=1) + + ln theta~_{t+1} = (lambda_{theta,t+1,1}/sigma_t) + * ln( gamma~_1t theta~_t^{sigma_t/lambda_{theta,t,1}} + + gamma~_2t I~_t^{sigma_t/lambda_{I,t,1}} ) + + kappa~_t eta~_{I,t}. + +This is exactly the functional form of `log_ces_general` +(`tfp * log(sum_i gamma_i * state_i^{sigma_i})`), with the per-period +coefficients + + outside (tfp) = lambda_{theta,t+1,1} / sigma_t + theta_exponent = sigma_t / lambda_{theta,t,1} + inv_exponent = sigma_t / lambda_{I,t,1}. + +The single-rho form previously used by AMN's `_fit_log_ces` (delta + (1/rho) * +log(sum gamma_i exp(X_i rho)), one rho inside and out) CANNOT represent this +when lambda_{theta,t,1} != lambda_{I,t,1}: the audit's counterexample +(lambda_theta=2, lambda_inv=1, lambda_next=1, sigma=-0.5) has best-fit max abs +error ~0.544. Hence restricted CES must be fit through the `log_ces_general` +functional form. + +Given a `log_ces_general` fit in transformed coordinates and the *single* scale +anchor lambda_{theta,0,1}=1 (with psi_t=1; paper line 831), this module recovers +the primitive sigma_t, lambda_{theta,t,1} and lambda_{I,t,1} recursively +(paper lines 1357-1366): + + sigma_t = theta_exponent_t * lambda_{theta,t,1} + lambda_{I,t,1} = sigma_t / inv_exponent_t + lambda_{theta,t+1,1} = outside_t * sigma_t (carried into period t+1) + +The remaining recovery rescalings (paper 1357-1366), which are applied by the +integrator once the scales are known, are: + + lambda_{theta,t,m} = lambda~_{theta,t,m} * lambda_{theta,t,1} + lambda_{I,t,m} = lambda~_{I,t,m} * lambda_{I,t,1} + beta_0t = beta~_0t / lambda_{I,t,1} + beta_1t = beta~_1t * lambda_{theta,t,1} / lambda_{I,t,1} + beta_2t = beta~_2t / lambda_{I,t,1} + rho_0 = rho~_0 + rho_1 = rho~_1 * lambda_{theta,T,1} (TERMINAL skill scale; see below) + ln theta_t = ln theta~_t / lambda_{theta,t,1} + ln I_t = ln I~_t / lambda_{I,t,1} + +and, with the same scales, the scale-dependent shock and control categories +(Pro F9): + + sigma_{eta_I,t} = sigma_{eta~_I,t} / abs(lambda_{I,t,1}) + sigma_{eta_theta,t} = sigma_{eta~_theta,t} / abs(lambda_{theta,t+1,1}) + kappa_t = kappa~_t * lambda_{I,t,1} / lambda_{theta,t+1,1} + +and the Stage-2 joint mixture: with the block-diagonal map A whose latent +entries are the reciprocal scales 1/lambda_{*,t,1} and whose observed (income, +outcome) entries are 1, every component transforms as m_k = A m~_k and +Sigma_k = A Sigma~_k A^T (this handles latent-latent AND latent-observed +cross-covariances); the mixture weights are unchanged. gamma~ = gamma when all +first-measure locations mu are zero (eq 751). + +rho_1 (Pro F10/T1): the paper's recovery paragraph writes a generic t, but the +anchor Q = rho_0 + rho_1 ln(theta_T) is on the TERMINAL skill, and +rho~_1 = rho_1 / lambda_{theta,T,1}, so rho_1 = rho~_1 * lambda_{theta,T,1}. The +generic t is a source transcription artifact; the forward recursion below +correctly produces lambda_{theta,T,1} as its last carried scale. + +Scope (Pro T2/F9): this module implements ONLY the scale recursion (unit-tested, +randomized-inversion verified by the reviewer to ~9e-16). The downstream +rescalings above -- including the shock SDs, kappa, and the full joint-mixture +transform -- are NOT yet wired into the AMN pipeline, so a standalone restricted- +CES result would still mix coordinate systems. Because AMN is start-values-only +in production (CHS/AF re-fit every parameter) the standalone guard is KEPT until +the complete affine transformation is implemented and verified; the reviewer +agreed (returning transformed-coordinate parameters in the primitive params +schema would be misleading and is acceptable only behind a separately named API). +""" + +import math +from collections.abc import Sequence +from dataclasses import dataclass + + +def _require_nonzero_finite(value: float, what: str) -> None: + """Raise ValueError unless `value` is finite and nonzero (psi_t=1 domain).""" + if not math.isfinite(value) or value == 0.0: + msg = ( + f"recover_primitive_ces_scales requires a nonzero, finite {what} " + f"(got {value}); the restricted-CES recovery assumes psi_t=1 with " + "nonzero scales and exponents. The exact Cobb-Douglas limit sigma_t=0 " + "is outside this parameterization and needs a separate limit form." + ) + raise ValueError(msg) + + +@dataclass(frozen=True) +class CESTransformedCoeffs: + """Per-period coefficients of the transformed CES (a `log_ces_general` fit).""" + + outside: float + """`tfp` = lambda_{theta,t+1,1} / sigma_t (the outside coefficient).""" + theta_exponent: float + """`sigma_skills` = sigma_t / lambda_{theta,t,1} (the skills exponent).""" + inv_exponent: float + """`sigma_investment` = sigma_t / lambda_{I,t,1} (the investment exponent).""" + + +@dataclass(frozen=True) +class CESPrimitiveScales: + """Recovered primitive scales for one transition period t.""" + + sigma: float + """The CES elasticity sigma_t.""" + lambda_theta: float + """The skills scale lambda_{theta,t,1} at period t.""" + lambda_inv: float + """The investment scale lambda_{I,t,1} at period t.""" + lambda_theta_next: float + """The skills scale lambda_{theta,t+1,1} carried into period t+1.""" + + +def recover_primitive_ces_scales( + coeffs: Sequence[CESTransformedCoeffs], + *, + lambda_theta_0: float = 1.0, +) -> list[CESPrimitiveScales]: + """Recover primitive CES scales from transformed-form coefficients. + + Walks the periods forward from the scale anchor `lambda_theta_0` + (= lambda_{theta,0,1}, normally 1), inverting the transformed-form map at + each period and carrying the implied lambda_{theta,t+1,1} into the next. + + Args: + coeffs: Per-period transformed-CES coefficients, period 0 first. + lambda_theta_0: The single primitive scale anchor lambda_{theta,0,1}. + + Return: + One `CESPrimitiveScales` per period, in order. + """ + _require_nonzero_finite(lambda_theta_0, "lambda_theta_0 anchor") + lambda_theta = lambda_theta_0 + recovered: list[CESPrimitiveScales] = [] + for coeff in coeffs: + _require_nonzero_finite(coeff.theta_exponent, "theta_exponent") + _require_nonzero_finite(coeff.inv_exponent, "inv_exponent") + _require_nonzero_finite(coeff.outside, "outside coefficient") + # Forward recursion (paper 1357-1366), confirmed faithful by the Pro + # review (randomized inversion of 1000 systems, max err ~9e-16): + # theta_exp = sigma/lambda_theta => sigma = theta_exp * lambda_theta; + # inv_exp = sigma/lambda_inv => lambda_inv = sigma/inv_exp; + # outside = lambda_theta_next/sigma => lambda_theta_next = outside*sigma. + # Anchor is lambda_theta,0,1 (psi_t=1, paper line 831). The domain + # checks above exclude the sigma_t -> 0 Cobb-Douglas limit (separate + # parameterization needed). + sigma = coeff.theta_exponent * lambda_theta + lambda_inv = sigma / coeff.inv_exponent + lambda_theta_next = coeff.outside * sigma + # Validate the DERIVED values too (Pro F5): finite nonzero inputs can + # still overflow/underflow their products and ratios. + _require_nonzero_finite(sigma, "derived sigma_t") + _require_nonzero_finite(lambda_inv, "derived lambda_I,t,1") + _require_nonzero_finite(lambda_theta_next, "derived lambda_theta,t+1,1") + recovered.append( + CESPrimitiveScales( + sigma=sigma, + lambda_theta=lambda_theta, + lambda_inv=lambda_inv, + lambda_theta_next=lambda_theta_next, + ) + ) + lambda_theta = lambda_theta_next + return recovered diff --git a/src/skillmodels/amn/estimate.py b/src/skillmodels/amn/estimate.py new file mode 100644 index 00000000..7805191f --- /dev/null +++ b/src/skillmodels/amn/estimate.py @@ -0,0 +1,334 @@ +"""Top-level orchestration for the three-stage AMN estimator. + +Chains the three stages: + +1. `mixture_em.fit_mixture_em` -> reduced-form Pi, Psi +2. `minimum_distance.solve_minimum_distance` -> structural Lambda, A, Sigma, mu, Omega +3. `simulate_and_regress.simulate_and_regress` -> production-function params + +and merges the resulting parameter pieces into a single skillmodels +params DataFrame. +""" + +import numpy as np +import optimagic as om +import pandas as pd +from beartype import beartype + +from skillmodels._beartype_conf import ESTIMATION_CONF +from skillmodels.amn.minimum_distance import ( + _STAGE2_FIXED_CATEGORIES, + solve_minimum_distance, +) +from skillmodels.amn.mixture_em import ( + build_augmented_measure_layout, + build_augmented_measure_matrix, + fit_mixture_em, +) +from skillmodels.amn.simulate_and_regress import simulate_and_regress +from skillmodels.amn.types import ( + AMNEstimationOptions, + AMNEstimationResult, + AMNStageResults, + MinimumDistanceResult, + MixtureFitResult, +) +from skillmodels.common.identification import ( + fail_if_initial_state_unanchored, + warn_if_overrestricted, +) +from skillmodels.common.measurement_models import GaussianMeasurement +from skillmodels.common.model_spec import ModelSpec +from skillmodels.common.process_model import process_model +from skillmodels.common.types import ProcessedModel + +# Parameter categories whose pins estimate_amn can honour in Stage 3 (the +# simulate-and-regress production step). The production regression holds these +# coefficients at their pinned values while fitting the remaining ones. +_STAGE3_FIXED_CATEGORIES = frozenset({"transition"}) + +# All fixed_params categories estimate_amn can route to the stage that fits +# them: Stage 2 (structural measurement system) plus Stage 3 (production). +_SUPPORTED_FIXED_CATEGORIES = _STAGE2_FIXED_CATEGORIES | _STAGE3_FIXED_CATEGORIES + +# Restricted-CES transitions AMN cannot consistently estimate standalone: the +# Stage-3 CES regression omits Freyberger's primitive-scale recovery. The +# generalized form `log_ces_general` is fine (it can express the transformed CES), +# and custom `@register_params` transitions are out of scope for this guard. +_RESTRICTED_CES_TRANSITIONS = frozenset( + {"log_ces", "log_ces_af", "log_ces_with_constant"} +) + + +def _fail_if_standalone_unsupported( + processed_model: ProcessedModel, + *, + for_start_values: bool, +) -> None: + """Refuse standalone AMN on a model it cannot consistently estimate. + + AMN's restricted-CES (`log_ces` / `log_ces_with_constant`) Stage-3 regression + does not perform Freyberger's primitive-scale recovery, so the returned CES + parameters are not consistent estimates. That is acceptable only when AMN is + producing start values for another estimator that re-fits every parameter + (`estimate_chs` and `estimate_af` both seed from AMN); `for_start_values=True` + flags that context, so the guard is skipped there. Standalone use (the + default) raises. + """ + if for_start_values: + return + info = processed_model.transition_info + if info is None: + return + bad = sorted( + factor + for factor, name in info.function_names.items() + if name in _RESTRICTED_CES_TRANSITIONS + ) + if bad: + msg = ( + f"estimate_amn cannot consistently estimate the restricted-CES " + f"transition on factor(s) {bad}: AMN's Stage-3 CES regression omits the " + "primitive-scale recovery (Freyberger 2025), so the standalone result " + "would be inconsistent. Use 'log_ces_general', or use AMN only to seed " + "estimate_chs (which re-fits every parameter)." + ) + raise NotImplementedError(msg) + + +def _measurement_params_dataframe( + structural: MinimumDistanceResult, +) -> pd.DataFrame: + """Translate Stage 2 outputs into rows of the standard params DataFrame.""" + rows: list[tuple[str, int, str, str, float]] = [] + for idx, row in structural.loadings.iterrows(): + period, meas, factor = idx # ty: ignore[not-iterable] + rows.append( + ("loadings", int(period), str(meas), str(factor), float(row["loading"])) + ) + for idx, row in structural.measurement_intercepts.iterrows(): + period, meas = idx # ty: ignore[not-iterable] + rows.append( + ("controls", int(period), str(meas), "constant", float(row["intercept"])) + ) + for idx, row in structural.measurement_sds.iterrows(): + period, meas = idx # ty: ignore[not-iterable] + rows.append(("meas_sds", int(period), str(meas), "-", float(row["sd"]))) + if not rows: + return pd.DataFrame( + {"value": []}, + index=pd.MultiIndex.from_tuples( + [], names=["category", "aug_period", "name1", "name2"] + ), + ) + index = pd.MultiIndex.from_tuples( + [(c, p, n1, n2) for c, p, n1, n2, _ in rows], + names=["category", "aug_period", "name1", "name2"], + ) + values = [v for *_, v in rows] + return pd.DataFrame({"value": values}, index=index) + + +def _fit_stage1_mixture( + processed_model: ProcessedModel, + data: pd.DataFrame, + amn_options: AMNEstimationOptions, +) -> MixtureFitResult: + """Fit the Stage-1 mixture on the augmented measure vector. + + The EM method is taken verbatim from `amn_options.mixture_em_method`: + `"complete_case"` (the default) raises `InsufficientCompleteCasesError` on an + unbalanced panel with too few complete rows, while `"missing_data"` + marginalises over each row's missing entries. An optional + `mixture_em_max_rows` cap subsamples rows first so the per-restart cost stays + bounded (used by CHS seeding); standalone estimation keeps the full sample. + """ + n_components = processed_model.dimensions.n_mixtures + layout = build_augmented_measure_layout(processed_model) + augmented = build_augmented_measure_matrix(data, processed_model, layout) + + max_rows = amn_options.mixture_em_max_rows + if max_rows is not None and augmented.shape[0] > max_rows: + rng = np.random.default_rng(amn_options.seed) + keep = rng.choice(augmented.shape[0], max_rows, replace=False) + augmented = augmented[keep] + + return fit_mixture_em( + augmented, + n_components=n_components, + max_iter=amn_options.em_max_iter, + tol=amn_options.em_tol, + n_init=amn_options.em_n_init, + reg_covar=amn_options.em_reg_covar, + seed=amn_options.seed, + layout=layout, + method=amn_options.mixture_em_method, + allow_never_observed=amn_options.allow_never_observed_measurements, + ) + + +def _fail_if_non_gaussian_measurements(model_spec: ModelSpec) -> None: + """Reject probit/Tobit measures: AMN's moment map assumes continuous Gaussians. + + AMN recovers loadings and measurement SDs from the cross-covariance of a + factor's multiple indicators (mixture EM + minimum distance), which treats every + measure as a continuous Gaussian signal. A probit/Tobit measure routed through + that map would be silently mis-estimated, so it is refused here. The AMN->CHS + seeding path supplies a working-linear (Gaussian) spec, so it is unaffected. + """ + non_gaussian = sorted( + name + for name, model in model_spec.measurement_models.items() + if not isinstance(model, GaussianMeasurement) + ) + if non_gaussian: + msg = ( + f"estimate_amn supports only Gaussian measurements, but " + f"{non_gaussian} are non-Gaussian (probit/Tobit). AMN's mixture-EM and " + "minimum-distance stages recover loadings and SDs from multi-indicator " + "cross-covariances, which assume continuous Gaussian measures. Estimate " + "such models with estimate_af, or translate the measures to a working " + "linear system before seeding." + ) + raise NotImplementedError(msg) + + +@beartype(conf=ESTIMATION_CONF) +def estimate_amn( + model_spec: ModelSpec, + data: pd.DataFrame, + options: AMNEstimationOptions | None = None, + start_params: pd.DataFrame | None = None, + fixed_params: pd.DataFrame | None = None, + constraints: list[om.constraints.Constraint] | None = None, + *, + require_initial_anchors: bool = True, + linearize_control_function: bool = False, + for_start_values: bool = False, +) -> AMNEstimationResult: + """Estimate a latent factor model using the Attanasio-Meghir-Nix method. + + Args: + model_spec: Same model spec used by CHS and AF. + data: Panel dataset in long format with MultiIndex (id, period). + options: AMN-specific options. If None, uses defaults. + start_params: Not honoured -- raises `NotImplementedError` when + non-null. The three-stage estimator has no single free + optimisation to warm-start. + fixed_params: Pins for parameters AMN can hold in the stage that fits + them. Currently the `transition` category (production-function + coefficients) is honoured: each pinned coefficient is held at its + value inside the Stage-3 production regression while the remaining + coefficients are fit conditional on the pins, so the reported + params stay consistent with the criterion. Pins for other + categories raise `NotImplementedError` -- pin them on the returned + params yourself, or pass them to `estimate_chs` when seeding it. + constraints: Not honoured -- raises `NotImplementedError` when a + non-empty list is passed. The AMN stages have no optimiser in + which to impose equality/other constraints. + require_initial_anchors: When True (the default), run the + estimator-agnostic period-0 anchor check + (`fail_if_initial_state_unanchored`) and raise `ValueError` if the + initial latent distribution has no scale or location anchor. Set + False only for models that are + intentionally location-under-identified (e.g. the original CHS + replication convention with a free initial mean seeded to 0). The + check is also skipped automatically when `for_start_values=True`, + since the seeding estimator owns identification and runs its own + gate. When True it also emits a `UserWarning` + (`warn_if_overrestricted`) for any period-0 orbit direction pinned + more than once, since such surplus pins are testable restrictions + rather than free normalizations. + linearize_control_function: When True, fit only the linear `cf` term + of any `CorrectionSpec` and skip the higher-order + `NotImplementedError` gate. Used when AMN seeds `estimate_chs`: + the higher-order `kappa_terms` then fall back to small start + defaults rather than being estimated here. + for_start_values: When True, the result is consumed only as start values + for an estimator that re-fits every parameter (`estimate_chs` and + `estimate_af` both seed from AMN), so the standalone guard against + models AMN cannot consistently estimate (restricted CES) is skipped. + Standalone callers leave this False. + + Return: + AMNEstimationResult containing per-stage outputs and the combined + params DataFrame. + + """ + _fail_if_non_gaussian_measurements(model_spec) + if require_initial_anchors and not for_start_values: + fail_if_initial_state_unanchored(model_spec, fixed_params, constraints) + warn_if_overrestricted(model_spec, fixed_params, constraints) + if start_params is not None or constraints: + raise NotImplementedError( + "estimate_amn does not honour start_params or constraints. The " + "three-stage estimator has no single free optimisation in which to " + "warm-start or impose cross-parameter constraints. Use fixed_params " + "to pin individual parameters, or pass start_params / constraints to " + "estimate_chs when seeding it from AMN." + ) + if fixed_params is not None and not fixed_params.empty: + # Pins are honoured inside the stage that fits each parameter, so they + # stay consistent with the criterion (unlike overlaying them on the + # result). Stage 2 (minimum distance) owns the structural measurement + # categories; Stage 3 (production regression) owns `transition`. + categories = set(fixed_params.index.get_level_values(0)) + unsupported = categories - _SUPPORTED_FIXED_CATEGORIES + if unsupported: + raise NotImplementedError( + "estimate_amn honours fixed_params for the " + f"{sorted(_SUPPORTED_FIXED_CATEGORIES)} categories (held in the " + "stage that fits each: Stage 2 for the measurement system, " + "Stage 3 for production). Pins for " + f"{sorted(unsupported)} are not supported (they are derived " + "outputs, not free parameters); pin them on the returned params " + "yourself, or pass them to estimate_chs when seeding it from AMN." + ) + if options is None: + options = AMNEstimationOptions() + amn_options = options + + processed_model = process_model(model_spec) + _fail_if_standalone_unsupported(processed_model, for_start_values=for_start_values) + mixture = _fit_stage1_mixture(processed_model, data, amn_options) + + structural = solve_minimum_distance( + mixture, + processed_model, + weighting=amn_options.minimum_distance_weighting, + algorithm=amn_options.optimizer_algorithm, + allow_overnormalization=amn_options.allow_ces_overnormalization, + algo_options=dict(amn_options.optimizer_options) or None, + fixed_params=fixed_params, + ) + + production = simulate_and_regress( + structural, + processed_model, + model_spec, + mixture_weights=mixture.weights, + n_draws=amn_options.n_simulation_draws, + seed=amn_options.seed, + linearize_control_function=linearize_control_function, + fixed_params=fixed_params, + ) + + measurement = _measurement_params_dataframe(structural) + all_params = pd.concat( + [measurement, production.production_params, production.investment_params] + ).sort_index() + + success = structural.success and mixture.converged + + return AMNEstimationResult( + model_spec=model_spec, + stages=AMNStageResults( + mixture=mixture, + structural=structural, + production=production, + ), + params=all_params, + success=success, + md_criterion=float(structural.objective_value), + synthetic_panel=None, + ) diff --git a/src/skillmodels/amn/inference.py b/src/skillmodels/amn/inference.py new file mode 100644 index 00000000..98ed2e62 --- /dev/null +++ b/src/skillmodels/amn/inference.py @@ -0,0 +1,146 @@ +"""Bootstrap inference for the AMN estimator. + +Cluster (caseid-level) nonparametric bootstrap that re-runs all three +estimation stages on each replicate, mirroring AMN 2020 p. 2523: + + "To estimate confidence intervals and obtain critical values for + test statistics, we use the non-parametric bootstrap over all three + steps." + +Each bootstrap replicate: + +1. Resamples caseids with replacement (size = n_clusters). +2. Calls `estimate_amn` on the resampled panel with the same options. +3. Stores the resulting `all_params` row. + +After `n_boot` replicates, the standard errors are the column-wise std +across replicate parameter vectors, and the covariance is the +column-wise covariance. The first replicate inherits the original +fit's params (resampling is i.i.d.; no need to recompute the point +estimate). +""" + +import dataclasses +import warnings + +import numpy as np +import pandas as pd +from beartype import beartype + +from skillmodels._beartype_conf import INFERENCE_CONF +from skillmodels.amn.estimate import estimate_amn +from skillmodels.amn.types import ( + AMNEstimationOptions, + AMNEstimationResult, + AMNInferenceResult, +) + + +def _resample_by_caseid(data: pd.DataFrame, rng: np.random.Generator) -> pd.DataFrame: + """Draw a caseid bootstrap sample with replacement.""" + case_level = str(data.index.names[0]) + caseids = data.index.get_level_values(case_level).unique() + n = len(caseids) + sampled = caseids[rng.integers(0, n, size=n)] + # Rebuild the panel with fresh sequential caseids so duplicates from + # the bootstrap survive the (caseid, period) uniqueness assumed by + # build_augmented_measure_matrix. + pieces = [] + for new_id, original_id in enumerate(sampled): + block = data.xs(original_id, level=case_level, drop_level=False).copy() + old_periods = block.index.get_level_values(1) + block.index = pd.MultiIndex.from_arrays( + [np.full(len(block), new_id), old_periods], + names=data.index.names, + ) + pieces.append(block) + return pd.concat(pieces) + + +@beartype(conf=INFERENCE_CONF) +def compute_amn_standard_errors( + result: AMNEstimationResult, + data: pd.DataFrame, + amn_options: AMNEstimationOptions | None = None, + *, + n_boot: int = 1_000, + seed: int = 0, +) -> AMNInferenceResult: + """Cluster-bootstrap standard errors for AMN parameter estimates. + + Args: + result: A fitted `AMNEstimationResult` (used to determine the + parameter index and as a fallback when a replicate fails). + data: Panel dataset used for the original fit. + amn_options: AMN options for replicate estimation. If None, + uses defaults (same as `estimate_amn`). + n_boot: Number of bootstrap replicates. + seed: RNG seed. + + Return: + AMNInferenceResult with replicate-level params, std errors, and + covariance. + + """ + if amn_options is None: + amn_options = AMNEstimationOptions() + + rng = np.random.default_rng(seed) + case_level = str(data.index.names[0]) + caseids = data.index.get_level_values(case_level).unique() + n_clusters = len(caseids) + + base_index = result.params.index + replicate_rows: list[pd.Series] = [] + n_failed = 0 + for b in range(n_boot): + replicate_seed = int(rng.integers(0, 2**32 - 1)) + boot_data = _resample_by_caseid(data, rng) + boot_options = dataclasses.replace(amn_options, seed=replicate_seed) + try: + boot_result = estimate_amn( + result.model_spec, + boot_data, + boot_options, + ) + if not boot_result.success: + n_failed += 1 + warnings.warn( + f"AMN bootstrap replicate {b} did not converge; " + "excluding it from the bootstrap distribution.", + RuntimeWarning, + stacklevel=2, + ) + row = pd.Series(np.nan, index=base_index) + else: + row = boot_result.params.reindex(base_index)["value"] + except (np.linalg.LinAlgError, ValueError, RuntimeError) as exc: + n_failed += 1 + warnings.warn( + f"AMN bootstrap replicate {b} failed: {exc}", + RuntimeWarning, + stacklevel=2, + ) + row = pd.Series(np.nan, index=base_index) + replicate_rows.append(row) + + replicate_df = pd.DataFrame(replicate_rows).reset_index(drop=True) + replicate_df.columns = base_index + standard_errors = replicate_df.std(axis=0, ddof=1) + vcov = replicate_df.cov(ddof=1) + + if n_failed > 0: + warnings.warn( + f"{n_failed}/{n_boot} AMN bootstrap replicates failed; " + "standard errors may be biased.", + RuntimeWarning, + stacklevel=2, + ) + + return AMNInferenceResult( + standard_errors=standard_errors, + vcov=vcov, + replicate_params=replicate_df, + n_clusters=n_clusters, + n_boot=n_boot, + ) diff --git a/src/skillmodels/amn/minimum_distance.py b/src/skillmodels/amn/minimum_distance.py new file mode 100644 index 00000000..64da7996 --- /dev/null +++ b/src/skillmodels/amn/minimum_distance.py @@ -0,0 +1,937 @@ +"""Stage 2 of the AMN estimator: structural recovery via minimum distance. + +Takes the reduced-form mixture parameters (Pi_k, Psi_k) from Stage 1 +(`skillmodels.amn.mixture_em`) and recovers the structural parameters +(Lambda, A, Sigma, mu_k, Omega_k) subject to the AMN-paper constraint +structure (eq. 12-13): factor-measurement zero pattern in Lambda, +age-invariance for time-invariant factors, scale normalization +(lambda=1 on the reference measure per factor), and the period-0 +mean-zero restriction. + +Mirrors `STEP2_func.R` from the AMN 2020 supplementary archive: a +packed-parameter L-BFGS-B optimizer over the sum-of-squares distance +between the EM-fitted moments (Pi_m, Psi_m) and the model-implied +moments parameterized by structural quantities. +""" + +# The JAX objective below uses `.at[idx].set(...)` functional array updates, which +# ruff's pandas-vet rule misreads as pandas `.at` scalar access. This module has +# no pandas `.at` usage, so the rule is disabled file-wide. +# ruff: noqa: PD008 + +from collections.abc import Callable, Mapping +from dataclasses import dataclass +from typing import Any + +import jax +import jax.numpy as jnp +import numpy as np +import optimagic as om +import pandas as pd + +from skillmodels.amn.types import ( + AugmentedMeasureLayout, + MinimumDistanceResult, + MixtureFitResult, +) +from skillmodels.common.types import ProcessedModel + +_CES_TRANSITION_NAMES = frozenset( + {"log_ces", "log_ces_with_constant", "log_ces_general"} +) + + +def _validate_ces_stage2_anchors( + processed_model: ProcessedModel, + layout: AugmentedMeasureLayout, + *, + allow_overnormalization: bool, +) -> None: + """Check the per-period CES anchors of AMN's Stage-2 transformed factors. + + This is NOT a primitive Freyberger-minimal normalization check (audit F1). + For the restricted CES with psi=1, Freyberger requires only ONE primitive + scale anchor (e.g. lambda_theta,0,1=1); the later skill and investment + loadings are then identified through the CES restrictions, so pinning one + loading per factor-period over-restricts the primitive model. AMN instead + works in *transformed* (tilde) factor coordinates in Stages 1-2, where one + anchor per factor-period is the correct scale normalization of those + internal coordinates. This guard enforces exactly that internal anchoring; + it does not certify the returned loadings as primitive estimates. + + Restricted `log_ces` / `log_ces_with_constant` are rejected upstream + (`estimate_amn` standalone guard) because the primitive scale-recovery step + is not implemented, so in practice this runs for `log_ces_general` (which + can express the transformed CES) and for the CHS/AF seeding path. One anchor + per factor-period pins the transformed scale; more than one over-normalizes + those internal coordinates (raise unless `allow_overnormalization`); zero + leaves the transformed scale unidentified. + + Known gap (P4): the check examines only factors whose own transition is CES, + so a normalized investment loading is not flagged when investment has a + linear transition. + """ + labels = processed_model.labels + transition_info = processed_model.transition_info + if transition_info is None: + return + func_names = transition_info.function_names + normalizations = processed_model.normalizations + aug_to_period = labels.aug_periods_to_periods + for factor in labels.latent_factors: + if func_names.get(factor) not in _CES_TRANSITION_NAMES: + continue + norm = normalizations.get(factor) + for period in labels.periods: + has_meas = any( + p == int(period) and f == factor + for (p, f, _m) in layout.measurement_meta + ) + if not has_meas: + continue + aug_periods = [a for a, p in aug_to_period.items() if int(p) == int(period)] + n_norm = 0 + if norm is not None: + for a in aug_periods: + n_norm += len(norm.loadings[a]) + if n_norm == 0: + msg = ( + f"CES factor '{factor}' has no loading normalization in " + f"period {period}; the Stage-2 transformed-factor scale is " + "unidentified. Pin exactly one measurement loading per " + "period." + ) + raise ValueError(msg) + if n_norm > 1 and not allow_overnormalization: + msg = ( + f"CES factor '{factor}' has {n_norm} loading normalizations " + f"in period {period}, but one anchor per factor-period " + "already pins the Stage-2 transformed-factor scale. Extra " + "anchors over-normalize those internal coordinates. Pin " + "exactly one loading per period, or pass " + "allow_ces_overnormalization=True for a deliberate " + "fixed-loadings analysis." + ) + raise ValueError(msg) + + +@dataclass(frozen=True) +class _Structure: + """Pre-computed structural layout for minimum-distance recovery. + + Carries the slot-to-factor-period mapping plus all the + free/normalized/zero masks needed by the optimizer. + """ + + factor_period_slots: tuple[tuple[int, str], ...] + """Ordered (period, factor_name) for the structural mu / Omega columns. + Latent and observed-factor / control slots are all included.""" + + n_factor_slots: int + """``len(factor_period_slots)``.""" + + n_aug: int + """Number of rows in the augmented measure vector.""" + + lambda_value: np.ndarray + """Initial Lambda matrix (zeros + normalized 1s where pinned).""" + + lambda_free_mask: np.ndarray + """Boolean (n_aug, n_factor_slots): True where Lambda is free.""" + + intercept_value: np.ndarray + """Initial intercept vector (zeros + normalized values where pinned).""" + + intercept_free_mask: np.ndarray + """Boolean (n_aug,): True where the intercept is free.""" + + sigma2_free_mask: np.ndarray + """Boolean (n_aug,): True where the measurement-error variance is free. + False for observed-factor / control slots (zero by construction).""" + + baseline_mean_zero_slots: tuple[int, ...] + """Indices into ``factor_period_slots`` for which the K-th mixture's + mean is determined by the tau-weighted sum-to-zero constraint + (AMN eq. 13). The period-0 latent-factor slots, EXCEPT factors whose + initial location is already pinned by a measurement-intercept + normalization (those keep a free mean to avoid double-normalizing the + initial location -- audit F7).""" + + +def _build_structure( # noqa: C901, PLR0912, PLR0915 + layout: AugmentedMeasureLayout, + processed_model: ProcessedModel, +) -> _Structure: + """Translate the augmented layout into per-Lambda/A/Sigma constraint masks. + + For each augmented slot, decides which structural factor-period column + it loads on, and whether its Lambda / A / Sigma entries are free + (estimated) or pinned (normalized or zero by construction). + """ + n_aug = len(layout.columns) + normalizations = processed_model.normalizations + aug_to_period = processed_model.labels.aug_periods_to_periods + observed_factor_names = processed_model.labels.observed_factors + + # Collect factor-period slots: one per (period, factor) that actually + # has at least one row loading on it (latent measurements) OR is the + # "self-slot" of an observed factor / control augmented row. + slots: list[tuple[int, str]] = [] + slot_index: dict[tuple[int, str], int] = {} + for _slot, (period, factor, _meas) in zip( + layout.measurement_slots, layout.measurement_meta, strict=True + ): + key = (period, factor) + if key not in slot_index: + slot_index[key] = len(slots) + slots.append(key) + for _slot, (period, of_name) in zip( + layout.observed_factor_slots, layout.observed_factor_meta, strict=True + ): + key = (period, of_name) + if key not in slot_index: + slot_index[key] = len(slots) + slots.append(key) + for ctrl in layout.control_meta: + # Controls collapse to a single period (-1 = time-invariant marker). + key = (-1, ctrl) + if key not in slot_index: + slot_index[key] = len(slots) + slots.append(key) + + n_slots = len(slots) + lambda_value = np.zeros((n_aug, n_slots)) + lambda_free_mask = np.zeros((n_aug, n_slots), dtype=bool) + intercept_value = np.zeros(n_aug) + intercept_free_mask = np.zeros(n_aug, dtype=bool) + sigma2_free_mask = np.zeros(n_aug, dtype=bool) + + # Factors whose period-0 location is already pinned by a measurement + # intercept normalization. For these the AMN weighted mean-zero restriction + # must NOT also be imposed: a pinned intercept and mean-zero both anchor the + # same initial-location orbit direction, so applying both over-identifies it + # (audit F7) -- the factor mean is forced to satisfy a constraint the pinned + # intercept already discharges, leaving an irreducible moment residual when + # the true initial mean is nonzero. + factors_with_pinned_initial_intercept: set[str] = set() + + # Latent-factor measurement slots. + for aug_idx, (period, factor, meas_name) in zip( + layout.measurement_slots, layout.measurement_meta, strict=True + ): + sigma2_free_mask[aug_idx] = True + col = slot_index[(period, factor)] + # Determine whether the loading at this (period, factor, meas) is + # normalized (typically the "first" measurement per factor) or + # free. Skillmodels stores normalizations per aug_period; walk the + # aug_periods that map to this calendar period and inspect them. + loading_normalized = False + intercept_normalized = False + loading_norm_value = 1.0 + intercept_norm_value = 0.0 + if factor in normalizations: + for aug_period, cal_period in aug_to_period.items(): + if int(cal_period) != int(period): + continue + load_map = normalizations[factor].loadings[aug_period] + int_map = normalizations[factor].intercepts[aug_period] + if meas_name in load_map: + loading_normalized = True + loading_norm_value = float(load_map[meas_name]) + if meas_name in int_map: + intercept_normalized = True + intercept_norm_value = float(int_map[meas_name]) + if loading_normalized: + lambda_value[aug_idx, col] = loading_norm_value + else: + lambda_free_mask[aug_idx, col] = True + if intercept_normalized: + intercept_value[aug_idx] = intercept_norm_value + if int(period) == 0: + factors_with_pinned_initial_intercept.add(factor) + else: + intercept_free_mask[aug_idx] = True + + # Observed-factor slots: load on their own column with lambda=1, + # sigma=0 (perfectly observed); intercept pinned to zero so the + # factor mean carries the observed level. + for aug_idx, (period, of_name) in zip( + layout.observed_factor_slots, layout.observed_factor_meta, strict=True + ): + col = slot_index[(period, of_name)] + lambda_value[aug_idx, col] = 1.0 + # sigma2 stays False (pinned to zero by construction). + # Intercept pinned to zero: with lambda=1 and sigma2=0 the slot's + # reduced-form level Pi_k = intercept + mu_k is otherwise split + # arbitrarily between the (free) intercept and the (free) factor + # mean mu_k. Pin intercept=0 so the factor mean carries the full + # observed level -- the level Stage 3 draws and the posterior uses. + intercept_value[aug_idx] = 0.0 + + # Control slots: same pattern as observed factors (lambda=1, sigma=0). + for aug_idx, ctrl in zip(layout.control_slots, layout.control_meta, strict=True): + col = slot_index[(-1, ctrl)] + lambda_value[aug_idx, col] = 1.0 + # Intercept pinned to zero (see observed-factor block): the + # control's factor-mean slot carries its full observed level. + intercept_value[aug_idx] = 0.0 + + del observed_factor_names + + # Mean-zero baseline: period-0 latent-factor slots get pinned by the + # tau-weighted sum-to-zero constraint -- UNLESS the factor's initial + # location is already pinned by a measurement-intercept normalization, in + # which case mean-zero would be a second normalization on the same orbit + # direction (audit F7) and the factor mean stays free instead. Observed + # factors / controls have free means (no normalization needed; they're + # directly observed). + latent_factor_names = set(processed_model.labels.latent_factors) + baseline_slot_ids = tuple( + slot_index[(p, f)] + for (p, f) in slots + if p == 0 + and f in latent_factor_names + and f not in factors_with_pinned_initial_intercept + ) + + return _Structure( + factor_period_slots=tuple(slots), + n_factor_slots=n_slots, + n_aug=n_aug, + lambda_value=lambda_value, + lambda_free_mask=lambda_free_mask, + intercept_value=intercept_value, + intercept_free_mask=intercept_free_mask, + sigma2_free_mask=sigma2_free_mask, + baseline_mean_zero_slots=baseline_slot_ids, + ) + + +def _pack_layout(struct: _Structure, n_components: int) -> tuple[int, dict[str, slice]]: + """Decide the layout of the flat optimizer parameter vector. + + Returns: + ------- + n_total + Total length of the parameter vector. + slices + Mapping from parameter section name to a `slice` into the flat + vector. Sections: + + - ``"sigma2"`` -- free entries of the measurement-error + variances. + - ``"chol_"`` for ``m`` in 0..n_components-1 -- lower-tri + Cholesky elements of Omega_m, packed row-major. + - ``"mu_"`` for ``m`` in 0..n_components-2 -- the free + entries of mu_m (i.e. excluding the K-th mixture, which is + determined by the mean-zero constraint at baseline slots + and by free params elsewhere... actually we still free + mu_K at non-baseline slots; only the baseline slots of + mu_K are derived). + """ + slices: dict[str, slice] = {} + cursor = 0 + + n_sigma2_free = int(struct.sigma2_free_mask.sum()) + slices["sigma2"] = slice(cursor, cursor + n_sigma2_free) + cursor += n_sigma2_free + + n_factor = struct.n_factor_slots + n_chol_per = n_factor * (n_factor + 1) // 2 + for m in range(n_components): + slices[f"chol_{m}"] = slice(cursor, cursor + n_chol_per) + cursor += n_chol_per + + n_baseline = len(struct.baseline_mean_zero_slots) + # mu has shape (n_components, n_factor); for the K-th mixture, the + # baseline_mean_zero_slots are determined => those are excluded. + n_mu_free = n_components * n_factor - n_baseline + slices["mu"] = slice(cursor, cursor + n_mu_free) + cursor += n_mu_free + + n_lambda_free = int(struct.lambda_free_mask.sum()) + slices["lambda"] = slice(cursor, cursor + n_lambda_free) + cursor += n_lambda_free + + n_intercept_free = int(struct.intercept_free_mask.sum()) + slices["intercept"] = slice(cursor, cursor + n_intercept_free) + cursor += n_intercept_free + + return cursor, slices + + +def _unpack( + flat: np.ndarray, + struct: _Structure, + slices: dict[str, slice], + *, + n_components: int, + mixture_weights: np.ndarray, +) -> tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray, np.ndarray]: + """Decode a flat parameter vector into (sigma2, Omega, mu, Lambda, A). + + Applies the tau-weighted mean-zero constraint to mu_K at the + baseline_mean_zero_slots. + """ + n_factor = struct.n_factor_slots + + sigma2 = np.zeros(struct.n_aug) + sigma2[struct.sigma2_free_mask] = flat[slices["sigma2"]] + + omegas = np.zeros((n_components, n_factor, n_factor)) + tril_rows, tril_cols = np.tril_indices(n_factor) + for m in range(n_components): + chol = np.zeros((n_factor, n_factor)) + chol[tril_rows, tril_cols] = flat[slices[f"chol_{m}"]] + omegas[m] = chol @ chol.T + + mu = np.zeros((n_components, n_factor)) + baseline_set = set(struct.baseline_mean_zero_slots) + free_mu_positions: list[tuple[int, int]] = [] + for m in range(n_components): + is_last = m == n_components - 1 + for j in range(n_factor): + if is_last and j in baseline_set: + continue + free_mu_positions.append((m, j)) + mu_values = flat[slices["mu"]] + for (m, j), val in zip(free_mu_positions, mu_values, strict=True): + mu[m, j] = val + # Enforce mean-zero at baseline slots for the last mixture. + if baseline_set and n_components > 1: + for j in struct.baseline_mean_zero_slots: + num = -np.sum(mixture_weights[:-1] * mu[:-1, j]) + mu[-1, j] = num / mixture_weights[-1] + + lambda_mat = struct.lambda_value.copy() + lambda_mat[struct.lambda_free_mask] = flat[slices["lambda"]] + + intercept = struct.intercept_value.copy() + intercept[struct.intercept_free_mask] = flat[slices["intercept"]] + + return sigma2, omegas, mu, lambda_mat, intercept + + +def _model_implied_moments( + sigma2: np.ndarray, + omegas: np.ndarray, + mu: np.ndarray, + lambda_mat: np.ndarray, + intercept: np.ndarray, +) -> tuple[np.ndarray, np.ndarray]: + """Compute (per-component mean, cov) implied by the structural params. + + Returns shapes ``(K, n_aug)`` and ``(K, n_aug, n_aug)`` respectively. + """ + n_components = omegas.shape[0] + n_aug = intercept.shape[0] + means = np.empty((n_components, n_aug)) + covs = np.empty((n_components, n_aug, n_aug)) + diag_sigma2 = np.diag(sigma2) + for m in range(n_components): + means[m] = intercept + lambda_mat @ mu[m] + covs[m] = lambda_mat @ omegas[m] @ lambda_mat.T + diag_sigma2 + return means, covs + + +def _objective( + flat: np.ndarray, + struct: _Structure, + slices: dict[str, slice], + *, + n_components: int, + mixture_weights: np.ndarray, + target_means: np.ndarray, + target_covs: np.ndarray, +) -> float: + sigma2, omegas, mu, lam, inter = _unpack( + flat, + struct, + slices, + n_components=n_components, + mixture_weights=mixture_weights, + ) + pred_means, pred_covs = _model_implied_moments(sigma2, omegas, mu, lam, inter) + diff_mean = pred_means - target_means + diff_cov = pred_covs - target_covs + # Identity-metric minimum-distance criterion (AMN 2020 step 2 default). + # NOTE: this is an UNWEIGHTED sum of squares over per-component means and + # the FULL covariance matrices. Off-diagonal covariance moments are thus + # implicitly weighted twice (the matrices are symmetric) and every mixture + # component is weighted equally irrespective of its weight tau_k. This is + # consistent under correct specification and full identification (the + # criterion is minimised at zero moment discrepancy) but is not the + # efficient / optimal-weighted or tau-weighted MD criterion and selects a + # different pseudo-true value under misspecification. A vech-packed and/or + # tau-/Avar-weighted variant is intentionally NOT applied here to preserve + # the existing estimand; it should be added as a separate opt-in weighting. + return float(np.sum(diff_mean**2) + np.sum(diff_cov**2)) + + +def _make_objective_and_grad( + struct: _Structure, + slices: dict[str, slice], + *, + n_components: int, + mixture_weights: np.ndarray, + target_means: np.ndarray, + target_covs: np.ndarray, +) -> tuple[Callable[[np.ndarray], float], Callable[[np.ndarray], np.ndarray]]: + """Build jitted (value, gradient) of the identity-metric MD criterion. + + The criterion is identical to `_objective`, but written in JAX so the + optimizer receives an *exact* analytical gradient (one backward pass) rather + than a finite-difference gradient that costs `n_params` objective + evaluations. With a large factor-period block the parameter vector runs to + thousands of entries, so the finite-difference cost per L-BFGS-B step is the + difference between seconds and hours. + + Every scatter target (free-entry indices, the lower-triangular Cholesky + pattern, the baseline mean-zero constraint) is a static function of the model + structure, so the only traced input is the flat parameter vector. + """ + n_factor = struct.n_factor_slots + n_aug = struct.n_aug + # Flat (single-axis) scatter indices throughout: a 2-axis `.at[rows, cols]` + # reads to ruff as a pandas `.at` scalar access (PD008); linear indices keep + # the functional update unambiguous and equally differentiable. + sigma2_idx = jnp.asarray(np.nonzero(struct.sigma2_free_mask)[0]) + chol_slices = [slices[f"chol_{m}"] for m in range(n_components)] + tr_rows, tr_cols = np.tril_indices(n_factor) + tril_lin = jnp.asarray(tr_rows * n_factor + tr_cols) + + baseline_set = set(struct.baseline_mean_zero_slots) + free_mu_positions = [ + m * n_factor + j + for m in range(n_components) + for j in range(n_factor) + if not (m == n_components - 1 and j in baseline_set) + ] + mu_lin = jnp.asarray(free_mu_positions) + baseline_cols = jnp.asarray(list(struct.baseline_mean_zero_slots), dtype=int) + has_baseline = bool(struct.baseline_mean_zero_slots) and n_components > 1 + + lam_r, lam_c = np.nonzero(struct.lambda_free_mask) + lam_lin = jnp.asarray(lam_r * n_factor + lam_c) + inter_idx = jnp.asarray(np.nonzero(struct.intercept_free_mask)[0]) + + lambda_flat = jnp.asarray(struct.lambda_value).reshape(-1) + intercept_value = jnp.asarray(struct.intercept_value) + weights_j = jnp.asarray(mixture_weights) + tmeans = jnp.asarray(target_means) + tcovs = jnp.asarray(target_covs) + + s_sig, s_mu = slices["sigma2"], slices["mu"] + s_lam, s_int = slices["lambda"], slices["intercept"] + + def _value(flat: jax.Array) -> jax.Array: + sigma2 = jnp.zeros(n_aug).at[sigma2_idx].set(flat[s_sig.start : s_sig.stop]) + + omega_list = [] + for sl in chol_slices: + chol = jnp.zeros(n_factor * n_factor).at[tril_lin].set(flat[sl]) + chol = chol.reshape(n_factor, n_factor) + omega_list.append(chol @ chol.T) + omegas = jnp.stack(omega_list) + + mu_flat = jnp.zeros(n_components * n_factor) + mu_flat = mu_flat.at[mu_lin].set(flat[s_mu.start : s_mu.stop]) + if has_baseline: + mu_grid = mu_flat.reshape(n_components, n_factor) + num = -(weights_j[:-1] @ mu_grid[:-1][:, baseline_cols]) + base_lin = (n_components - 1) * n_factor + baseline_cols + mu_flat = mu_flat.at[base_lin].set(num / weights_j[-1]) + mu = mu_flat.reshape(n_components, n_factor) + + lam = lambda_flat.at[lam_lin].set(flat[s_lam.start : s_lam.stop]) + lam = lam.reshape(n_aug, n_factor) + inter = intercept_value.at[inter_idx].set(flat[s_int.start : s_int.stop]) + + means = inter[None, :] + mu @ lam.T # (K, n_aug) + covs = jnp.einsum("af,kfg,bg->kab", lam, omegas, lam) + jnp.diag(sigma2)[None] + return jnp.sum((means - tmeans) ** 2) + jnp.sum((covs - tcovs) ** 2) + + value_jit = jax.jit(_value) + grad_jit = jax.jit(jax.grad(_value)) + + def value_fn(flat: np.ndarray) -> float: + return float(value_jit(jnp.asarray(flat, dtype=float))) + + def grad_fn(flat: np.ndarray) -> np.ndarray: + return np.asarray(grad_jit(jnp.asarray(flat, dtype=float)), dtype=float) + + return value_fn, grad_fn + + +def _initial_guess( + struct: _Structure, + slices: dict[str, slice], + *, + n_components: int, + n_total: int, + target_means: np.ndarray, # noqa: ARG001 + target_covs: np.ndarray, +) -> np.ndarray: + """Build a sensible starting vector from the EM moments. + + Seeds sigma^2 from the average diagonal of the EM covariances scaled + down by 0.5 (so factors keep at least half the explained variance); + seeds each Omega Cholesky from the cholesky of the average EM + covariance restricted to the factor-period block; seeds mu_m from + the EM means at the corresponding slot identities. + """ + flat = np.zeros(n_total) + + diag_avg = np.mean(np.diagonal(target_covs, axis1=1, axis2=2), axis=0) + sigma2_guess = 0.25 * np.clip(diag_avg, 1e-3, None) + flat[slices["sigma2"]] = sigma2_guess[struct.sigma2_free_mask] + + # Project the average EM covariance onto a roughly diagonal Omega in + # the factor-period basis. For v0 we use the identity rescaled by + # the average non-error variance trace; this is a safe, well-defined + # start. + avg_factor_var = np.maximum(diag_avg.mean() * 0.5, 1e-2) + n_factor = struct.n_factor_slots + init_chol = np.sqrt(avg_factor_var) * np.eye(n_factor) + tril_rows, tril_cols = np.tril_indices(n_factor) + init_chol_vec = init_chol[tril_rows, tril_cols] + for m in range(n_components): + flat[slices[f"chol_{m}"]] = init_chol_vec + + # Seed mu_m from each EM component's projection onto the slot space + # via least-squares (lambda_value pseudo-inverse on the centered + # means). For v0 use a simpler heuristic: spread the EM means across + # mixtures using a small dispersion around zero. + flat[slices["mu"]] = 0.0 + + flat[slices["lambda"]] = 1.0 + flat[slices["intercept"]] = 0.0 + return flat + + +def _lower_bounds( + struct: _Structure, # noqa: ARG001 + slices: dict[str, slice], + n_total: int, +) -> np.ndarray: + bounds = np.full(n_total, -np.inf) + bounds[slices["sigma2"]] = 1e-8 + return bounds + + +# Parameter categories whose pins solve_minimum_distance can hold: the +# structural measurement system fit in Stage 2. Each maps to a free entry of +# the packed optimiser vector (loadings -> Lambda, controls -> intercepts, +# meas_sds -> sqrt of the measurement variances). +_STAGE2_FIXED_CATEGORIES = frozenset({"loadings", "controls", "meas_sds"}) + + +def _free_flat_index( + rank: int, + slice_start: int, + label: object, + what: str, + *, + is_free: bool, +) -> int: + """Return the packed-vector index of a free structural entry, or raise. + + ``is_free`` / ``rank`` come from the entry's free-mask and its cumulative + rank among free entries; ``slice_start`` is the start of the owning vector + section. A non-free entry is normalized or pinned by the model spec and so + cannot be pinned again. + """ + if not is_free: + msg = ( + f"Cannot pin {what} {label!r}: it is normalized or fixed by the model " + "spec, so it is not a free Stage-2 parameter." + ) + raise ValueError(msg) + return slice_start + int(rank) + + +def _stage2_fixed_indices( + fixed_params: pd.DataFrame | None, + struct: _Structure, + layout: AugmentedMeasureLayout, + slices: dict[str, slice], +) -> list[tuple[int, float]]: + """Map Stage-2 ``fixed_params`` rows to ``(flat_index, value)`` pairs. + + Handles the structural measurement categories: ``loadings`` (a free entry + of the Lambda matrix), ``controls`` (a free measurement intercept), and + ``meas_sds`` (a free measurement-error SD; stored internally as the + variance, so the squared value is pinned). Rows of other categories are + ignored -- they belong to other stages. Raises if a row targets a + measurement that does not exist or a parameter the model spec already + normalizes/pins (hence not a free Stage-2 parameter). + """ + if fixed_params is None or fixed_params.empty: + return [] + + meas_slot = { + (int(period), meas): aug + for aug, (period, _factor, meas) in zip( + layout.measurement_slots, layout.measurement_meta, strict=True + ) + } + slot_col = {pf: i for i, pf in enumerate(struct.factor_period_slots)} + n_slots = struct.n_factor_slots + lambda_flat_mask = struct.lambda_free_mask.ravel() + lambda_rank = np.cumsum(lambda_flat_mask) - 1 + intercept_rank = np.cumsum(struct.intercept_free_mask) - 1 + sigma2_rank = np.cumsum(struct.sigma2_free_mask) - 1 + + out: list[tuple[int, float]] = [] + for label, value in fixed_params["value"].items(): + category, period, name1, name2 = label # ty: ignore[not-iterable] + if category not in _STAGE2_FIXED_CATEGORIES: + continue + period = int(period) + meas = str(name1) + aug = meas_slot.get((period, meas)) + if aug is None: + msg = ( + f"fixed_params row {label!r} targets measurement '{meas}' at " + f"period {period}, which is not in the model's measurement system." + ) + raise ValueError(msg) + if category == "loadings": + factor = str(name2) + col = slot_col.get((period, factor)) + if col is None: + msg = ( + f"fixed_params row {label!r} targets factor '{factor}', which " + f"has no structural slot at period {period}." + ) + raise ValueError(msg) + pos = aug * n_slots + col + flat_i = _free_flat_index( + int(lambda_rank[pos]), + slices["lambda"].start, + label, + "loading", + is_free=bool(lambda_flat_mask[pos]), + ) + out.append((flat_i, float(value))) + elif category == "controls": + flat_i = _free_flat_index( + int(intercept_rank[aug]), + slices["intercept"].start, + label, + "intercept", + is_free=bool(struct.intercept_free_mask[aug]), + ) + out.append((flat_i, float(value))) + else: # meas_sds: stored as a variance, so pin the squared value. + flat_i = _free_flat_index( + int(sigma2_rank[aug]), + slices["sigma2"].start, + label, + "measurement SD", + is_free=bool(struct.sigma2_free_mask[aug]), + ) + out.append((flat_i, float(value) ** 2)) + return out + + +def solve_minimum_distance( + mixture: MixtureFitResult, + processed_model: ProcessedModel, + *, + weighting: str = "identity", + algorithm: str = "scipy_lbfgsb", + allow_overnormalization: bool = False, + algo_options: Mapping[str, Any] | None = None, + fixed_params: pd.DataFrame | None = None, +) -> MinimumDistanceResult: + """Recover structural parameters from the reduced-form mixture. + + Args: + mixture: Stage 1 fit (reduced-form Pi, Psi per component). + processed_model: Skillmodels processed model (provides normalization + and constraint structure). + weighting: ``"identity"`` (default; the AMN paper's choice). This is + an unweighted identity-metric criterion over per-component means + and the full covariance matrices, so off-diagonal moments are + implicitly counted twice and components are weighted equally + regardless of tau_k. ``"optimal"`` is reserved for a future + Avar-weighted criterion and currently raises + ``NotImplementedError``. + algorithm: optimagic algorithm name (default ``scipy_lbfgsb``). + allow_overnormalization: Opt out of the CES minimal-normalization + guard. When True, extra normalized CES loadings are treated as a + deliberate fixed-loadings analysis instead of an error. + algo_options: Optional optimagic ``algo_options`` for the L-BFGS-B + solver (e.g. ``{"stopping_maxiter": 500}``). CHS seeding caps the + iterations here so a rough structural seed stays fast on a large + factor-period block; standalone estimation leaves it unbounded. + fixed_params: optional params frame whose structural measurement rows + (``loadings`` / ``controls`` / ``meas_sds``) pin the corresponding + free entries of the packed optimiser vector. The pinned entries are + seeded to their values and held there via an optimagic + ``FixedConstraint`` so the remaining structural parameters are fit + conditional on the pins. Rows of other categories are ignored. + + Return: + MinimumDistanceResult with structural Lambda, A, Sigma, and the + per-component factor means and covariances. + + """ + if weighting not in ("identity", "optimal"): + msg = f"Unknown weighting '{weighting}'." + raise ValueError(msg) + if weighting == "optimal": + msg = ( + "weighting='optimal' is documented but not yet implemented; " + "only weighting='identity' is currently supported." + ) + raise NotImplementedError(msg) + + layout = mixture.layout + if not layout.measurement_slots and not layout.observed_factor_slots: + msg = "Mixture layout has no slots; cannot run minimum distance." + raise ValueError(msg) + + _validate_ces_stage2_anchors( + processed_model, layout, allow_overnormalization=allow_overnormalization + ) + + struct = _build_structure(layout, processed_model) + n_components = mixture.weights.shape[0] + n_total, slices = _pack_layout(struct, n_components) + + target_means = mixture.means.copy() + target_covs = mixture.covariances.copy() + + flat0 = _initial_guess( + struct, + slices, + n_components=n_components, + n_total=n_total, + target_means=target_means, + target_covs=target_covs, + ) + lower = _lower_bounds(struct, slices, n_total) + + # Pass an exact JAX gradient: with a large factor-period block the parameter + # vector has thousands of entries, so a finite-difference gradient would cost + # thousands of dense objective evaluations per L-BFGS-B step (hours at panel + # scale). The analytical gradient is one backward pass. + fun, jac = _make_objective_and_grad( + struct, + slices, + n_components=n_components, + mixture_weights=mixture.weights, + target_means=target_means, + target_covs=target_covs, + ) + + fixed_idx = _stage2_fixed_indices(fixed_params, struct, layout, slices) + constraints: list[om.constraints.Constraint] | None = None + if fixed_idx: + for flat_i, value in fixed_idx: + flat0[flat_i] = value + fixed_positions = np.array([i for i, _ in fixed_idx], dtype=int) + constraints = [om.FixedConstraint(selector=lambda x, p=fixed_positions: x[p])] + + result = om.minimize( + fun=fun, + jac=jac, + params=flat0, + algorithm=algorithm, + bounds=om.Bounds(lower=lower), + constraints=constraints, + algo_options=dict(algo_options) if algo_options else None, + ) + success = bool(result.success) + flat_opt = np.asarray(result.params, dtype=float) + sigma2, omegas, mu, lambda_mat, intercept = _unpack( + flat_opt, + struct, + slices, + n_components=n_components, + mixture_weights=mixture.weights, + ) + + loadings_df = _loadings_dataframe(struct, layout, lambda_mat) + intercepts_df = _intercepts_dataframe(layout, intercept) + meas_sds_df = _meas_sds_dataframe(layout, np.sqrt(np.clip(sigma2, 0.0, None))) + + return MinimumDistanceResult( + loadings=loadings_df, + measurement_intercepts=intercepts_df, + measurement_sds=meas_sds_df, + factor_mixture_means=mu, + factor_mixture_covariances=omegas, + factor_period_slots=struct.factor_period_slots, + objective_value=float(result.fun), + success=success, + ) + + +def _loadings_dataframe( + struct: _Structure, + layout: AugmentedMeasureLayout, + lambda_mat: np.ndarray, +) -> pd.DataFrame: + """Return a long-format Lambda DataFrame, one row per nonzero entry.""" + rows = [] + aug_idx_to_meta: dict[int, tuple[int, str, str]] = dict( + zip(layout.measurement_slots, layout.measurement_meta, strict=True) + ) + slot_to_id = {sp: i for i, sp in enumerate(struct.factor_period_slots)} + for slot, meta in aug_idx_to_meta.items(): + period, factor, meas = meta + col = slot_to_id[(period, factor)] + rows.append( + { + "period": period, + "measurement": meas, + "factor": factor, + "loading": float(lambda_mat[slot, col]), + } + ) + if not rows: + return pd.DataFrame( + columns=["period", "measurement", "factor", "loading"] + ).set_index(["period", "measurement", "factor"]) + return pd.DataFrame(rows).set_index(["period", "measurement", "factor"]) + + +def _intercepts_dataframe( + layout: AugmentedMeasureLayout, + intercept: np.ndarray, +) -> pd.DataFrame: + rows = [] + for slot, (period, _factor, meas) in zip( + layout.measurement_slots, layout.measurement_meta, strict=True + ): + rows.append( + { + "period": period, + "measurement": meas, + "intercept": float(intercept[slot]), + } + ) + if not rows: + return pd.DataFrame(columns=["period", "measurement", "intercept"]).set_index( + ["period", "measurement"] + ) + return pd.DataFrame(rows).set_index(["period", "measurement"]) + + +def _meas_sds_dataframe( + layout: AugmentedMeasureLayout, + sds: np.ndarray, +) -> pd.DataFrame: + rows = [] + for slot, (period, _factor, meas) in zip( + layout.measurement_slots, layout.measurement_meta, strict=True + ): + rows.append({"period": period, "measurement": meas, "sd": float(sds[slot])}) + if not rows: + return pd.DataFrame(columns=["period", "measurement", "sd"]).set_index( + ["period", "measurement"] + ) + return pd.DataFrame(rows).set_index(["period", "measurement"]) diff --git a/src/skillmodels/amn/missing_data_em.py b/src/skillmodels/amn/missing_data_em.py new file mode 100644 index 00000000..2c2284e9 --- /dev/null +++ b/src/skillmodels/amn/missing_data_em.py @@ -0,0 +1,415 @@ +"""Gaussian-mixture EM that marginalises over missing entries (AMN Stage 1). + +`sklearn`'s `GaussianMixture` is complete-case only: it drops every row with a +missing entry. On an unbalanced panel (e.g. age-binned waves with attrition) the +augmented measure vector can have *zero* rows observed in every column, so the +complete-case fit is infeasible. This module fits the same mixture by the +standard missing-data EM (Ghahramani & Jordan 1994; Hunt & Jorgensen 2003): + +- the E-step scores each observation on its *observed* sub-vector -- the Gaussian + marginal obtained by dropping the missing dimensions; +- the M-step fills each missing entry with its per-component conditional + expectation `E[x_m | x_o]` and adds the conditional-covariance correction + `Cov[x_m | x_o]` to the missing-missing block of the scatter. + +Valid under MAR missingness. + +The EM is vectorised with the **masked-covariance** identity so it runs as dense +batched linear algebra on the GPU rather than a Python loop over missing +patterns (prohibitive when nearly every individual has a distinct pattern). For +a row with observed mask `M` (diagonal, 1 = observed), define +`G = M Sigma M + (I - M)`. Then `G` is block-diagonal `[[Sigma_oo, 0], [0, I]]`, +so a single full-dimension Cholesky yields the observed-block log-density, +log-determinant, conditional mean and the masked inverse `M G^-1 M` (whose +non-zero block is `Sigma_oo^-1`) all at once -- uniformly across rows regardless +of which entries are missing. Rows are processed in fixed-size padded chunks so +only `(chunk, d, d)` arrays are ever materialised. +""" + +import warnings +from dataclasses import dataclass + +import jax +import jax.numpy as jnp +import numpy as np + + +@dataclass(frozen=True) +class MissingDataMixtureFit: + """Fitted mixture parameters from the missing-data EM.""" + + weights: np.ndarray + """Mixture weights, shape `(n_components,)`.""" + + means: np.ndarray + """Per-component means, shape `(n_components, n_dim)`.""" + + covariances: np.ndarray + """Per-component covariances, shape `(n_components, n_dim, n_dim)`.""" + + loglikelihood: float + """Observed-data log-likelihood at the returned parameters.""" + + n_iter: int + """EM iterations run for the best restart.""" + + converged: bool + """Whether the best restart hit the tolerance before `max_iter`.""" + + co_observation_graph_connected: bool + """Whether the column co-observation graph is connected. Connectivity is a + *necessary* condition for the cross-covariances to be identified, not a + sufficient one: a connected graph can still leave a pair that is never + *directly* co-observed unidentified (PSD only bounds it). Treat `False` as a + definite warning that some cross-block covariances are not pinned by the data; + do not treat `True` as a certificate that every cross-covariance is + identified. A purely advisory diagnostic -- it gates nothing downstream.""" + + +def _chunk_size_for(n_dim: int) -> int: + """Rows per chunk keeping the `(chunk, d, d)` working set near 0.5 GB (f64).""" + return int(max(32, min(1024, 6_000_000 // max(n_dim * n_dim, 1)))) + + +def _co_observation_connected(obs: np.ndarray) -> bool: + """Whether the column co-observation graph is connected. + + Columns `i` and `j` are linked when at least one row observes both. If the + graph splits into separate components, no observation ties those blocks + together, so the missing-data EM cannot identify the cross-block covariances + (only the within-block blocks and all means are identified under MAR). + """ + n_dim = obs.shape[1] + if n_dim <= 1: + return True + co_observed = (obs.T.astype(np.int64) @ obs.astype(np.int64)) > 0 + seen = np.zeros(n_dim, dtype=bool) + stack = [0] + seen[0] = True + while stack: + node = stack.pop() + neighbours = np.nonzero(co_observed[node] & ~seen)[0] + for nb in neighbours: + seen[nb] = True + stack.append(int(nb)) + return bool(seen.all()) + + +def _component_stats( + x: jax.Array, + mask: jax.Array, + mean: jax.Array, + cov: jax.Array, +) -> tuple[jax.Array, jax.Array, jax.Array]: + """Per-row log-density, imputed mean and masked inverse for one component. + + `cov` already carries the ridge added by the M-step, so it is used as-is. + Observed entries are treated as exact (no extra measurement noise), which is + what makes the observed-block density and the conditional moments the *exact* + EM identities rather than a noisy approximation. + """ + n_dim = x.shape[1] + eye = jnp.eye(n_dim) + mm = mask[:, :, None] * mask[:, None, :] + # G = M cov M + (I - M): block-diagonal [[cov_oo, 0], [0, I]]. + g = mm * cov[None] + (1.0 - mask)[:, :, None] * eye[None] + chol = jnp.linalg.cholesky(g) + diff = mask * (x - mean) + z = jax.scipy.linalg.cho_solve((chol, True), diff) # G^-1 (masked diff) + maha = jnp.sum(diff * z, axis=1) + logdet = 2.0 * jnp.sum(jnp.log(jnp.diagonal(chol, axis1=1, axis2=2)), axis=1) + n_obs = jnp.sum(mask, axis=1) + log_density = -0.5 * (n_obs * jnp.log(2.0 * jnp.pi) + logdet + maha) + x_hat = mean + z @ cov # conditional mean fills the missing block + ginv = jax.scipy.linalg.cho_solve( + (chol, True), jnp.broadcast_to(eye, (x.shape[0], n_dim, n_dim)) + ) + masked_ginv = mm * ginv # M G^-1 M: observed-block is Sigma_oo^-1 + return log_density, x_hat, masked_ginv + + +def _chunk_accumulate( + x: jax.Array, + mask: jax.Array, + valid: jax.Array, + log_weights: jax.Array, + means: jax.Array, + covs: jax.Array, +) -> tuple[jax.Array, jax.Array, jax.Array, jax.Array, jax.Array]: + """Return this chunk's contribution to the EM sufficient statistics. + + `valid` is 1 for real rows and 0 for padding; padded rows contribute zero. + """ + log_density, x_hat, masked_ginv = jax.vmap( + _component_stats, in_axes=(None, None, 0, 0) + )(x, mask, means, covs) # (K, B), (K, B, d), (K, B, d, d) + + weighted = log_density.T + log_weights # (B, K) + log_norm = jax.scipy.special.logsumexp(weighted, axis=1) # (B,) + resp = jnp.exp(weighted - log_norm[:, None]) * valid[:, None] # (B, K) + loglik = jnp.sum(log_norm * valid) + nk = jnp.sum(resp, axis=0) # (K,) + sum_x = jnp.einsum("bk,kbd->kd", resp, x_hat) # (K, d) + scatter = jnp.einsum("bk,kbd,kbe->kde", resp, x_hat, x_hat) # (K, d, d) + corr = jnp.einsum("bk,kbde->kde", resp, masked_ginv) # (K, d, d) + return loglik, nk, sum_x, scatter, corr + + +# Jitted at runtime (not via a typed decorator) so the type checker sees the +# plain tuple-returning signature above. +_chunk_accumulate_jit = jax.jit(_chunk_accumulate) + + +def _accumulate_sufficient_stats( + xj: jax.Array, + mj: jax.Array, + valid: jax.Array, + log_weights: jax.Array, + means: jax.Array, + covs: jax.Array, + *, + n_padded: int, + chunk: int, +) -> tuple[jax.Array, jax.Array, jax.Array, jax.Array, jax.Array]: + """Sum the chunked EM sufficient statistics over the whole padded sample. + + Returns `(loglik, nk, sum_x, scatter, corr)` evaluated at the supplied + `(log_weights, means, covs)`. Padding rows contribute zero via `valid`. + """ + n_components, n_dim = means.shape + loglik = jnp.array(0.0) + nk = jnp.zeros(n_components) + sum_x = jnp.zeros((n_components, n_dim)) + scatter = jnp.zeros((n_components, n_dim, n_dim)) + corr = jnp.zeros((n_components, n_dim, n_dim)) + for start in range(0, n_padded, chunk): + sl = slice(start, start + chunk) + ll_c, nk_c, sx_c, sc_c, cr_c = _chunk_accumulate_jit( + xj[sl], mj[sl], valid[sl], log_weights, means, covs + ) + loglik = loglik + ll_c + nk = nk + nk_c + sum_x = sum_x + sx_c + scatter = scatter + sc_c + corr = corr + cr_c + return loglik, nk, sum_x, scatter, corr + + +def _run_em( + x_filled: np.ndarray, + mask: np.ndarray, + weights: np.ndarray, + means: np.ndarray, + covs: np.ndarray, + *, + max_iter: int, + tol: float, + reg_covar: float, +) -> tuple[np.ndarray, np.ndarray, np.ndarray, float, int, bool]: + """Run masked-covariance EM from a warm start; return params and diagnostics.""" + n_obs, n_dim = x_filled.shape + chunk = _chunk_size_for(n_dim) + n_padded = int(np.ceil(n_obs / chunk) * chunk) + pad = n_padded - n_obs + xj = jnp.asarray(np.vstack([x_filled, np.zeros((pad, n_dim))])) + mj = jnp.asarray(np.vstack([mask, np.zeros((pad, n_dim))])) + valid = jnp.asarray(np.concatenate([np.ones(n_obs), np.zeros(pad)])) + eye = jnp.eye(n_dim) + + weights_j = jnp.asarray(weights) + means_j = jnp.asarray(means) + covs_j = jnp.asarray(covs) + prev_ll = -np.inf + loglik = -np.inf + converged = False + n_iter = 0 + for _ in range(max_iter): + n_iter += 1 + loglik_t, nk, sum_x, scatter, corr = _accumulate_sufficient_stats( + xj, + mj, + valid, + jnp.log(weights_j), + means_j, + covs_j, + n_padded=n_padded, + chunk=chunk, + ) + loglik = float(loglik_t) + + nk_safe = nk + 1e-12 + weights_j = nk_safe / n_obs + means_j = sum_x / nk_safe[:, None] + # cov_k = [scatter - Nk mu mu' + Nk cov - cov T cov] / Nk + reg I + outer = means_j[:, :, None] * means_j[:, None, :] + cov_t_cov = jnp.einsum("kde,kef,kfg->kdg", covs_j, corr, covs_j) + covs_j = ( + scatter + - nk_safe[:, None, None] * outer + + nk_safe[:, None, None] * covs_j + - cov_t_cov + ) / nk_safe[:, None, None] + reg_covar * eye[None] + + if abs(loglik - prev_ll) <= tol * (1.0 + abs(loglik)): + converged = True + break + prev_ll = loglik + + # Score the *returned* (post-M-step) parameters, so the reported loglik and + # the cross-restart ranking match what is returned rather than the pre-M-step + # parameters scored inside the final iteration. + final_loglik = _accumulate_sufficient_stats( + xj, + mj, + valid, + jnp.log(weights_j), + means_j, + covs_j, + n_padded=n_padded, + chunk=chunk, + )[0] + loglik = float(final_loglik) + + return ( + np.asarray(weights_j), + np.asarray(means_j), + np.asarray(covs_j), + loglik, + n_iter, + converged, + ) + + +def _initialise( + x: np.ndarray, obs: np.ndarray, n_components: int, reg_covar: float, seed: int +) -> tuple[np.ndarray, np.ndarray, np.ndarray]: + """Warm-start from a mixture fitted on the mean-imputed data.""" + from sklearn.mixture import GaussianMixture # noqa: PLC0415 + + # Per-column observed mean, robust to all-missing columns (mean -> 0) without + # tripping numpy's "Mean of empty slice" warning from nanmean. + counts = obs.sum(axis=0) + sums = np.where(obs, x, 0.0).sum(axis=0) + col_mean = np.where(counts > 0, sums / np.maximum(counts, 1), 0.0) + imputed = np.where(obs, x, col_mean) + gm = GaussianMixture( + n_components=n_components, + covariance_type="full", + n_init=1, + reg_covar=reg_covar, + random_state=seed, + ).fit(imputed) + return gm.weights_.copy(), gm.means_.copy(), gm.covariances_.copy() + + +def fit_gaussian_mixture_missing( + augmented: np.ndarray, + *, + n_components: int, + max_iter: int = 500, + tol: float = 1e-6, + n_init: int = 5, + reg_covar: float = 1e-6, + seed: int = 0, + allow_never_observed: bool = False, +) -> MissingDataMixtureFit: + """Fit a Gaussian mixture by missing-data EM, keeping the best of `n_init`. + + Args: + augmented: `(n_obs, n_dim)` data with `NaN` for missing entries. + n_components: Number of mixture components. + max_iter: Maximum EM iterations per restart. + tol: Relative log-likelihood tolerance for convergence. + n_init: Number of warm-started restarts; the best fit is kept. + reg_covar: Diagonal ridge for numerical stability. + seed: RNG seed for the restarts. + allow_never_observed: When `False` (the default), a column observed in no + row raises -- its moments are unidentified and feeding a neutral seed + into the structural moments would silently corrupt them. Set `True` + only when the fit merely *seeds* an estimator that re-fits every + parameter from the data (e.g. `estimate_chs`), so a column dropped by + row subsampling falls back to a neutral seed and warns instead of + crashing the pipeline. + + Return: + `MissingDataMixtureFit` with the highest-likelihood restart. + + """ + x = np.asarray(augmented, dtype=float) + if x.ndim != 2: + msg = "augmented must be a 2D array." + raise ValueError(msg) + obs = ~np.isnan(x) + if not obs.any(): + msg = "augmented has no observed entries; cannot fit mixture." + raise ValueError(msg) + # Identification diagnostics. A column observed in no row, or a co-observation + # graph that splits into blocks, leaves some means/covariances unidentified. + # These are *not* fatal: the EM still fits the identified part, and the + # unidentified entries fall back to a neutral (ridge) seed -- which matters + # because a never-observed column can be a transient artefact of subsampling + # rows for a seed rather than a genuinely absent measurement. We flag it so a + # caller never mistakes ordinary convergence for a fully identified fit. + never_observed = np.nonzero(~obs.any(axis=0))[0] + co_observation_graph_connected = _co_observation_connected(obs) + if never_observed.size and not allow_never_observed: + msg = ( + f"Missing-data mixture EM: columns {never_observed.tolist()} are " + "never observed in any row; their means and (co)variances are " + "unidentified, so the fit would be arbitrary noise rather than an " + "estimate. Drop these measurements, or pass allow_never_observed=True " + "if this fit only seeds an estimator that re-fits every parameter " + "from the data (the value is then a harmless neutral seed)." + ) + raise ValueError(msg) + if never_observed.size: + warnings.warn( + f"Missing-data mixture EM: columns {never_observed.tolist()} are " + "never observed in any row; their means and (co)variances are " + "unidentified and are seeded only at the ridge default. Drop these " + "measurements if this is not a transient row-subsampling artefact.", + RuntimeWarning, + stacklevel=2, + ) + elif not co_observation_graph_connected: + warnings.warn( + "Missing-data mixture EM: the column co-observation graph is " + "disconnected -- no individual is observed on measurements from " + "different blocks (e.g. periods that no one spans). Means and " + "within-block covariances are identified, but the cross-block " + "covariances are not pinned by the data and should not be trusted.", + RuntimeWarning, + stacklevel=2, + ) + + x_filled = np.where(obs, x, 0.0) + mask = obs.astype(float) + rng = np.random.default_rng(seed) + best: MissingDataMixtureFit | None = None + for _ in range(n_init): + init_seed = int(rng.integers(0, 2**31 - 1)) + weights, means, covs = _initialise(x, obs, n_components, reg_covar, init_seed) + weights, means, covs, loglik, n_iter, converged = _run_em( + x_filled, + mask, + weights, + means, + covs, + max_iter=max_iter, + tol=tol, + reg_covar=reg_covar, + ) + if best is None or loglik > best.loglikelihood: + best = MissingDataMixtureFit( + weights=weights, + means=means, + covariances=covs, + loglikelihood=loglik, + n_iter=n_iter, + converged=converged, + co_observation_graph_connected=co_observation_graph_connected, + ) + if best is None: + msg = "n_init must be at least 1." + raise ValueError(msg) + return best diff --git a/src/skillmodels/amn/mixture_em.py b/src/skillmodels/amn/mixture_em.py new file mode 100644 index 00000000..a1d35fe0 --- /dev/null +++ b/src/skillmodels/amn/mixture_em.py @@ -0,0 +1,388 @@ +"""Stage 1 of the AMN estimator: mixture-of-normals EM on augmented measurements. + +Fits + + F_{M,X} = sum_k tau_k * Normal(Pi_k, Psi_k) + +to the joint vector of (factor measurements, observed factor values, +controls) across all periods. Matches AMN 2020 equations (11)-(14). + +The fitted mixture is the reduced-form input to Stage 2's structural +minimum-distance recovery (`skillmodels.amn.minimum_distance`). +""" + +import warnings +from collections.abc import Mapping +from itertools import chain +from typing import Literal + +import numpy as np +import pandas as pd +from sklearn.mixture import GaussianMixture + +from skillmodels.amn.missing_data_em import fit_gaussian_mixture_missing +from skillmodels.amn.types import AugmentedMeasureLayout, MixtureFitResult +from skillmodels.common.types import ProcessedModel + + +class InsufficientCompleteCasesError(ValueError): + """Too few listwise-complete rows for a complete-case Stage-1 mixture fit. + + Raised by the complete-case EM when the augmented measure vector has fewer + rows observed in *every* column than the mixture has components -- the regime + of an unbalanced panel with cross-period attrition. Pass + `mixture_em_method="missing_data"` to fit by marginalising over each row's + missing entries instead. + """ + + +def build_augmented_measure_layout( + processed_model: ProcessedModel, +) -> AugmentedMeasureLayout: + """Compute the column layout of the augmented measure vector. + + The augmented vector concatenates, in order: + + 1. Factor measurements at each period (one slot per `(period, + measurement)` row of `processed_model.update_info`). + 2. Observed factor values at each period (one slot per `(period, + observed_factor)` pair). + 3. Controls at the first period (treated as time-invariant; one slot + per non-constant control). + + Slots 2 and 3 are treated as zero-measurement-error observations + with loading 1 in the AMN measurement-system mapping (paper p. 2522: + "we set the corresponding standard deviation in Sigma to zero and + the corresponding factor loading to one"). + + Args: + processed_model: The output of `common.process_model.process_model`. + + Return: + AugmentedMeasureLayout with slot metadata for downstream Stage 2 + bookkeeping. + + """ + update_info = processed_model.update_info + periods = processed_model.labels.periods + aug_to_period = processed_model.labels.aug_periods_to_periods + observed_factors = processed_model.labels.observed_factors + controls = tuple(c for c in processed_model.labels.controls if c != "constant") + + columns: list[str] = [] + measurement_slots: list[int] = [] + measurement_meta: list[tuple[int, str, str]] = [] + observed_factor_slots: list[int] = [] + observed_factor_meta: list[tuple[int, str]] = [] + control_slots: list[int] = [] + + # Walk update_info rows in canonical (aug_period, measurement) order. + # Each row is one measurement update; map aug_period -> calendar period + # via labels.aug_periods_to_periods so the layout metadata is in + # AMN-paper terms (calendar period). + factor_columns = [c for c in update_info.columns if c != "purpose"] + for index, row in update_info.iterrows(): + aug_period, meas_name = index # ty: ignore[not-iterable] + purpose = row.get("purpose", "measurement") + if purpose != "measurement": + continue + loadings = row[factor_columns].astype(bool) + if not loadings.any(): + continue + factor = next(f for f in factor_columns if loadings[f]) + period = int(aug_to_period[int(aug_period)]) + slot = len(columns) + columns.append(f"meas[{period}|{factor}|{meas_name}]") + measurement_slots.append(slot) + measurement_meta.append((period, str(factor), str(meas_name))) + + for period in periods: + for of in observed_factors: + slot = len(columns) + columns.append(f"obs_factor[{period}|{of}]") + observed_factor_slots.append(slot) + observed_factor_meta.append((int(period), str(of))) + + for ctrl in controls: + slot = len(columns) + columns.append(f"control[{ctrl}]") + control_slots.append(slot) + + return AugmentedMeasureLayout( + columns=tuple(columns), + measurement_slots=tuple(measurement_slots), + observed_factor_slots=tuple(observed_factor_slots), + control_slots=tuple(control_slots), + measurement_meta=tuple(measurement_meta), + observed_factor_meta=tuple(observed_factor_meta), + control_meta=tuple(controls), + ) + + +def _build_period_views( + data: pd.DataFrame, + periods: tuple[int, ...], + period_level: str, + caseids: pd.Index, +) -> dict[int, pd.DataFrame]: + """Return one (n_obs, n_cols) DataFrame per period, reindexed by caseids.""" + period_views: dict[int, pd.DataFrame] = {} + for period in periods: + sub = data.xs(period, level=period_level, drop_level=True) + if isinstance(sub, pd.Series): + sub = sub.to_frame() + sub = sub.reindex(caseids) + period_views[int(period)] = sub + return period_views + + +def _fill_controls( + out: np.ndarray, + period_views: dict[int, pd.DataFrame], + layout: AugmentedMeasureLayout, + periods: tuple[int, ...], +) -> None: + """Fill control slots from the first period each control is observed in.""" + for slot, ctrl in zip(layout.control_slots, layout.control_meta, strict=True): + for period in periods: + sub = period_views[int(period)] + if ctrl not in sub.columns: + continue + col = sub[ctrl].to_numpy() + mask = np.isnan(out[:, slot]) + out[mask, slot] = col[mask] + + +def build_augmented_measure_matrix( + data: pd.DataFrame, + processed_model: ProcessedModel, + layout: AugmentedMeasureLayout, +) -> np.ndarray: + """Stack each child's augmented measure vector into an ``(n_obs, n_aug)`` matrix. + + Reshapes the long-format `data` into one row per individual (caseid), + pulling the right column for each layout slot from the corresponding + period. + + Args: + data: Panel dataset in long format with MultiIndex + ``(caseid, period)``. + processed_model: Output of `process_model.process_model`. + layout: Slot layout for the augmented vector. + + Return: + ``(n_obs, n_aug)`` numpy array. Missing values are NaN. + + """ + if not isinstance(data.index, pd.MultiIndex) or data.index.nlevels < 2: + msg = "data must have a 2-level MultiIndex (caseid, period)." + raise ValueError(msg) + period_level = str(data.index.names[1]) + case_level = str(data.index.names[0]) + + caseids = data.index.get_level_values(case_level).unique() + n_obs = len(caseids) + n_aug = len(layout.columns) + out = np.full((n_obs, n_aug), np.nan) + + periods = processed_model.labels.periods + period_views = _build_period_views(data, periods, period_level, caseids) + + for slot, (period, _factor, meas_name) in zip( + layout.measurement_slots, layout.measurement_meta, strict=True + ): + sub = period_views[period] + if meas_name in sub.columns: + out[:, slot] = sub[meas_name].to_numpy() + + for slot, (period, of_name) in zip( + layout.observed_factor_slots, layout.observed_factor_meta, strict=True + ): + sub = period_views[period] + if of_name in sub.columns: + out[:, slot] = sub[of_name].to_numpy() + + if layout.control_slots: + _fill_controls(out, period_views, layout, periods) + + return out + + +def _fit_complete_case( + augmented: np.ndarray, + *, + n_components: int, + max_iter: int, + tol: float, + n_init: int, + reg_covar: float, + seed: int, +) -> tuple[np.ndarray, np.ndarray, np.ndarray, float, int, bool]: + """Fit `sklearn`'s GaussianMixture on listwise-complete rows.""" + complete_mask = ~np.isnan(augmented).any(axis=1) + n_complete = int(complete_mask.sum()) + if n_complete < n_components: + msg = ( + f"AMN Stage 1 complete-case mixture EM needs at least {n_components} " + f"rows (one per mixture component) observed in every augmented " + f"measurement, but only {n_complete} of {augmented.shape[0]} rows are " + f"complete. This is the unbalanced-panel regime where few or no " + f'individuals span every period. Set mixture_em_method="missing_data" ' + f"to fit the mixture by marginalising over each row's missing entries." + ) + raise InsufficientCompleteCasesError(msg) + n_total = int(augmented.shape[0]) + n_dropped = n_total - n_complete + if n_dropped > 0: + msg = ( + f"AMN Stage 1 mixture EM is complete-case only: dropped " + f"{n_dropped}/{n_total} rows with missing augmented " + f"measurements before fitting. The recovered reduced-form " + f"mixture targets the population distribution only under a " + f"complete-data or MCAR assumption; under an unbalanced panel " + f"or non-MCAR missingness the estimates may be biased." + ) + warnings.warn(msg, RuntimeWarning, stacklevel=3) + fit_data = augmented[complete_mask] + gm = GaussianMixture( + n_components=n_components, + covariance_type="full", + max_iter=max_iter, + tol=tol, + n_init=n_init, + reg_covar=reg_covar, + init_params="kmeans", + random_state=seed, + ) + gm.fit(fit_data) + return ( + np.asarray(gm.weights_, dtype=float), + np.asarray(gm.means_, dtype=float), + np.asarray(gm.covariances_, dtype=float), + float(gm.score(fit_data) * n_complete), + int(gm.n_iter_), + bool(gm.converged_), + ) + + +def fit_mixture_em( + augmented: np.ndarray, + *, + n_components: int, + max_iter: int = 500, + tol: float = 1e-6, + n_init: int = 5, + reg_covar: float = 1e-6, + seed: int = 0, + layout: AugmentedMeasureLayout | None = None, + init_params: Mapping[str, np.ndarray] | None = None, + method: Literal["complete_case", "missing_data"] = "complete_case", + allow_never_observed: bool = False, +) -> MixtureFitResult: + """Fit a Gaussian mixture to the augmented measure matrix via EM. + + With `method="complete_case"` (the default) this fits + `sklearn.mixture.GaussianMixture` on the listwise-complete rows -- valid + only under a complete-data or MCAR assumption, and raising when fewer than + `n_components` complete rows remain. With `method="missing_data"` it uses + `missing_data_em.fit_gaussian_mixture_missing`, which marginalises over each + row's missing entries and so handles unbalanced panels with no complete + cases at all. + + Args: + augmented: ``(n_obs, n_aug)`` augmented measure matrix from + `build_augmented_measure_matrix`. + n_components: Number of mixture components K. + max_iter: Maximum EM iterations per restart. + tol: Log-likelihood convergence tolerance. + n_init: Number of EM restarts; the best fit is kept. + reg_covar: Diagonal ridge added to each component covariance for + numerical stability. + seed: RNG seed. + layout: Slot layout to embed in the result (carried through to + Stage 2). + init_params: Optional warm-start values. Currently unused — kept + for forward-compatibility with a custom Spearman-seeded init + once Stage 1 results from the moment-init pipeline become + available as warm starts. + method: ``"complete_case"`` or ``"missing_data"`` (see above). + allow_never_observed: Forwarded to the missing-data EM. When `False` + (default) a never-observed augmented-measure column raises; set + `True` only for the seeding path where the result merely seeds an + estimator that re-fits every parameter from the data. + + Return: + MixtureFitResult holding the fitted weights, means, covariances + and convergence diagnostics. + + """ + del init_params # reserved for follow-up + if augmented.ndim != 2: + msg = "augmented must be a 2D array." + raise ValueError(msg) + if augmented.shape[0] == 0: + msg = "augmented has zero rows; cannot fit mixture." + raise ValueError(msg) + + if method == "missing_data": + fit = fit_gaussian_mixture_missing( + augmented, + n_components=n_components, + max_iter=max_iter, + tol=tol, + n_init=n_init, + reg_covar=reg_covar, + seed=seed, + allow_never_observed=allow_never_observed, + ) + weights, means, covs = fit.weights, fit.means, fit.covariances + loglik, n_iter, converged = fit.loglikelihood, fit.n_iter, fit.converged + elif method == "complete_case": + weights, means, covs, loglik, n_iter, converged = _fit_complete_case( + augmented, + n_components=n_components, + max_iter=max_iter, + tol=tol, + n_init=n_init, + reg_covar=reg_covar, + seed=seed, + ) + else: + msg = f"Unknown mixture EM method {method!r}." + raise ValueError(msg) + + if layout is None: + # Caller didn't supply a layout; synthesize a minimal one purely + # from column indices so downstream code that doesn't need slot + # metadata still works. + n_aug = augmented.shape[1] + layout = AugmentedMeasureLayout( + columns=tuple(f"col[{i}]" for i in range(n_aug)), + measurement_slots=tuple(range(n_aug)), + observed_factor_slots=(), + control_slots=(), + measurement_meta=(), + observed_factor_meta=(), + control_meta=(), + ) + + return MixtureFitResult( + weights=weights, + means=means, + covariances=covs, + loglikelihood=loglik, + n_iter=n_iter, + converged=converged, + layout=layout, + ) + + +def _all_slot_ids(layout: AugmentedMeasureLayout) -> tuple[int, ...]: + """Return the union of all slot id tuples in canonical order.""" + return tuple( + chain( + layout.measurement_slots, + layout.observed_factor_slots, + layout.control_slots, + ) + ) diff --git a/src/skillmodels/amn/moments.py b/src/skillmodels/amn/moments.py new file mode 100644 index 00000000..7d46883d --- /dev/null +++ b/src/skillmodels/amn/moments.py @@ -0,0 +1,301 @@ +"""Spearman / multi-indicator moment estimators for starting values. + +Pure NumPy helpers used to seed optimizer starting values from data +moments instead of static defaults (sigma_inv = 0.5 etc.). They derive +loadings, measurement-error SDs, and latent-factor variances from the +cross-covariance structure of multi-indicator measurements — the +standard Spearman / factor-analysis identification. + +Used by both the AF estimator (chain-wide moment seeds in +`af.initial_period` / `af.transition_period`) and the CHS estimator +(via `skillmodels.amn.start_values.get_spearman_start_params`). + +This module is called once before optimization (no JAX dependency) and +exposes single-pass, robust estimators with floor clamps for numerical +edge cases. +""" + +from dataclasses import dataclass + +import numpy as np + + +@dataclass(frozen=True) +class SpearmanResult: + """Single-factor Spearman moment estimates from cross-covariances.""" + + loadings: np.ndarray + """Recovered loadings, shape ``(n_meas,)``. The anchor entry equals 1.0 + by construction (or the user-provided anchor value).""" + + meas_sds: np.ndarray + """Recovered measurement-error SDs, shape ``(n_meas,)``.""" + + latent_var: float + """Recovered latent-factor variance Var(F).""" + + valid: bool + """False when identification fails (anchor uncorrelated with all other + measurements, or fewer than two measurements available).""" + + +def spearman_factor_moments( + measurements: np.ndarray, + *, + anchor_idx: int = 0, + anchor_loading: float = 1.0, + sd_floor: float = 1e-3, + var_floor: float = 1e-6, +) -> SpearmanResult: + """Recover loadings, sigma_meas, Var(F) from multi-indicator covariances. + + For a single latent factor F observed via ``measurements[:, k] = λ_k F + + ε_k`` (after residualizing out controls), the off-diagonal covariances + identify the loadings up to scale and the diagonal residual variances + give sigma_meas². Anchor measurement ``anchor_idx`` is normalized so its + loading equals ``anchor_loading``. + + Algorithm (pairwise complete cases): + + * ``S = pairwise_cov(measurements)``. + * Pool ``Var(F)`` via robust median across triples ``S[a,j] S[a,k] / + S[j,k]`` for ``j ≠ k ≠ a``. + * ``λ_k = S[a, k] / Var(F)`` for ``k ≠ a`` (then rescaled so anchor + matches ``anchor_loading``). + * ``sigma_meas_k² = max(S[k, k] - λ_k² Var(F), sd_floor²)``. + + If the anchor's covariances with all other measurements are below + numerical noise, rotate to a different anchor and retry. If all + candidates fail, return ``valid=False``. + + Args: + measurements: Shape ``(n_obs, n_meas)``. NaN values are handled via + pairwise-complete cases. + anchor_idx: Index of the anchor measurement. Loadings are reported + on a scale where ``loadings[anchor_idx] == anchor_loading``. + anchor_loading: Pinned anchor loading (typically 1.0 from a + normalization). + sd_floor: Minimum returned measurement SD to avoid zero / negative + estimates from sample noise. + var_floor: Minimum returned latent variance. + + Return: + `SpearmanResult` with recovered loadings, sigma_meas, latent_var, and a + `valid` flag. + + """ + arr = np.asarray(measurements, dtype=float) + if arr.ndim != 2: + msg = f"measurements must be 2D; got shape {arr.shape}" + raise ValueError(msg) + n_meas = arr.shape[1] + if n_meas < 2: + return SpearmanResult( + loadings=np.full(n_meas, anchor_loading), + meas_sds=np.full(n_meas, sd_floor), + latent_var=var_floor, + valid=False, + ) + + s = _pairwise_cov(arr) + + # Try the requested anchor first; rotate through other candidates if + # it has no usable cross-covariances. + anchor_order = [anchor_idx, *(k for k in range(n_meas) if k != anchor_idx)] + for candidate in anchor_order: + result = _spearman_with_anchor( + s, + anchor=candidate, + anchor_loading=anchor_loading, + target_anchor=anchor_idx, + sd_floor=sd_floor, + var_floor=var_floor, + ) + if result is not None: + return result + + return SpearmanResult( + loadings=np.full(n_meas, anchor_loading), + meas_sds=np.full(n_meas, sd_floor), + latent_var=var_floor, + valid=False, + ) + + +def derive_unexplained_sd( + latent_var: float, + beta: np.ndarray, + prev_state_cov: np.ndarray, + *, + sd_floor: float = 1e-3, +) -> float: + """Return the residual SD of a regression with explained variance β'Σβ. + + Given a regression ``F = β'·prev_state + ε`` where ``Var(prev_state) = + Σ`` and ``Var(F) = latent_var``, the residual variance is ``Var(ε) = + Var(F) - β'Σβ``. Clamped at ``sd_floor`` to avoid NaN when sample noise + pushes ``β'Σβ`` above ``Var(F)``. + + Used to seed sigma_shock (production shock SD) and sigma_inv (investment shock + SD) from the latent factor variance plus the regression coefficients. + + Args: + latent_var: Marginal variance of the dependent factor. + beta: Regression coefficients, shape ``(n_state,)``. + prev_state_cov: Covariance matrix of the regressors, shape + ``(n_state, n_state)``. + sd_floor: Minimum returned SD. + + Return: + ``sqrt(max(latent_var - β'Σβ, sd_floor²))``. + + """ + beta = np.asarray(beta, dtype=float).ravel() + cov = np.asarray(prev_state_cov, dtype=float) + explained = float(beta @ cov @ beta) + residual_var = max(float(latent_var) - explained, sd_floor**2) + return float(np.sqrt(residual_var)) + + +def seed_beta_from_ols( + response: np.ndarray, + regressors: np.ndarray, +) -> np.ndarray: + """OLS coefficient estimate for seeding inv-equation β. + + Pure-numpy OLS of ``response`` (n_obs,) on ``regressors`` (n_obs, + n_features). Drops rows with any NaN. Returns zeros when the design + is rank-deficient. + + Args: + response: Shape ``(n_obs,)``. + regressors: Shape ``(n_obs, n_features)``. + + Return: + β estimate, shape ``(n_features,)``. Zero vector if the design is + rank-deficient or the sample is too small. + + """ + y = np.asarray(response, dtype=float).ravel() + x = np.asarray(regressors, dtype=float) + if x.ndim == 1: + x = x[:, None] + n_features = x.shape[1] + mask = np.isfinite(y) & np.all(np.isfinite(x), axis=1) + if mask.sum() <= n_features: + return np.zeros(n_features) + try: + coef, *_ = np.linalg.lstsq(x[mask], y[mask], rcond=None) + except np.linalg.LinAlgError: + return np.zeros(n_features) + if not np.all(np.isfinite(coef)): + return np.zeros(n_features) + return coef + + +def _pairwise_cov(arr: np.ndarray) -> np.ndarray: + """Compute pairwise-complete sample covariance matrix. + + Each entry ``S[i, j]`` is the sample covariance over rows where both + columns ``i`` and ``j`` are finite. Diagonal entries are sample + variances over rows where the column is finite. + """ + n_meas = arr.shape[1] + s = np.zeros((n_meas, n_meas)) + finite = np.isfinite(arr) + for i in range(n_meas): + for j in range(i, n_meas): + mask = finite[:, i] & finite[:, j] + if mask.sum() < 2: + s[i, j] = s[j, i] = 0.0 + continue + xi = arr[mask, i] + xj = arr[mask, j] + mi = xi.mean() + mj = xj.mean() + cov = float(((xi - mi) * (xj - mj)).sum() / (mask.sum() - 1)) + s[i, j] = s[j, i] = cov + return s + + +def _spearman_with_anchor( # noqa: C901, PLR0912 + s: np.ndarray, + *, + anchor: int, + anchor_loading: float, + target_anchor: int, + sd_floor: float, + var_floor: float, +) -> SpearmanResult | None: + """Spearman estimates with a specified anchor; ``None`` if degenerate.""" + n_meas = s.shape[0] + diag = np.maximum(np.diag(s), sd_floor**2) + sds = np.sqrt(diag) + cov_threshold = 1e-3 * sds[anchor] * sds + + # The anchor must covary meaningfully with at least one other column. + cross = np.array( + [ + (k, abs(s[anchor, k])) + for k in range(n_meas) + if k != anchor and abs(s[anchor, k]) > cov_threshold[k] + ] + ) + if cross.size == 0: + return None + + # Pool Var(F) via the median of triples S[a,j] S[a,k] / S[j,k] for + # j, k != a, j != k, with S[j,k] above noise. + triples = [] + for j in range(n_meas): + if j == anchor or abs(s[anchor, j]) <= cov_threshold[j]: + continue + for k in range(j + 1, n_meas): + if k == anchor or abs(s[anchor, k]) <= cov_threshold[k]: + continue + cross_threshold = 1e-3 * sds[j] * sds[k] + if abs(s[j, k]) <= cross_threshold: + continue + triples.append(s[anchor, j] * s[anchor, k] / s[j, k]) + + if not triples: + # Only one measurement covaries with the anchor — Var(F) is + # under-identified. Fall back to S[anchor, k] / S[k, k] times + # diagonal (rough), then clamp. + partner_idx = int(cross[np.argmax(cross[:, 1]), 0]) + latent_var_raw = abs(s[anchor, partner_idx]) + else: + latent_var_raw = float(np.median(triples)) + + latent_var = max(latent_var_raw, var_floor) + + raw_loadings = np.zeros(n_meas) + raw_loadings[anchor] = 1.0 + for k in range(n_meas): + if k == anchor: + continue + raw_loadings[k] = s[anchor, k] / latent_var + + # Rescale so the user-supplied target anchor reports ``anchor_loading``. + # If we rotated to a different anchor candidate, the recovered scale + # must be re-anchored on ``target_anchor``. + if target_anchor != anchor: + if abs(raw_loadings[target_anchor]) <= 1e-12: + return None + scale = anchor_loading / raw_loadings[target_anchor] + else: + scale = anchor_loading + loadings = raw_loadings * scale + # Var(F) absorbs the inverse square of the rescale. + latent_var = latent_var / (scale**2) + latent_var = max(latent_var, var_floor) + + meas_var = np.maximum(diag - loadings**2 * latent_var, sd_floor**2) + meas_sds = np.sqrt(meas_var) + + return SpearmanResult( + loadings=loadings, + meas_sds=meas_sds, + latent_var=latent_var, + valid=True, + ) diff --git a/src/skillmodels/amn/posterior_states.py b/src/skillmodels/amn/posterior_states.py new file mode 100644 index 00000000..05785508 --- /dev/null +++ b/src/skillmodels/amn/posterior_states.py @@ -0,0 +1,205 @@ +"""Per-individual posterior latent-factor estimates from an AMN fit. + +AMN does not Kalman-filter or quadrature-integrate; it fits a mixture +of normals on the augmented measure vector. The natural per-individual +factor estimate is therefore the mixture-Schur conditional posterior +``E[theta | Y_i]`` evaluated under the fitted reduced-form parameters, +mirrored across the K components weighted by per-individual mixture +responsibilities. + +For every observation `i` and every mixture component `k`: + + mu_{theta|Y}(k, i) = mu_theta(k) + + Cov(theta, Y)(k) Cov(Y)(k)^{-1} (Y_i - mu_Y(k)) + +where ``mu_Y(k) = A + Lambda mu_theta(k)``, +``Cov(Y)(k) = Lambda Omega(k) Lambda^T + diag(sigma^2)``, and +``Cov(theta, Y)(k) = Omega(k) Lambda^T``. The mixture responsibility is the +standard Bayes posterior of `k` given `Y_i`, and +``E[theta | Y_i] = sum_k r(k|i) mu_{theta|Y}(k, i)``. + +The function returns a dict matching the CHS / AF +`get_individual_states` shape (an ``"unanchored_states"`` entry only — +AMN does not produce anchored states without an explicit anchoring +post-step). +""" + +from typing import Any + +import numpy as np +import pandas as pd +from beartype import beartype + +from skillmodels._beartype_conf import ESTIMATION_CONF +from skillmodels.amn.mixture_em import build_augmented_measure_matrix +from skillmodels.amn.types import AMNEstimationResult +from skillmodels.common.process_model import process_model +from skillmodels.common.state_ranges import create_state_ranges + + +def _to_float(value: object) -> float: + """Coerce a pandas `.loc` scalar to `float`. + + `DataFrame.loc[(...), col]` is typed by pandas-stubs as a broad `Scalar` + union (it could in general hold dates/bytes), which `float()` formally + rejects even though these columns hold floats. Centralise the unavoidable + narrowing here rather than scattering ignores across the call sites. + """ + return float(value) # ty: ignore[invalid-argument-type] + + +@beartype(conf=ESTIMATION_CONF) +def get_amn_posterior_states( # noqa: C901, PLR0912, PLR0915 + amn_result: AMNEstimationResult, + data: pd.DataFrame, +) -> dict[str, dict[str, Any]]: + """Compute the per-observation latent factor posteriors. + + Args: + amn_result: The fitted AMN result. + data: Same panel dataset used for the original fit. + + Return: + Nested dict with the CHS-compatible + ``{"unanchored_states": {"states": DataFrame, "state_ranges": ...}}`` + layout (no ``"anchored_states"`` key — AMN does not anchor). + + """ + processed_model = process_model(amn_result.model_spec) + layout = amn_result.stages.mixture.layout + augmented = build_augmented_measure_matrix(data, processed_model, layout) + n_aug = augmented.shape[1] + + mixture = amn_result.stages.mixture + structural = amn_result.stages.structural + + # Build Lambda and intercepts in the original AMN structural basis. + n_components = mixture.weights.shape[0] + factor_slots = structural.factor_period_slots + n_factor = len(factor_slots) + + # Reconstruct Lambda from the loadings DataFrame + observed-factor + # / control passthrough. + lambda_mat = np.zeros((n_aug, n_factor)) + slot_to_id = {sp: i for i, sp in enumerate(factor_slots)} + + for aug_idx, (period, factor, meas) in zip( + layout.measurement_slots, layout.measurement_meta, strict=True + ): + col = slot_to_id.get((period, factor)) + if col is None: + continue + try: + loading = structural.loadings.loc[(period, meas, factor), "loading"] + except KeyError: + loading = 1.0 + lambda_mat[aug_idx, col] = _to_float(loading) + + for aug_idx, (period, of_name) in zip( + layout.observed_factor_slots, layout.observed_factor_meta, strict=True + ): + col = slot_to_id.get((period, of_name)) + if col is not None: + lambda_mat[aug_idx, col] = 1.0 + + for aug_idx, ctrl in zip(layout.control_slots, layout.control_meta, strict=True): + col = slot_to_id.get((-1, ctrl)) + if col is not None: + lambda_mat[aug_idx, col] = 1.0 + + intercept = np.zeros(n_aug) + for aug_idx, (period, _factor, meas) in zip( + layout.measurement_slots, layout.measurement_meta, strict=True + ): + try: + intercept[aug_idx] = _to_float( + structural.measurement_intercepts.loc[(period, meas), "intercept"] + ) + except KeyError: + intercept[aug_idx] = 0.0 + + sigma2 = np.zeros(n_aug) + for aug_idx, (period, _factor, meas) in zip( + layout.measurement_slots, layout.measurement_meta, strict=True + ): + try: + sd = _to_float(structural.measurement_sds.loc[(period, meas), "sd"]) + except KeyError: + sd = 0.0 + sigma2[aug_idx] = sd * sd + + diag_sigma = np.diag(sigma2) + + # Drop rows with any NaN in the augmented vector (listwise; matches + # Stage 1's complete-case behaviour). Posterior is reported only + # for complete-case observations. + complete_mask = ~np.isnan(augmented).any(axis=1) + y_complete = augmented[complete_mask] + + # Precompute per-component pieces. + mu_theta = structural.factor_mixture_means + omegas = structural.factor_mixture_covariances + mu_y_per = np.empty((n_components, n_aug)) + cov_y_inv = np.empty((n_components, n_aug, n_aug)) + cov_theta_y = np.empty((n_components, n_factor, n_aug)) + log_det = np.empty(n_components) + for k in range(n_components): + mu_y_per[k] = intercept + lambda_mat @ mu_theta[k] + cov_y = lambda_mat @ omegas[k] @ lambda_mat.T + diag_sigma + cov_y = 0.5 * (cov_y + cov_y.T) + 1e-10 * np.eye(n_aug) + cov_y_inv[k] = np.linalg.inv(cov_y) + cov_theta_y[k] = omegas[k] @ lambda_mat.T + sign, logdet = np.linalg.slogdet(cov_y) + log_det[k] = logdet if sign > 0 else np.inf + + # Per-obs log-pdf in each component (up to a constant). + log_pi = np.log(np.clip(mixture.weights, 1e-300, None)) + diffs = y_complete[:, None, :] - mu_y_per[None, :, :] # (n_complete, K, n_aug) + quad = np.einsum("ikj,kjl,ikl->ik", diffs, cov_y_inv, diffs) + log_probs = log_pi[None, :] - 0.5 * (log_det[None, :] + quad) + log_probs -= log_probs.max(axis=1, keepdims=True) + probs = np.exp(log_probs) + responsibilities = probs / probs.sum(axis=1, keepdims=True) + + # Per-component conditional mean of theta given Y_i. + cond_means = np.empty((y_complete.shape[0], n_components, n_factor)) + for k in range(n_components): + cond_means[:, k, :] = ( + mu_theta[k] + (cov_theta_y[k] @ cov_y_inv[k] @ diffs[:, k, :].T).T + ) + + # Mixture-averaged posterior mean of theta. + posterior = np.einsum("ik,ikj->ij", responsibilities, cond_means) + + # Stuff into a (id, period) -> (factor, ...) DataFrame. + case_level = str(data.index.names[0]) + caseids = data.index.get_level_values(case_level).unique() + complete_caseids = caseids[np.asarray(complete_mask, dtype=bool)] + + latent_factors = processed_model.labels.latent_factors + periods = processed_model.labels.periods + rows = [] + for row_idx, caseid in enumerate(complete_caseids): + for period in periods: + row: dict[str, Any] = {"id": caseid, "period": int(period)} + for factor in latent_factors: + col_idx = slot_to_id.get((int(period), factor)) + row[factor] = ( + float(posterior[row_idx, col_idx]) + if col_idx is not None + else np.nan + ) + rows.append(row) + states_df = pd.DataFrame(rows) + + state_ranges = create_state_ranges( + filtered_states=states_df, + factors=latent_factors, + ) + + return { + "unanchored_states": { + "states": states_df, + "state_ranges": state_ranges, + }, + } diff --git a/src/skillmodels/amn/simulate_and_regress.py b/src/skillmodels/amn/simulate_and_regress.py new file mode 100644 index 00000000..c0fc90c4 --- /dev/null +++ b/src/skillmodels/amn/simulate_and_regress.py @@ -0,0 +1,884 @@ +"""Stage 3 of the AMN estimator: simulate latent factors and regress. + +Draws a synthetic latent-factor panel from the structural mixture +fitted in Stage 2 and recovers the per-period transition / investment +parameters by least-squares regression. + +Specialised fitters: closed-form OLS for `linear`; softmax-constrained +Levenberg-Marquardt for `log_ces` and `log_ces_with_constant` (keeps +gammas on the simplex). Everything else (translog, robust_translog, +stable_translog, linear_and_squares, log_ces_general, and any user +`@register_params`-decorated transition) goes through a generic NLS +path that calls the transition function directly via `jax.vmap`. This +mirrors the per-factor NLS in +`Monte Carlo Simulations/master_approx_simulationces2periodrho_5.R` +but generalises beyond the paper's CES-only case. +""" + +import inspect +from collections.abc import Callable, Mapping +from dataclasses import dataclass + +import jax +import jax.numpy as jnp +import numpy as np +import pandas as pd +from scipy.optimize import least_squares + +from skillmodels.amn.types import ( + MinimumDistanceResult, + ProductionFitResult, +) +from skillmodels.common.model_spec import ModelSpec +from skillmodels.common.types import ProcessedModel + + +def _draw_factor_panel( + structural: MinimumDistanceResult, + mixture_weights: np.ndarray, + *, + n_draws: int, + seed: int, +) -> pd.DataFrame: + """Sample ``n_draws`` rows from the K-component Gaussian mixture. + + Returns a DataFrame with one column per ``(period, factor)`` slot. + """ + rng = np.random.default_rng(seed) + means = structural.factor_mixture_means + covs = structural.factor_mixture_covariances + n_components, n_factor = means.shape + + counts = np.floor(n_draws * mixture_weights).astype(int) + deficit = n_draws - counts.sum() + if deficit > 0: + order = np.argsort(-(n_draws * mixture_weights - counts)) + for idx in order[:deficit]: + counts[idx] += 1 + + chunks = [] + for k in range(n_components): + if counts[k] == 0: + continue + cov = covs[k] + cov = 0.5 * (cov + cov.T) + 1e-10 * np.eye(n_factor) + samples = rng.multivariate_normal(means[k], cov, size=counts[k]) + chunks.append(samples) + panel = np.vstack(chunks) + rng.shuffle(panel) + + columns = [f"f[{t}|{f}]" for t, f in structural.factor_period_slots] + return pd.DataFrame(panel, columns=columns) + + +def _slot_column(period: int, factor: str) -> str: + return f"f[{period}|{factor}]" + + +def _fit_linear( + y: np.ndarray, + x_design: np.ndarray, + regressor_names: list[str], + fixed: Mapping[str, float] | None = None, +) -> tuple[dict[str, float], float]: + """OLS regression with an intercept (added as the last column). + + When ``fixed`` pins some coefficients to values, those columns are + partialled out -- ``fixed_value * column`` is moved to the LHS and the + column dropped -- so the remaining free coefficients are fit conditional + on the pins. The pinned coefficients are reported at their fixed values and + the residual SD reflects the full (free + pinned) prediction. + + Returns: + ``(params_by_name, residual_sd)`` with `constant` included as + the trailing parameter. + + """ + fixed = fixed or {} + n = x_design.shape[0] + full_design = np.column_stack([x_design, np.ones(n)]) + names = [*regressor_names, "constant"] + + y_adj = y.astype(float).copy() + free_idx: list[int] = [] + out: dict[str, float] = {} + for j, name in enumerate(names): + if name in fixed: + out[name] = float(fixed[name]) + y_adj = y_adj - out[name] * full_design[:, j] + else: + free_idx.append(j) + if free_idx: + coefs, *_ = np.linalg.lstsq(full_design[:, free_idx], y_adj, rcond=None) + for k, j in enumerate(free_idx): + out[names[j]] = float(coefs[k]) + + pred = full_design @ np.array([out[name] for name in names]) + sd = float(np.sqrt(np.mean((y - pred) ** 2))) + return out, sd + + +def _fit_investment_residual( + y_invest: np.ndarray, + x_determinants: np.ndarray, + determinant_names: list[str], +) -> tuple[dict[str, float], float, np.ndarray]: + """First-stage investment equation for the control-function correction. + + OLS of the (latent) log-investment factor on its contemporaneous + determinants -- the production-input state factors theta_t and the + excluded observed instruments Y_t (income/prices) -- with an intercept: + + ln I_t = beta_0 + beta_theta . theta_t + beta_Y . Y_t + eta_{I,t}. + + The in-sample OLS residual `eta_{I,t} = ln I_t - E[ln I_t | theta_t, Y_t]` + is the control function added to the production regression (AMN 2020 + eq. 7-8 / AF Sec. 3.5, Assumption 1(g)). Returns the coefficients + (keyed by ``determinant_names + ["constant"]``), the residual SD + (= SD(eta_{I,t})), and the residual vector of shape ``(n_draws,)``. + """ + n = x_determinants.shape[0] + full_design = np.column_stack([x_determinants, np.ones(n)]) + coefs, *_ = np.linalg.lstsq(full_design, y_invest, rcond=None) + resid = y_invest - full_design @ coefs + sd = float(np.sqrt(np.mean(resid**2))) + out = dict(zip([*determinant_names, "constant"], coefs.tolist(), strict=True)) + return out, sd, resid + + +def _fit_log_ces( + y: np.ndarray, + x_design: np.ndarray, + regressor_names: list[str], + *, + with_constant: bool, + cf: np.ndarray | None = None, +) -> tuple[dict[str, float], float]: + """Fit log_ces (or log_ces_with_constant) via Levenberg-Marquardt. + + Parametrises ``y = delta + (1/rho) * log(sum_i gamma_i * exp(X_i * rho))`` + with gammas constrained to the simplex via softmax. When + ``with_constant=False``, the additive ``delta`` is held at 0. + + If ``cf`` is given (the investment control-function residual), an extra + additive linear term ``kappa * cf`` is fitted OUTSIDE the CES aggregator + (AMN's ``+ alpha*cf``), with ``kappa`` (= the period-specific endogeneity + coefficient) estimated jointly with the CES parameters and returned under + the ``"cf"`` key. + """ + n_reg = len(regressor_names) + eps = 1e-12 + has_cf = cf is not None + kappa_idx = n_reg + (1 if with_constant else 0) + + def residuals(theta: np.ndarray) -> np.ndarray: + logits = np.concatenate([theta[: n_reg - 1], [0.0]]) + gammas = np.exp(logits - logits.max()) + gammas = gammas / gammas.sum() + rho = theta[n_reg - 1] + constant = theta[n_reg] if with_constant else 0.0 + exponents = x_design * rho + max_exp = np.max(exponents, axis=1, keepdims=True) + shifted = np.exp(exponents - max_exp) + log_inside = np.log(np.clip((gammas * shifted).sum(axis=1), eps, None)) + pred = constant + (max_exp[:, 0] + log_inside) / rho + if has_cf: + pred = pred + theta[kappa_idx] * cf + return pred - y + + n_unknowns = n_reg + (1 if with_constant else 0) + (1 if has_cf else 0) + theta0 = np.zeros(n_unknowns) + theta0[n_reg - 1] = 0.5 + result = least_squares(residuals, theta0, method="lm", max_nfev=2000) + theta = result.x + logits = np.concatenate([theta[: n_reg - 1], [0.0]]) + gammas = np.exp(logits - logits.max()) + gammas = gammas / gammas.sum() + rho = float(theta[n_reg - 1]) + constant = float(theta[n_reg]) if with_constant else 0.0 + resid = residuals(theta) + sd = float(np.sqrt(np.mean(resid**2))) + + out: dict[str, float] = dict(zip(regressor_names, gammas.tolist(), strict=True)) + out["phi"] = rho + if with_constant: + out["constant"] = constant + if has_cf: + out["cf"] = float(theta[kappa_idx]) + return out, sd + + +def _make_user_transition_callable( + user_func: Callable, + factor_names: tuple[str, ...], + param_names: tuple[str, ...], +) -> Callable[[jnp.ndarray, jnp.ndarray], jnp.ndarray]: + """Wrap a `@register_params`-decorated user function as `(states, params)`. + + Mirrors `skillmodels.af.transition_period._wrap_registered_transition_function` + so Stage 3 can pass user transitions through `jax.vmap` for NLS. + """ + sig = inspect.signature(user_func) + arg_names = [name for name in sig.parameters if name != "params"] + arg_positions = tuple(factor_names.index(name) for name in arg_names) + + def wrapped(states: jnp.ndarray, params_vec: jnp.ndarray) -> jnp.ndarray: + kwargs: dict[str, jnp.ndarray | dict[str, jnp.ndarray]] = { + name: states[pos] + for name, pos in zip(arg_names, arg_positions, strict=True) + } + kwargs["params"] = dict(zip(param_names, params_vec, strict=True)) + return user_func(**kwargs) + + return wrapped + + +def _resolve_transition_callable( + transition_name: str, + factor: str, + processed_model: ProcessedModel, + model_spec: ModelSpec, +) -> tuple[Callable[[jnp.ndarray, jnp.ndarray], jnp.ndarray], tuple[str, ...]]: + """Return a ``(states, params) -> scalar`` callable plus param names. + + For built-in transitions this is the function imported from + `skillmodels.common.transition_functions`; for user functions it is + `_make_user_transition_callable(...)` applied to the raw callable on + the model spec. The user callable looks its positional arguments up against + the full `(*latent, *observed)` factor order; a factor that the simulated + panel does not provide is read past the end of the (narrower) design row and + clamped by `jax` -- a throwaway seed value the CHS MLE re-fits. + """ + from skillmodels.common import transition_functions as tf # noqa: PLC0415 + + builtin_names = { + "linear", + "translog", + "robust_translog", + "stable_translog", + "linear_and_squares", + "log_ces", + "log_ces_with_constant", + "log_ces_general", + } + factor_names = ( + *processed_model.labels.latent_factors, + *processed_model.labels.observed_factors, + ) + transition_info = processed_model.transition_info + if transition_info is None: + msg = "ProcessedModel has no transition_info; cannot run Stage 3." + raise ValueError(msg) + param_names = tuple(transition_info.param_names[factor]) + + if transition_name in builtin_names: + func = getattr(tf, transition_name) + return func, param_names + + factor_spec = model_spec.factors.get(factor) + if factor_spec is None: + msg = ( + f"Cannot resolve transition callable for factor '{factor}' " + f"(transition='{transition_name}'). Factor not found on " + "model_spec.factors." + ) + raise KeyError(msg) + raw = factor_spec.transition_function + if not callable(raw): + msg = ( + f"Factor '{factor}' has transition_function={raw!r} which is " + "neither a built-in name nor a callable." + ) + raise TypeError(msg) + wrapped = _make_user_transition_callable(raw, factor_names, param_names) + return wrapped, param_names + + +def _is_elasticity_param(name: str) -> bool: + """Return True for CES exponent / outside-coefficient parameters. + + Covers the single-exponent forms (`phi`, `rho`, `sigma`) and + `log_ces_general`'s per-factor exponents `sigma_` and outside + coefficient `tfp`. These must be seeded nonzero so the CES log expression is + finite at the start point. + """ + return name in {"phi", "rho", "sigma", "tfp"} or name.startswith("sigma_") + + +def _seed_generic_nls_theta0( + param_names: tuple[str, ...], + init_overrides: dict[str, float], + *, + n_unknowns: int, +) -> np.ndarray: + """Seed the NLS start vector for `_fit_generic_nls`. + + Applies `init_overrides`, then seeds elasticity/outside-style params at 0.5 + so CES / general-CES log expressions are finite at the start, and gives the + remaining (simplex-style "gamma") params a strictly positive uniform initial + share when the function looks CES-shaped. Elasticity-style names cover the + single-exponent forms (`phi`, `rho`, `sigma`) AND `log_ces_general`'s + per-factor exponents `sigma_` and outside coefficient `tfp` -- the + latter were previously unrecognized, leaving every parameter at 0 so that + `tfp * log(sum gamma_i ...) = 0 * log(0) = NaN` (Pro F4). The trailing + cf-coefficient slot (if `n_unknowns > len(param_names)`) stays at zero. + """ + theta0 = np.zeros(n_unknowns) + for name, val in init_overrides.items(): + if name in param_names: + theta0[param_names.index(name)] = val + for j, name in enumerate(param_names): + if _is_elasticity_param(name) and name not in init_overrides: + theta0[j] = 0.5 + has_elasticity = any(_is_elasticity_param(n) for n in param_names) + if has_elasticity: + share_candidates = [ + j + for j, n in enumerate(param_names) + if not _is_elasticity_param(n) + and n != "constant" + and n not in init_overrides + ] + if share_candidates: + theta0[share_candidates] = 1.0 / len(share_candidates) + return theta0 + + +def _fit_generic_nls( + transition_func: Callable[[jnp.ndarray, jnp.ndarray], jnp.ndarray], + param_names: tuple[str, ...], + y: np.ndarray, + states_panel: np.ndarray, + *, + init_overrides: dict[str, float] | None = None, + cf: np.ndarray | None = None, + fixed: Mapping[str, float] | None = None, +) -> tuple[dict[str, float], float]: + """Generic Levenberg-Marquardt NLS via `jax.vmap` over the panel. + + Works for any `(states, params) -> scalar` callable, including + translog, robust_translog, stable_translog, linear_and_squares, + log_ces_general, and user-registered transitions. + + Args: + transition_func: callable taking a 1D state vector and a 1D + param vector and returning a scalar. + param_names: names of the parameters in the order accepted by + `transition_func`. + y: target vector, shape ``(n_obs,)``. + states_panel: state matrix, shape ``(n_obs, n_state_features)``. + init_overrides: optional ``{name: value}`` to seed specific + parameters before NLS. Useful for setting `phi != 0` on + log_ces-family functions. + cf: optional investment control-function residual, shape + ``(n_obs,)``. When given, an extra additive linear term + ``kappa * cf`` is fitted OUTSIDE the transition aggregator + (AMN's ``+ alpha*cf``); ``kappa`` is appended as an unknown + (init 0) and returned under the ``"cf"`` key. ``states_panel`` + stays the production states (cf is a separate, additive term). + fixed: optional ``{name: value}`` pinning a subset of + ``param_names``. Pinned entries are held at their values and only + the remaining (free) parameters are optimised; the pinned values + are reconstructed into the full param vector at every residual + evaluation so the free fit is conditional on the pins. + + """ + init_overrides = init_overrides or {} + fixed = fixed or {} + has_cf = cf is not None + free_names = [n for n in param_names if n not in fixed] + n_free = len(free_names) + kappa_idx = n_free + # Baseline full param vector carrying the pinned values; free positions + # are overwritten from the optimiser's vector at each evaluation. + base_theta = np.array([float(fixed.get(n, 0.0)) for n in param_names]) + free_positions = [i for i, n in enumerate(param_names) if n not in fixed] + + # CES share ("gamma") coordinates are optimised in log space so the + # unconstrained Levenberg-Marquardt step cannot drive a share <= 0 and make + # the CES aggregator `log(sum_i gamma_i exp(...))` non-finite (Pro F11). Shares + # are the non-elasticity, non-constant free parameters of a CES-shaped + # transition; for a non-CES transition (no elasticity param) the mask is + # all-False and the fit is byte-for-byte unchanged. + is_ces_shaped = any(_is_elasticity_param(n) for n in param_names) + log_share_mask = np.array( + [ + is_ces_shaped and not _is_elasticity_param(n) and n != "constant" + for n in free_names + ], + dtype=bool, + ) + + @jax.jit + def predict_batch(theta: jnp.ndarray, states: jnp.ndarray) -> jnp.ndarray: + return jax.vmap(transition_func, in_axes=(0, None))(states, theta) + + states_jnp = jnp.asarray(states_panel) + + def _free_in_linear_space(free: np.ndarray) -> np.ndarray: + linear = np.asarray(free, dtype=float).copy() + linear[log_share_mask] = np.exp(linear[log_share_mask]) + return linear + + def residuals(theta_np: np.ndarray) -> np.ndarray: + full = base_theta.copy() + full[free_positions] = _free_in_linear_space(theta_np[:n_free]) + preds = np.asarray(predict_batch(jnp.asarray(full), states_jnp)) + if has_cf: + preds = preds + theta_np[kappa_idx] * cf + return preds - y + + # Seed using the full param layout (preserves elasticity / CES-share + # seeding) then select the free positions plus the trailing cf slot. The + # strictly-positive share seeds move to log space to match the optimiser + # vector. + full_seed = _seed_generic_nls_theta0( + param_names, + init_overrides, + n_unknowns=len(param_names) + (1 if has_cf else 0), + ) + theta0_free = np.array([full_seed[i] for i in free_positions], dtype=float) + theta0_free[log_share_mask] = np.log( + np.clip(theta0_free[log_share_mask], 1e-8, None) + ) + theta0 = np.concatenate([theta0_free, [0.0]]) if has_cf else theta0_free + + result = least_squares(residuals, theta0, method="lm", max_nfev=5000) + free_linear = _free_in_linear_space(result.x[:n_free]) + resid = residuals(result.x) + sd = float(np.sqrt(np.mean(resid**2))) + out = {n: float(fixed[n]) for n in param_names if n in fixed} + for i, n in enumerate(free_names): + out[n] = float(free_linear[i]) + if has_cf: + out["cf"] = float(result.x[kappa_idx]) + return out, sd + + +def _fit_transition( + transition_name: str, + factor: str, + processed_model: ProcessedModel, + model_spec: ModelSpec, + y: np.ndarray, + x_design: np.ndarray, + regressor_names: list[str], + *, + cf: np.ndarray | None = None, + fixed: Mapping[str, float] | None = None, +) -> tuple[dict[str, float], float]: + """Dispatch to the right per-transition fitter. + + `linear` and `log_ces`-family functions get specialised fitters for + speed / simplex constraints; everything else (translog, + robust_translog, stable_translog, linear_and_squares, log_ces_general, + user) falls through to a generic `jax.vmap`-based NLS. + + When ``cf`` is given (the investment control-function residual), an + extra additive linear term ``kappa * cf`` is fitted jointly with the + transition parameters and returned under the ``"cf"`` key. For + `linear` the residual is just an extra design column; for the + `log_ces`-family and the generic NLS path it is added OUTSIDE the + aggregator (AMN 2020 eq. 7-8 / AF Sec. 3.5). + + When ``fixed`` pins a subset of the transition coefficients (by their + parameter name), those are held at their values inside the regression and + only the remaining coefficients are fit. The `log_ces`-family fitters do + not yet support pinning and raise if asked to. + """ + fixed = dict(fixed) if fixed else {} + if transition_name == "linear": + if cf is not None: + x_design = np.column_stack([x_design, cf]) + regressor_names = [*regressor_names, "cf"] + return _fit_linear(y, x_design, regressor_names, fixed=fixed) + # log_ces_af shares log_ces's math (CES over production factors only), so it + # routes to the same specialised fitter (Pro F6); without this it would fall + # through to _resolve_transition_callable as a bare string and raise. + if transition_name in ("log_ces", "log_ces_af", "log_ces_with_constant"): + if fixed: + msg = ( + f"fixed_params for the '{transition_name}' transition of factor " + f"'{factor}' is not supported; pinning is implemented for linear " + "and the generic NLS transitions (translog etc.)." + ) + raise NotImplementedError(msg) + with_constant = transition_name == "log_ces_with_constant" + return _fit_log_ces( + y, x_design, regressor_names, with_constant=with_constant, cf=cf + ) + + func, param_names = _resolve_transition_callable( + transition_name, factor, processed_model, model_spec + ) + return _fit_generic_nls(func, param_names, y, x_design, cf=cf, fixed=fixed) + + +def _transition_fixes_for_period( + fixed_params: pd.DataFrame | None, + period: int, +) -> dict[str, dict[str, float]]: + """Collect ``transition`` pins for ``period`` as ``{factor: {regname: value}}``. + + Reads the rows of ``fixed_params`` whose category is ``"transition"`` and + whose period equals ``period`` (the AMN params index labels this level + ``aug_period``, but AMN keys it by calendar period). Returns an empty dict + when there is nothing to pin. + """ + if fixed_params is None or fixed_params.empty: + return {} + idx = fixed_params.index + mask = (idx.get_level_values(0) == "transition") & ( + idx.get_level_values(1) == period + ) + out: dict[str, dict[str, float]] = {} + for label, value in fixed_params.loc[mask, "value"].items(): + _cat, _p, factor, regname = label # ty: ignore[not-iterable] + out.setdefault(factor, {})[regname] = float(value) + return out + + +def _factors_at_period(processed_model: ProcessedModel) -> tuple[str, ...]: + """Latent + observed factor names (used as transition regressors).""" + return ( + *processed_model.labels.latent_factors, + *processed_model.labels.observed_factors, + ) + + +def _fit_first_stage_investment( + panel: pd.DataFrame, + period: int, + *, + present_investment: list[str], + state_predictors: list[str], + present_observed: list[str], +) -> tuple[dict[str, np.ndarray], list[tuple[str, int, str, str, float]]]: + """Fit the contemporaneous investment equation(s) (AMN eq. 7). + + For each present investment factor, regress its (latent) log-investment + value on the present production-input state factors plus the excluded + observed instruments, and keep the in-sample residual as the control + function for the production step (AMN 2020 eq. 7-8 / AF Sec. 3.5). + + Args: + panel: Simulated latent-factor panel. + period: Calendar period `t` (the `aug_period` index emitted on rows). + present_investment: Investment factors present at `period`. + state_predictors: CorrectionSpec first-stage state predictors present at + `period`, in design order. + present_observed: CorrectionSpec instruments present at `period` (the + excluded observed factors). + + Return: + Tuple `(cf_by_factor, investment_rows)` where `cf_by_factor` maps each + investment factor to its residual control-function vector and + `investment_rows` are the `investment_eq` / `investment_sds` param + rows. + + Raises: + NotImplementedError: If more than one investment factor is present + (the control-function choice is ambiguous). + ValueError: If no observed instrument is present (the residual would + be collinear with the production inputs). + + """ + if len(present_investment) > 1: + msg = ( + "AMN control function with more than one present investment factor at " + f"period {period} is unsupported: the control-function choice for the " + "state-factor production regressions is ambiguous." + ) + raise NotImplementedError(msg) + + cf_by_factor: dict[str, np.ndarray] = {} + investment_rows: list[tuple[str, int, str, str, float]] = [] + for inv_factor in present_investment: + if not present_observed: + msg = ( + "The AMN control function requires at least one present instrument " + f"at period {period} to identify the control-function coefficient " + f"for '{inv_factor}': without an excluded instrument the residual " + "eta_{I,t} is collinear with the production inputs (theta_t, I_t)." + ) + raise ValueError(msg) + determinant_names = [*state_predictors, *present_observed] + y_invest = panel[_slot_column(period, inv_factor)].to_numpy() + x_determinants = panel[ + [_slot_column(period, f) for f in determinant_names] + ].to_numpy() + coefs, inv_sd, residual = _fit_investment_residual( + y_invest, x_determinants, determinant_names + ) + cf_by_factor[inv_factor] = residual + for name, value in coefs.items(): + investment_rows.append( + ("investment_eq", period, inv_factor, name, float(value)) + ) + investment_rows.append(("investment_sds", period, inv_factor, "-", inv_sd)) + return cf_by_factor, investment_rows + + +@dataclass(frozen=True) +class _ProductionContext: + """Per-period design context for the Stage-3 production regressions.""" + + x_design: np.ndarray + """All-present-factor design (non-control-function path).""" + present_factor_names: list[str] + """Names matching `x_design`'s columns.""" + x_design_production: np.ndarray + """Production design under the control-function path: present factors with the + excluded *instruments* removed. Latent factors and any non-instrument observed + factors (genuine production controls) are kept.""" + production_factor_names: list[str] + """Names matching `x_design_production`'s columns.""" + cf_by_factor: dict[str, np.ndarray] + """Investment factor -> control-function residual for this period.""" + + +def _fit_period_production( + panel: pd.DataFrame, + period: int, + next_period: int, + processed_model: ProcessedModel, + model_spec: ModelSpec, + *, + factor_to_function_name: dict[str, str], + context: _ProductionContext, + run_cf: bool, + targets: list[str], + fixed_by_factor: Mapping[str, Mapping[str, float]] | None = None, +) -> list[tuple[str, int, str, str, float]]: + """Run the production regressions for every latent outcome at `period`. + + Under `run_cf` the production inputs are the present factors with the excluded + *instruments* removed -- latent factors plus any non-instrument observed + factors (genuine production controls) -- and the control-function residual is + injected as a `kappa*cf` covariate into *state* outcomes only, not the + investment factor's own transition. Only the `CorrectionSpec` instruments are + excluded; other observed factors remain production inputs. + Without `run_cf` the regressors are all present factors (legacy behaviour). + + Return: + Transition / shock_sd parameter rows for this period. + + """ + if run_cf: + fit_x_design = context.x_design_production + fit_names = context.production_factor_names + else: + fit_x_design = context.x_design + fit_names = context.present_factor_names + + transition_rows: list[tuple[str, int, str, str, float]] = [] + for factor in processed_model.labels.latent_factors: + target_col = _slot_column(next_period, factor) + if target_col not in panel.columns: + continue + trans_name = factor_to_function_name.get(factor, "linear") + if trans_name == "constant": + continue + y = panel[target_col].to_numpy() + + inject_cf = run_cf and factor in targets + cf: np.ndarray | None = None + if inject_cf and context.cf_by_factor: + cf = next(iter(context.cf_by_factor.values())) + + params, sd = _fit_transition( + trans_name, + factor, + processed_model, + model_spec, + y, + fit_x_design, + fit_names, + cf=cf, + fixed=fixed_by_factor.get(factor) if fixed_by_factor else None, + ) + for regname, value in params.items(): + transition_rows.append( + ("transition", period, factor, regname, float(value)) + ) + transition_rows.append(("shock_sds", period, factor, "-", sd)) + return transition_rows + + +def simulate_and_regress( + structural: MinimumDistanceResult, + processed_model: ProcessedModel, + model_spec: ModelSpec, + mixture_weights: np.ndarray, + *, + n_draws: int = 100_000, + seed: int = 0, + linearize_control_function: bool = False, + fixed_params: pd.DataFrame | None = None, +) -> ProductionFitResult: + """Simulate the joint latent-factor distribution and run Stage-3 regressions. + + Args: + structural: Stage 2 output (structural mixture, loadings, etc.). + processed_model: Skillmodels processed model. + model_spec: Original model spec; used to look up raw transition + callables for user-registered `@register_params` functions. + mixture_weights: Per-component mixture weights from Stage 1. + n_draws: Synthetic-panel size. + seed: RNG seed. + linearize_control_function: When True, fit only the single linear `cf` + term and skip the higher-order `kappa_terms` + `NotImplementedError` gate (used when AMN seeds `estimate_chs`). + fixed_params: optional params frame whose ``transition`` rows pin + production-function coefficients. Each pinned coefficient is held at + its value inside the per-period production regression while the + remaining coefficients are fit conditional on the pins. Rows of + other categories are ignored here (they belong to other stages). + + The AMN eq.-7-8 investment control-function correction (AF Sec. 3.5) runs iff + the model declares a `CorrectionSpec` (presence is the single trigger). A + contemporaneous first-stage investment equation is then fitted per investment + factor over the spec's `state_predictors` + excluded `instruments`, and its + in-sample residual `eta_{I,t}` is added as an additive `kappa * cf` covariate + to each `targets` factor's production regression. AMN implements only the + linear `cf` term; higher-order `kappa_terms` raise `NotImplementedError`. + + Return: + ProductionFitResult with production-function and investment-equation + parameter DataFrames. + + """ + endog_info = processed_model.endogenous_factors_info + control_function = endog_info.control_function + # CorrectionSpec presence is the single trigger; there is no separate flag. + run_cf = control_function is not None + + if control_function is not None and not linearize_control_function: + # AMN implements only a single linear cf term per target; the higher-order + # (translog) kappa_terms basis needs estimate_chs. When used to *seed* + # estimate_chs (`linearize_control_function=True`), AMN instead fits only + # the linear cf term and leaves the higher-order kappa terms for the + # start-value defaults. + for target, terms in control_function.kappa_terms.items(): + if tuple(terms) != ("cf",): + msg = ( + "AMN implements only a linear control function (kappa * cf). " + f"Target {target!r} requests higher-order terms {tuple(terms)}; " + "use estimate_chs for the full polynomial basis." + ) + raise NotImplementedError(msg) + + investment_factors = ( + [control_function.investment_factor] if control_function is not None else [] + ) + cf_targets = list(control_function.targets) if control_function is not None else [] + cf_predictors = ( + list(control_function.state_predictors) if control_function is not None else [] + ) + cf_instruments = ( + list(control_function.instruments) if control_function is not None else [] + ) + + panel = _draw_factor_panel(structural, mixture_weights, n_draws=n_draws, seed=seed) + + periods = processed_model.labels.periods + transition_info = processed_model.transition_info + factor_to_function_name = ( + dict(transition_info.function_names) if transition_info is not None else {} + ) + + transition_rows: list[tuple[str, int, str, str, float]] = [] + investment_rows: list[tuple[str, int, str, str, float]] = [] + + for t_idx in range(len(periods) - 1): + t = int(periods[t_idx]) + t_next = int(periods[t_idx + 1]) + factor_names = _factors_at_period(processed_model) + regressor_cols = [_slot_column(t, f) for f in factor_names] + present_pairs = [ + (f, c) + for f, c in zip(factor_names, regressor_cols, strict=True) + if c in panel.columns + ] + if not present_pairs: + continue + present_factor_names = [f for f, _ in present_pairs] + x_design = panel[[c for _, c in present_pairs]].to_numpy() + + # Production design used under the control-function path: drop only the + # excluded instruments, keeping latent factors and any non-instrument + # observed factors (genuine production controls). When every observed + # factor is an instrument this reduces to the latent-only design. + instrument_set = set(cf_instruments) + production_pairs = [(f, c) for f, c in present_pairs if f not in instrument_set] + production_factor_names = [f for f, _ in production_pairs] + x_design_production = ( + panel[[c for _, c in production_pairs]].to_numpy() + if production_pairs + else x_design + ) + + # First stage: fit the contemporaneous investment equation(s) and + # cache the control-function residual(s) for the production step. + cf_by_factor: dict[str, np.ndarray] = {} + if run_cf: + cf_by_factor, period_investment_rows = _fit_first_stage_investment( + panel, + t, + present_investment=[ + f for f in present_factor_names if f in investment_factors + ], + state_predictors=[ + f for f in cf_predictors if f in present_factor_names + ], + present_observed=[ + f for f in cf_instruments if f in present_factor_names + ], + ) + investment_rows.extend(period_investment_rows) + + context = _ProductionContext( + x_design=x_design, + present_factor_names=present_factor_names, + x_design_production=x_design_production, + production_factor_names=production_factor_names, + cf_by_factor=cf_by_factor, + ) + transition_rows.extend( + _fit_period_production( + panel, + t, + t_next, + processed_model, + model_spec, + factor_to_function_name=factor_to_function_name, + context=context, + run_cf=run_cf, + targets=cf_targets, + fixed_by_factor=_transition_fixes_for_period(fixed_params, t), + ) + ) + + def _rows_to_df( + rows: list[tuple[str, int, str, str, float]], + ) -> pd.DataFrame: + if not rows: + return pd.DataFrame( + {"value": []}, + index=pd.MultiIndex.from_tuples( + [], names=["category", "aug_period", "name1", "name2"] + ), + ) + index = pd.MultiIndex.from_tuples( + [(c, p, n1, n2) for c, p, n1, n2, _ in rows], + names=["category", "aug_period", "name1", "name2"], + ) + values = [v for *_, v in rows] + return pd.DataFrame({"value": values}, index=index) + + return ProductionFitResult( + production_params=_rows_to_df(transition_rows), + investment_params=_rows_to_df(investment_rows), + n_draws=n_draws, + seed=seed, + ) diff --git a/src/skillmodels/amn/start_values.py b/src/skillmodels/amn/start_values.py new file mode 100644 index 00000000..09489981 --- /dev/null +++ b/src/skillmodels/amn/start_values.py @@ -0,0 +1,871 @@ +"""Moment-based starting values for the CHS estimator. + +Replaces the legacy `0.5` / `1.0` / `0.0` constant fills with +data-derived seeds. Two-stage hybrid: + +1. **Spearman cross-covariance moments** identify the measurement + system (loadings + measurement-error SDs + latent factor SDs) + per period. +2. **OLS on Bartlett-scored factor proxies** identifies transition + coefficients and the residual SD of the production shock — + the AMN (Attanasio-Meghir-Nix 2020) flavour the AF paper §7 + recommends as starting values, just bootstrapped from the + Spearman estimates rather than from a separate AMN run. + +Together these give a data-derived seed for every category that has +moment-based identification. Categories Spearman + Bartlett-OLS +cannot identify (mixture weights, initial means, controls) fall +back to neutral defaults — these affect convergence speed only, +not identification. +""" + +from collections.abc import Iterable, Mapping + +import numpy as np +import optimagic as om +import pandas as pd + +from skillmodels.amn.moments import ( + SpearmanResult, + seed_beta_from_ols, + spearman_factor_moments, +) +from skillmodels.common.model_spec import ModelSpec +from skillmodels.common.process_data import process_data +from skillmodels.common.process_model import process_model +from skillmodels.common.types import Normalizations, ProcessedModel + + +def get_spearman_start_params( + model_spec: ModelSpec, + data: pd.DataFrame, + params_template: pd.DataFrame, +) -> pd.DataFrame: + """Return a copy of `params_template` with moment-based seed values. + + Walks the params index and fills each row using: + + * `loadings`, `meas_sds`: per-period Spearman moments on the + single-factor measurements of each latent factor. + * `initial_cholcovs`: diagonal entries set to `sqrt(latent_var)` + from the period-0 Spearman result; off-diagonals 0. + * `initial_states`: 0 (location is unidentified from cross-covs). + * `mixture_weights`: uniform `1 / n_mixtures`. + * `controls`: 0. + * `shock_sds`: 0.5. + * `transition`: 0.5. + + Rows where `lower_bound == upper_bound` (user normalizations, + fixed_params pins, model-implied fixes) are left untouched. + + Args: + model_spec: Model specification. + data: Long-format panel with the same `(id, period)` MultiIndex + consumed by `get_maximization_inputs`. + params_template: The params DataFrame returned by + `get_maximization_inputs(...)["params_template"]` — it + already has the right MultiIndex, bounds, and pinned + values. + + Return: + Copy of `params_template` with the `value` column populated. + + """ + processed_model = process_model(model_spec) + processed_data = process_data( + df=data, + has_endogenous_factors=processed_model.endogenous_factors_info.has_endogenous_factors, + labels=processed_model.labels, + update_info=processed_model.update_info, + anchoring_info=processed_model.anchoring, + purpose="estimation", + ) + measurements = np.asarray(processed_data["measurements"]) + update_info = processed_model.update_info + latent_factors = processed_model.labels.latent_factors + n_mixtures = processed_model.dimensions.n_mixtures + loading_norms = _collect_loading_norms(processed_model.normalizations) + aug_periods = processed_model.labels.aug_periods + + out = params_template.copy() + # `free` here means "this entry still needs a value" — i.e. it has + # not been pinned by `enforce_fixed_constraints` or by the caller. + # We use NaN-detection instead of `lower_bound != upper_bound` because + # `enforce_fixed_constraints` only writes `value` and leaves bounds + # untouched; bound-equality alone would misclassify fixed entries. + free = out["value"].isna() + + _apply_neutral_defaults(out, free, n_mixtures=n_mixtures) + _seed_initial_states_by_clustering( + out, + free, + measurements=measurements, + update_info=update_info, + latent_factors=latent_factors, + n_mixtures=n_mixtures, + loading_norms=loading_norms, + ) + + update_info_periods = set(update_info.index.get_level_values("aug_period")) + spearman_per_period: dict[tuple[int, str], SpearmanResult] = {} + for aug_period in aug_periods: + if aug_period not in update_info_periods: + continue + period_meas_index = _measurement_row_index(update_info, aug_period) + for factor in latent_factors: + factor_meas = _single_factor_measurements( + update_info, + aug_period=aug_period, + factor=factor, + all_factors=latent_factors, + ) + if len(factor_meas) < 2: + continue + cols = [period_meas_index[m] for m in factor_meas] + sub = measurements[cols, :].T # (n_obs, n_meas) + anchor_local, anchor_loading = _pick_anchor( + factor_meas=factor_meas, factor=factor, loading_norms=loading_norms + ) + result = spearman_factor_moments( + sub, anchor_idx=anchor_local, anchor_loading=anchor_loading + ) + if not result.valid: + continue + spearman_per_period[(aug_period, factor)] = result + _override_loadings_meas_sds( + out, + free, + aug_period=aug_period, + factor=factor, + factor_meas=factor_meas, + result=result, + ) + + _override_initial_cholcovs( + out, + free, + spearman_per_period=spearman_per_period, + latent_factors=latent_factors, + n_mixtures=n_mixtures, + ) + + _override_transition_via_ols( + out, + free, + processed_model=processed_model, + measurements=measurements, + spearman_per_period=spearman_per_period, + observed_factors=np.asarray(processed_data["observed_factors"]), + ) + + _pool_within_stage_equality( + out, + free=free, + processed_model=processed_model, + ) + + return out + + +def _amn_values_on_chs_index( + amn_params: pd.DataFrame, + chs_index: pd.Index, + aug_periods_to_periods: Mapping[int, int], +) -> pd.Series: + """Map AMN estimates onto the CHS template index, fixing the coordinate gap. + + AMN emits parameters in *calendar* time and carries the control-function + coefficient as a `("transition", period, factor, "cf")` row. CHS indexes by + *augmented* period and keeps the control function in a dedicated `kappa` + category. A raw index intersection therefore silently drops every AMN row on + a calendar period that does not coincide with its augmented period, and never + transfers the cf coefficient to `kappa` at all. + + For each CHS template row, translate its augmented period to the calendar + period via `aug_periods_to_periods` and look up the matching AMN row: `kappa` + rows read the AMN `("transition", calendar, factor, "cf")` value, every other + category maps straight through on `(name1, name2)`. Because several augmented + periods can share a calendar period (e.g. both kappa half-periods), one AMN + value can seed several CHS rows -- which is the intended seeding behaviour. + + Args: + amn_params: `AMNEstimationResult.params` (calendar-time, cf under + `transition`). + chs_index: The CHS params template index (augmented-time, dedicated + `kappa` category). + aug_periods_to_periods: `labels.aug_periods_to_periods`, mapping each + augmented period to its calendar period. + + Return: + A `value` Series indexed by `chs_index`; `NaN` where AMN has no match. + + """ + amn_value = amn_params["value"] + out = pd.Series(np.nan, index=chs_index, name="value") + for loc in chs_index: + category, aug_period, name1, name2 = loc + calendar = int(aug_periods_to_periods[int(aug_period)]) + src_category = "transition" if category == "kappa" else category + src_key = (src_category, calendar, name1, name2) + if src_key in amn_value.index: + out.loc[loc] = float(amn_value.loc[src_key]) + return out + + +def get_amn_start_params( + model_spec: ModelSpec, + data: pd.DataFrame, + params_template: pd.DataFrame, + amn_params: pd.DataFrame, +) -> pd.DataFrame: + """Seed start values from AMN estimates, pooling stage-tied params. + + Fills via `get_spearman_start_params` (covering entries AMN does not + produce — e.g. mixture weights and initial Cholesky diagonals), translates + the AMN estimates from calendar/cf coordinates onto the CHS augmented/`kappa` + index (see `_amn_values_on_chs_index`), overlays them onto the free entries, + then re-pools the `transition` / `shock_sds` seeds within each stage. The + re-pool is essential: AMN estimates per period, so its overlay re-breaks the + within-stage `PairwiseEqualityConstraint`s that `optimagic` checks at the + start point (`get_spearman_start_params` pools them, but the AMN overlay + re-breaks the ties). + + Args: + model_spec: Model specification. + data: Long-format panel with the `(id, period)` MultiIndex consumed by + `get_maximization_inputs`. + params_template: Template from `get_maximization_inputs`, with pinned + entries already filled. + amn_params: `AMNEstimationResult.params` to overlay onto the free + common entries. + + Return: + Copy of `params_template` with seeded, stage-pooled `value`s. + + """ + processed_model = process_model(model_spec) + pre_pinned = params_template["value"].notna() + out = get_spearman_start_params( + model_spec=model_spec, data=data, params_template=params_template + ) + seeded = _amn_values_on_chs_index( + amn_params, out.index, processed_model.labels.aug_periods_to_periods + ) + free = ~pre_pinned + fill = free & seeded.notna() + out.loc[fill, "value"] = seeded.loc[fill] + _pool_within_stage_equality(out, free=free, processed_model=processed_model) + return out + + +def pool_equality_groups( # noqa: C901 + params: pd.DataFrame, + constraints: list[om.constraints.Constraint], + *, + keep_pinned_values: pd.Series | None = None, +) -> pd.DataFrame: + """Pool param values within each `om.EqualityConstraint` group. + + For each `om.EqualityConstraint` whose selector is the standard + `select_by_loc(loc=multi_index)` form, replace the values of all + members of the group with a single shared value so the equality + constraint holds at the start values. If a member is flagged as + "pinned" (via `keep_pinned_values=True` for that loc), the pinned + value is used for the whole group; otherwise the group is averaged. + + Use after moment-based starting values: Spearman seeds each period + independently, which violates user equality constraints across + periods (e.g., loadings or meas_sds constant across periods). + Calling this with the user constraint list restores the equalities + while keeping the data-derived information (now pooled). + + Args: + params: Params DataFrame with a `"value"` column and the + standard 4-level MultiIndex. + constraints: List of optimagic Constraint objects. Only + `om.EqualityConstraint` entries with a `select_by_loc` + partial as `selector` are honoured. + keep_pinned_values: Optional boolean Series indexed like + `params`. Entries where this is True keep their value; + the pooling logic copies that value to every other member + of the same equality group. + + Return: + Modified copy of `params`. + """ + out = params.copy() + for c in constraints: + if not isinstance(c, om.EqualityConstraint): + continue + selector = c.selector + keywords = getattr(selector, "keywords", None) + if not keywords or "loc" not in keywords: + continue + loc = keywords["loc"] + if not isinstance(loc, pd.MultiIndex) or len(loc) <= 1: + continue + members = [m for m in loc if m in out.index] + if len(members) <= 1: + continue + if keep_pinned_values is not None: + pinned = [ + float(out.loc[m, "value"]) + for m in members + if bool(keep_pinned_values.loc[m]) and pd.notna(out.loc[m, "value"]) + ] + else: + pinned = [] + if pinned: + target = pinned[0] + else: + raw = [ + float(out.loc[m, "value"]) + for m in members + if pd.notna(out.loc[m, "value"]) + ] + if not raw: + continue + target = float(np.mean(raw)) + for m in members: + if keep_pinned_values is None or not bool(keep_pinned_values.loc[m]): + out.loc[m, "value"] = target + return out + + +def _kmeans_labels( + features: np.ndarray, n_clusters: int, *, n_iter: int = 25 +) -> np.ndarray: + """Return deterministic k-means cluster labels for `features` (n_obs, n_dim). + + Centers are initialised at evenly spaced quantiles of the data (no random + seeds, so the result is reproducible), then refined with Lloyd iterations. + Used to break the symmetry of the initial-mixture start values: a mixture + seeded with identical components is a stationary collapsed subspace for a + deterministic optimizer, so the components must start separated. + """ + quantiles = np.linspace(0.0, 1.0, n_clusters + 2)[1:-1] + centers = np.quantile(features, quantiles, axis=0) + labels = np.zeros(features.shape[0], dtype=int) + for it in range(n_iter): + distances = ((features[:, None, :] - centers[None, :, :]) ** 2).sum(axis=2) + new_labels = distances.argmin(axis=1) + if it > 0 and np.array_equal(new_labels, labels): + break + labels = new_labels + for k in range(n_clusters): + if np.any(labels == k): + centers[k] = features[labels == k].mean(axis=0) + return labels + + +def _period0_anchor_columns( + update_info: pd.DataFrame, + *, + latent_factors: tuple[str, ...], + loading_norms: dict[tuple[str, str], float], +) -> dict[str, int]: + """Return `{factor: measurement column}` for each period-0 anchor measurement.""" + period_meas_index = _measurement_row_index(update_info, 0) + anchor_cols: dict[str, int] = {} + for factor in latent_factors: + factor_meas = _single_factor_measurements( + update_info, aug_period=0, factor=factor, all_factors=latent_factors + ) + if not factor_meas: + continue + anchor_local, _ = _pick_anchor( + factor_meas=factor_meas, factor=factor, loading_norms=loading_norms + ) + anchor_cols[factor] = period_meas_index[factor_meas[anchor_local]] + return anchor_cols + + +def _seed_initial_states_by_clustering( + params: pd.DataFrame, + free: pd.Series, + *, + measurements: np.ndarray, + update_info: pd.DataFrame, + latent_factors: tuple[str, ...], + n_mixtures: int, + loading_norms: dict[tuple[str, str], float], +) -> None: + """Seed the initial-mixture component means by clustering period-0 anchors. + + For each latent factor with a period-0 anchor (unit-loading) measurement, + cluster individuals on the joint of those anchors into `n_mixtures` groups and + set each component's initial mean to its cluster mean, ordered so the FIRST + factor's component means increase (matching the identification constraint). + Mixture weights are seeded to the cluster proportions. This replaces the + symmetric all-zeros mean seed that traps a deterministic optimizer at the + collapsed one-Gaussian solution. Cross/diagonal covariances are left to the + Spearman / neutral seeds. + """ + if n_mixtures < 2: + return + if 0 not in set(update_info.index.get_level_values("aug_period")): + return + anchor_cols = _period0_anchor_columns( + update_info, latent_factors=latent_factors, loading_norms=loading_norms + ) + if not anchor_cols: + return + + features = measurements[list(anchor_cols.values()), :].T # (n_obs, n_anchors) + keep = ~np.isnan(features).any(axis=1) + features = features[keep] + if features.shape[0] < n_mixtures: + return + labels = _kmeans_labels(features, n_mixtures) + present = [k for k in range(n_mixtures) if np.any(labels == k)] + if len(present) < n_mixtures: + return # degenerate clustering; keep the neutral seed + # Order components by the first anchor factor's cluster mean (ascending), to + # satisfy the increasing-first-factor-mean identification constraint. + order = sorted(present, key=lambda k: float(features[labels == k, 0].mean())) + for comp, cluster in enumerate(order): + rows = labels == cluster + for f_idx, factor in enumerate(anchor_cols): + loc = ("initial_states", 0, f"mixture_{comp}", factor) + if loc in params.index and bool(free.loc[loc]): + params.loc[loc, "value"] = float(features[rows, f_idx].mean()) + w_loc = ("mixture_weights", 0, f"mixture_{comp}", "-") + if w_loc in params.index and bool(free.loc[w_loc]): + params.loc[w_loc, "value"] = float(rows.mean()) + + +def _apply_neutral_defaults( + params: pd.DataFrame, + free: pd.Series, + *, + n_mixtures: int, +) -> None: + cat = params.index.get_level_values("category") + params.loc[free & (cat == "controls"), "value"] = 0.0 + params.loc[free & (cat == "loadings"), "value"] = 1.0 + params.loc[free & (cat == "meas_sds"), "value"] = 0.5 + params.loc[free & (cat == "shock_sds"), "value"] = 0.5 + params.loc[free & (cat == "initial_states"), "value"] = 0.0 + params.loc[free & (cat == "mixture_weights"), "value"] = 1.0 / max(n_mixtures, 1) + params.loc[free & (cat == "initial_cholcovs"), "value"] = 0.0 + params.loc[free & (cat == "transition"), "value"] = 0.5 + # Control-function categories (present only under a CorrectionSpec). Seed + # small/neutral: no first-stage relationship and no correction initially. + params.loc[free & (cat == "investment_eq"), "value"] = 0.0 + params.loc[free & (cat == "kappa"), "value"] = 0.0 + # Higher-order terms -- translog interactions / squares ("f1 * f2", "f1 ** 2") + # and higher-order cf terms ("cf * f1", "cf ** 2"), identified by a space in + # `name2` -- are not produced by the linear AMN/Spearman seeds; start them + # small so the optimiser explores away from zero without dominating. + name2 = params.index.get_level_values("name2") + higher_order = free & pd.Series([" " in str(n) for n in name2], index=params.index) + params.loc[higher_order, "value"] = 0.01 + diag_values = pd.Series( + [_is_cholcov_diag(idx) for idx in params.index], + index=params.index, + ) + diag_mask = free & (cat == "initial_cholcovs") & diag_values + params.loc[diag_mask, "value"] = 1.0 + + +def _is_cholcov_diag(idx: tuple) -> bool: + if idx[0] != "initial_cholcovs": + return False + name2 = idx[3] + if "-" not in name2: + return False + a, b = name2.split("-", 1) + return a == b + + +def _measurement_row_index( + update_info: pd.DataFrame, aug_period: int +) -> dict[str, int]: + out: dict[str, int] = {} + for flat_idx, (a_period, meas) in enumerate(update_info.index): + if a_period == aug_period: + out[meas] = flat_idx + return out + + +def _single_factor_measurements( + update_info: pd.DataFrame, + *, + aug_period: int, + factor: str, + all_factors: Iterable[str], +) -> tuple[str, ...]: + """Return measurements at `aug_period` that load only on `factor`.""" + period_rows = update_info.xs(aug_period, level="aug_period") + measurement_rows = period_rows.loc[period_rows["purpose"] == "measurement"] + out: list[str] = [] + factors = list(all_factors) + for meas, row in measurement_rows.iterrows(): + if not bool(row[factor]): + continue + if any(bool(row[f]) for f in factors if f != factor): + continue + out.append(str(meas)) + return tuple(out) + + +def _collect_loading_norms( + normalizations: Mapping[str, Normalizations], +) -> dict[tuple[str, str], float]: + """Flatten per-factor loading normalizations into a (meas, factor) → value dict.""" + out: dict[tuple[str, str], float] = {} + for factor, norms in normalizations.items(): + loadings_per_period = norms.loadings + for period_norms in loadings_per_period: + for meas, value in period_norms.items(): + out[(meas, factor)] = float(value) + return out + + +def _pick_anchor( + *, + factor_meas: tuple[str, ...], + factor: str, + loading_norms: dict[tuple[str, str], float], +) -> tuple[int, float]: + for local_idx, meas in enumerate(factor_meas): + if (meas, factor) in loading_norms: + return local_idx, loading_norms[(meas, factor)] + return 0, 1.0 + + +def _override_loadings_meas_sds( + params: pd.DataFrame, + free: pd.Series, + *, + aug_period: int, + factor: str, + factor_meas: tuple[str, ...], + result: SpearmanResult, +) -> None: + for local_idx, meas in enumerate(factor_meas): + loc_load = ("loadings", aug_period, meas, factor) + if loc_load in params.index and free.loc[loc_load]: + params.loc[loc_load, "value"] = float(result.loadings[local_idx]) + loc_sd = ("meas_sds", aug_period, meas, "-") + if loc_sd in params.index and free.loc[loc_sd]: + params.loc[loc_sd, "value"] = float(result.meas_sds[local_idx]) + + +def _override_initial_cholcovs( + params: pd.DataFrame, + free: pd.Series, + *, + spearman_per_period: dict[tuple[int, str], SpearmanResult], + latent_factors: tuple[str, ...], + n_mixtures: int, +) -> None: + for factor in latent_factors: + result = spearman_per_period.get((0, factor)) + if result is None: + continue + sd_factor = float(np.sqrt(max(result.latent_var, 1e-12))) + for comp in range(n_mixtures): + loc = ( + "initial_cholcovs", + 0, + f"mixture_{comp}", + f"{factor}-{factor}", + ) + if loc in params.index and free.loc[loc]: + params.loc[loc, "value"] = sd_factor + + +def _pool_within_stage_equality( # noqa: C901, PLR0912 + params: pd.DataFrame, + *, + free: pd.Series, + processed_model: ProcessedModel, +) -> None: + """Pool `transition` and `shock_sds` seeds within each stage. + + The `_get_stage_constraints` machinery imposes pairwise equality + constraints across aug_periods belonging to the same stage. Our + OLS-based seeds produce period-specific values; this post-processing + pools them into a single stage value so the constraints hold at + the start values. Pinned entries (set by `enforce_fixed_constraints` + before the moment-based fill) take precedence — if any member of + the equality group is pinned, the whole group uses that pinned + value; otherwise the group is averaged. + """ + stagemap = processed_model.labels.aug_stagemap + stages: dict[int, list[int]] = {} + for aug_period, stage in enumerate(stagemap): + stages.setdefault(stage, []).append(aug_period) + + for stage_periods in stages.values(): + if len(stage_periods) <= 1: + continue + for category in ("transition", "shock_sds"): + try: + cat_slice = params.loc[category] + except KeyError: + continue + existing_periods = set(cat_slice.index.get_level_values(0)) + shared = [p for p in stage_periods if p in existing_periods] + if len(shared) <= 1: + continue + sub_index = cat_slice.loc[shared[0]].index + for inner_loc in sub_index: + full_locs = [ + (category, p, *inner_loc) + for p in shared + if (category, p, *inner_loc) in params.index + ] + if len(full_locs) <= 1: + continue + pinned_values = [ + float(params.loc[loc, "value"]) + for loc in full_locs + if not bool(free.loc[loc]) and pd.notna(params.loc[loc, "value"]) + ] + if pinned_values: + target = pinned_values[0] + else: + raw_values = [ + float(params.loc[loc, "value"]) + for loc in full_locs + if pd.notna(params.loc[loc, "value"]) + ] + if not raw_values: + continue + target = float(np.mean(raw_values)) + for loc in full_locs: + if free.loc[loc]: + params.loc[loc, "value"] = target + + +def _bartlett_score( + measurements: np.ndarray, + cols: list[int], + loadings: np.ndarray, + meas_sds: np.ndarray, +) -> np.ndarray: + r"""Bartlett factor-score estimator from per-indicator measurements. + + Returns the inverse-noise-weighted single-factor proxy + :math:`\hat F = \sum_k w_k Z_k / \sum_k w_k \lambda_k` + with :math:`w_k = \lambda_k / \sigma_k^2`, over rows where all + `cols` are finite. Rows with any NaN get NaN proxy. + """ + sub = measurements[cols, :].T # (n_obs, n_meas) + weights = loadings / np.maximum(meas_sds**2, 1e-12) + denom = float(np.sum(weights * loadings)) + if denom < 1e-9: + return np.full(sub.shape[0], np.nan) + score = (sub * weights).sum(axis=1) / denom + mask = np.all(np.isfinite(sub), axis=1) + score[~mask] = np.nan + return score + + +def _override_transition_via_ols( # noqa: C901, PLR0912, PLR0915 + params: pd.DataFrame, + free: pd.Series, + *, + processed_model: ProcessedModel, + measurements: np.ndarray, + spearman_per_period: dict[tuple[int, str], SpearmanResult], + observed_factors: np.ndarray, +) -> None: + """Seed transition coefficients + shock_sds via OLS on Bartlett scores. + + For each transition equation that maps state factors at one + aug-period to a factor at the next aug-period with measurements, + run OLS of the target Bartlett score on regressors derived from + the source aug-period's Bartlett scores + observed factors. + Coefficients are written into the matching `transition` rows; + the residual SD is written to the matching `shock_sds` row. + + Currently implemented for `linear` and `translog` transition + functions. Other transition functions keep the constant-default + seeds set in `_apply_neutral_defaults`. + """ + update_info = processed_model.update_info + update_info_periods = list(update_info.index.get_level_values("aug_period")) + aug_periods = processed_model.labels.aug_periods + latent_factors = processed_model.labels.latent_factors + observed_factor_names = processed_model.labels.observed_factors + transition_info = processed_model.transition_info + + bartlett_proxies: dict[tuple[int, str], np.ndarray] = {} + for (aug_period, factor), result in spearman_per_period.items(): + period_meas_index = _measurement_row_index(update_info, aug_period) + factor_meas = _single_factor_measurements( + update_info, + aug_period=aug_period, + factor=factor, + all_factors=latent_factors, + ) + cols = [period_meas_index[m] for m in factor_meas] + proxy = _bartlett_score( + measurements, + cols, + result.loadings, + result.meas_sds, + ) + bartlett_proxies[(aug_period, factor)] = proxy + + n_obs = measurements.shape[1] if measurements.ndim == 2 else 0 + n_calendar_periods = processed_model.dimensions.n_periods + + for src_idx, src_aug in enumerate(aug_periods[:-1]): + tgt_aug = aug_periods[src_idx + 1] + if tgt_aug not in update_info_periods: + continue + cal_idx_src = _aug_to_calendar_idx( + processed_model, + src_aug, + n_calendar_periods, + ) + if cal_idx_src is None: + continue + if observed_factors.ndim == 3: + obs_at_src = observed_factors[cal_idx_src] + else: + obs_at_src = np.zeros((n_obs, 0)) + + for factor in latent_factors: + func_name = transition_info.function_names.get(factor) + if func_name not in ("linear", "translog"): + continue + if (tgt_aug, factor) not in bartlett_proxies: + continue + target = bartlett_proxies[(tgt_aug, factor)] + + source_factor_proxies: dict[str, np.ndarray] = {} + for src_factor in latent_factors: + if (src_aug, src_factor) in bartlett_proxies: + source_factor_proxies[src_factor] = bartlett_proxies[ + (src_aug, src_factor) + ] + if factor not in source_factor_proxies: + # Need at least the dependent factor's source proxy + # for the regression to be meaningful. + continue + + param_names = transition_info.param_names[factor] + design, regressor_to_col = _build_design_for_transition( + func_name=func_name, + param_names=param_names, + latent_factors=latent_factors, + source_factor_proxies=source_factor_proxies, + observed_factor_names=observed_factor_names, + observed_factor_data=obs_at_src, + ) + if design is None: + continue + mask = np.isfinite(target) & np.all(np.isfinite(design), axis=1) + if mask.sum() <= design.shape[1] + 1: + continue + beta = seed_beta_from_ols(target[mask], design[mask]) + if not np.all(np.isfinite(beta)): + continue + for regressor, col_idx in regressor_to_col.items(): + loc = ("transition", src_aug, factor, regressor) + if loc in params.index and free.loc[loc]: + params.loc[loc, "value"] = float(beta[col_idx]) + + # Residual SD → shock_sds[src_aug][factor]. + residual = target[mask] - design[mask] @ beta + tgt_result = spearman_per_period.get((tgt_aug, factor)) + if tgt_result is None: + continue + # Bartlett-score residual variance includes + # shock_var + (Bartlett-score-noise) ≈ shock_var + 1/Σ w·λ. + score_noise_var = 1.0 / max( + np.sum( + tgt_result.loadings**2 / np.maximum(tgt_result.meas_sds**2, 1e-12), + ), + 1e-9, + ) + raw_var = float(np.var(residual, ddof=1)) + shock_var = max(raw_var - score_noise_var, 1e-6) + shock_sd = float(np.sqrt(shock_var)) + loc_sd = ("shock_sds", src_aug, factor, "-") + if loc_sd in params.index and free.loc[loc_sd]: + params.loc[loc_sd, "value"] = shock_sd + + +def _aug_to_calendar_idx( + processed_model: ProcessedModel, + aug_period: int, + n_calendar_periods: int, +) -> int | None: + """Map an aug-period to the calendar period of `observed_factors`. + + `processed_data["observed_factors"]` has shape + `(n_periods, n_obs, n_observed_factors)`; this returns the + calendar period index for the given aug-period, or `None` if it + falls outside the calendar range. + """ + mapping = processed_model.labels.aug_periods_to_periods + cal = mapping.get(aug_period) + if cal is None: + return None + if 0 <= int(cal) < n_calendar_periods: + return int(cal) + return None + + +def _build_design_for_transition( # noqa: C901 + *, + func_name: str, # noqa: ARG001 + param_names: tuple[str, ...], + latent_factors: tuple[str, ...], # noqa: ARG001 + source_factor_proxies: dict[str, np.ndarray], + observed_factor_names: tuple[str, ...], + observed_factor_data: np.ndarray, +) -> tuple[np.ndarray | None, dict[str, int]]: + """Build the OLS design matrix matching `param_names`. + + Returns `(design, regressor_to_col)` where `regressor_to_col` maps + each handled regressor name to its column index in `design`. + Regressors that cannot be built from the available proxies are + omitted (the corresponding transition coefficient stays at the + constant-default seed). + """ + n_obs = next(iter(source_factor_proxies.values())).shape[0] + columns: list[np.ndarray] = [] + regressor_to_col: dict[str, int] = {} + + def _proxy_for(name: str) -> np.ndarray | None: + if name in source_factor_proxies: + return source_factor_proxies[name] + if name in observed_factor_names: + idx = observed_factor_names.index(name) + if observed_factor_data.shape[1] > idx: + return observed_factor_data[:, idx] + return None + + for regressor in param_names: + if regressor == "constant": + columns.append(np.ones(n_obs)) + regressor_to_col[regressor] = len(columns) - 1 + elif " ** 2" in regressor: + name = regressor.replace(" ** 2", "").strip() + proxy = _proxy_for(name) + if proxy is not None: + columns.append(proxy * proxy) + regressor_to_col[regressor] = len(columns) - 1 + elif " * " in regressor: + a, b = (s.strip() for s in regressor.split(" * ")) + pa, pb = _proxy_for(a), _proxy_for(b) + if pa is not None and pb is not None: + columns.append(pa * pb) + regressor_to_col[regressor] = len(columns) - 1 + else: + proxy = _proxy_for(regressor) + if proxy is not None: + columns.append(proxy) + regressor_to_col[regressor] = len(columns) - 1 + + if not columns: + return None, {} + design = np.column_stack(columns) + return design, regressor_to_col diff --git a/src/skillmodels/amn/types.py b/src/skillmodels/amn/types.py new file mode 100644 index 00000000..6912faef --- /dev/null +++ b/src/skillmodels/amn/types.py @@ -0,0 +1,341 @@ +"""Frozen dataclass definitions for the AMN estimator. + +Mirrors the structure of `skillmodels.af.types` for consistency. The +three-stage Attanasio-Meghir-Nix (2020) procedure produces a stack of +intermediate results (reduced-form mixture, structural recovery, +production-function regression); each stage's output is held in +`AMNStageResults`. +""" + +from collections.abc import Mapping +from dataclasses import dataclass +from types import MappingProxyType +from typing import Any, Literal + +import numpy as np +import pandas as pd + +from skillmodels._beartype_conf import OPTIONS_CONF, beartype_init +from skillmodels.common.model_spec import ModelSpec +from skillmodels.common.types import ensure_containers_are_immutable + + +@beartype_init(OPTIONS_CONF) +@dataclass(frozen=True, init=False) +class AMNEstimationOptions: + """Configuration options for the AMN estimator.""" + + em_max_iter: int + """Maximum EM iterations in Stage 1.""" + + em_tol: float + """Log-likelihood tolerance for EM convergence.""" + + em_n_init: int + """Number of EM restarts; keep the highest-likelihood fit.""" + + em_reg_covar: float + """Diagonal ridge added to each EM covariance for numerical stability.""" + + n_simulation_draws: int + """Synthetic latent-factor panel size for Stage 3.""" + + minimum_distance_weighting: Literal["identity", "optimal"] + """Stage 2 minimum-distance weighting. `"identity"` (the paper's default + and currently the only implemented option) is an unweighted identity metric + over per-component means and full covariance matrices. `"optimal"` is + reserved for a future 2-step Avar-weighted criterion and currently raises + `NotImplementedError`.""" + + allow_ces_overnormalization: bool + """Opt out of the CES minimal-normalization guard. When True, extra + normalized CES loadings are treated as a deliberate fixed-loadings + analysis rather than a (Freyberger-adaptation-defeating) error.""" + + optimizer_algorithm: str + """optimagic algorithm name for Stage 2 minimum-distance optimization.""" + + optimizer_options: MappingProxyType[str, Any] + """Additional kwargs forwarded to optimagic in Stage 2.""" + + keep_synthetic_panel: bool + """Retain the Stage-3 simulated panel on the result for diagnostics. Off + by default to keep result objects compact.""" + + seed: int + """RNG seed used for Stage 3 simulation and bootstrap inference.""" + + mixture_em_method: Literal["complete_case", "missing_data"] + """Stage-1 mixture EM method. `"complete_case"` (default) fits `sklearn`'s + `GaussianMixture` on listwise-complete rows and raises + `InsufficientCompleteCasesError` when fewer than `n_mixtures` rows are + complete in every augmented measurement -- the unbalanced-panel regime. + `"missing_data"` instead fits the EM that marginalises over each row's + missing entries, valid (under MAR) even with no complete cases at all. The + interface is identical for standalone estimation and for CHS seeding; only + the option values differ (seeding picks the method and a row cap explicitly, + rather than the estimator switching silently).""" + + mixture_em_max_rows: int | None + """Optional cap on the number of rows used to fit the Stage-1 mixture. `None` + (default) uses every row. When set, rows are subsampled with `seed` before + fitting. CHS seeding sets a modest cap so the per-restart cost of the + missing-data EM stays bounded; standalone estimation keeps the full sample.""" + + allow_never_observed_measurements: bool + """Whether the missing-data EM may proceed when an augmented-measure column is + never observed in any (sub)sampled row. `False` (default) raises, since such a + column's moments are unidentified and would feed noise into Stage 2. CHS + seeding sets `True`: the row cap can drop every observation of a rare + measurement, and the seeded value is harmless because `estimate_chs` re-fits + every parameter from the data.""" + + def __init__( # noqa: D107 + self, + em_max_iter: int = 500, + em_tol: float = 1e-6, + em_n_init: int = 5, + em_reg_covar: float = 1e-6, + n_simulation_draws: int = 100_000, + minimum_distance_weighting: Literal["identity", "optimal"] = "identity", + optimizer_algorithm: str = "scipy_lbfgsb", + optimizer_options: Mapping[str, Any] | None = None, + *, + allow_ces_overnormalization: bool = False, + keep_synthetic_panel: bool = False, + seed: int = 0, + mixture_em_method: Literal["complete_case", "missing_data"] = "complete_case", + mixture_em_max_rows: int | None = None, + allow_never_observed_measurements: bool = False, + ) -> None: + object.__setattr__(self, "em_max_iter", em_max_iter) + object.__setattr__(self, "em_tol", em_tol) + object.__setattr__(self, "em_n_init", em_n_init) + object.__setattr__(self, "em_reg_covar", em_reg_covar) + object.__setattr__(self, "n_simulation_draws", n_simulation_draws) + object.__setattr__( + self, "minimum_distance_weighting", minimum_distance_weighting + ) + object.__setattr__( + self, "allow_ces_overnormalization", allow_ces_overnormalization + ) + object.__setattr__(self, "optimizer_algorithm", optimizer_algorithm) + object.__setattr__( + self, + "optimizer_options", + ensure_containers_are_immutable(optimizer_options or {}), + ) + object.__setattr__(self, "keep_synthetic_panel", keep_synthetic_panel) + object.__setattr__(self, "seed", seed) + object.__setattr__(self, "mixture_em_method", mixture_em_method) + object.__setattr__(self, "mixture_em_max_rows", mixture_em_max_rows) + object.__setattr__( + self, + "allow_never_observed_measurements", + allow_never_observed_measurements, + ) + + +@dataclass(frozen=True) +class AugmentedMeasureLayout: + """Index bookkeeping for the augmented measure vector. + + AMN Stage 1 fits a Gaussian mixture on the joint vector of: + 1. Factor measurements at each period (have measurement error), + 2. Observed factor values at each period (no measurement error, + loading fixed at 1, intercept free), + 3. Controls (time-invariant, no measurement error). + + The layout records which slot in the stacked vector corresponds to + which conceptual quantity, so Stage 2 can map the fitted Pi/Psi back + onto the structural Lambda/A/Sigma/mu/Omega. + """ + + columns: tuple[str, ...] + """Human-readable label per augmented-vector column.""" + + measurement_slots: tuple[int, ...] + """Indices of slots that correspond to factor measurements (with + measurement error). One per (period, measurement) update.""" + + observed_factor_slots: tuple[int, ...] + """Indices of slots that correspond to observed factor values (no + measurement error). One per (period, observed factor).""" + + control_slots: tuple[int, ...] + """Indices of slots that correspond to controls (no measurement + error).""" + + measurement_meta: tuple[tuple[int, str, str], ...] + """For each measurement slot: (period, factor_name, measurement_name).""" + + observed_factor_meta: tuple[tuple[int, str], ...] + """For each observed-factor slot: (period, observed_factor_name).""" + + control_meta: tuple[str, ...] + """Control name for each control slot.""" + + +@dataclass(frozen=True) +class MixtureFitResult: + """Output of Stage 1: reduced-form mixture parameters. + + The fitted distribution is + ``sum_k weights[k] * Normal(means[k], covariances[k])`` on the + augmented measure vector. Matches AMN eq. (11)-(14). + """ + + weights: np.ndarray + """Mixture weights, shape ``(n_components,)``.""" + + means: np.ndarray + """Per-component mean vectors, shape ``(n_components, n_aug)``.""" + + covariances: np.ndarray + """Per-component covariance matrices, shape + ``(n_components, n_aug, n_aug)``.""" + + loglikelihood: float + """Final EM log-likelihood (summed across observations).""" + + n_iter: int + """EM iterations run by the best restart.""" + + converged: bool + """Whether the best restart converged within `em_tol`.""" + + layout: AugmentedMeasureLayout + """Slot bookkeeping for the augmented measure vector this mixture was + fit on.""" + + +@dataclass(frozen=True) +class MinimumDistanceResult: + """Output of Stage 2: structural parameters from the reduced-form mixture. + + All arrays are in the standard skillmodels ordering established by + `process_model.process_model`. + """ + + loadings: pd.DataFrame + """Recovered factor loadings, MultiIndexed by (period, measurement, + factor).""" + + measurement_intercepts: pd.DataFrame + """Recovered measurement intercepts, MultiIndexed by (period, + measurement, control).""" + + measurement_sds: pd.DataFrame + """Recovered measurement-error SDs, MultiIndexed by (period, + measurement).""" + + factor_mixture_means: np.ndarray + """Per-component means of the latent factors stacked across periods, + shape ``(n_components, n_factor_period_slots)``.""" + + factor_mixture_covariances: np.ndarray + """Per-component covariances of the same stacked factor vector, shape + ``(n_components, n_factor_period_slots, n_factor_period_slots)``.""" + + factor_period_slots: tuple[tuple[int, str], ...] + """Ordered ``(period, factor_name)`` for the + ``factor_mixture_*`` arrays.""" + + objective_value: float + """Minimum-distance criterion at the optimum.""" + + success: bool + """Whether the Stage-2 optimization converged.""" + + +@dataclass(frozen=True) +class ProductionFitResult: + """Output of Stage 3: production-function and investment-equation params. + + Fitted by regression on a simulated latent-factor panel; see AMN 2020 + eqs. 4-5, 7-8. + """ + + production_params: pd.DataFrame + """Production-function parameters, in the standard skillmodels + params-DataFrame format (4-level MultiIndex).""" + + investment_params: pd.DataFrame + """Investment-equation parameters (eq. 7), 4-level MultiIndex. Populated + under the control-function correction (a `CorrectionSpec` on the endogenous + investment factor) with the first-stage `investment_eq` coefficients and + `investment_sds` residual SD per investment factor and period; empty + otherwise. When the correction runs, each state factor's production shock + SD (`shock_sds`) is the corrected SD(eps_C) and the production block gains + a `cf` row carrying kappa_t.""" + + n_draws: int + """Number of simulated latent-factor trajectories used.""" + + seed: int + """RNG seed used for the simulation.""" + + +@dataclass(frozen=True) +class AMNStageResults: + """Container for the three stages' intermediate outputs.""" + + mixture: MixtureFitResult + """Stage 1 reduced-form mixture fit.""" + + structural: MinimumDistanceResult + """Stage 2 structural recovery.""" + + production: ProductionFitResult + """Stage 3 production-function regression.""" + + +@dataclass(frozen=True) +class AMNEstimationResult: + """Complete result from AMN estimation.""" + + model_spec: ModelSpec + """The ModelSpec used for estimation.""" + + stages: AMNStageResults + """Per-stage intermediate outputs.""" + + params: pd.DataFrame + """Combined parameters across stages, in the standard 4-level + MultiIndex (category, period, name1, name2) format consumed by every + other skillmodels entry point.""" + + success: bool + """AND across stage convergence flags.""" + + md_criterion: float + """Stage-2 minimum-distance criterion at the optimum (AMN's objective). + Conforms to `skillmodels.common.estimation.CommonEstimationResult`.""" + + loglikelihood: float | None = None + """Always `None` for AMN (minimum-distance, not likelihood); present to + satisfy the common result Protocol.""" + + synthetic_panel: pd.DataFrame | None = None + """Stage-3 simulated factor panel, kept iff + `AMNEstimationOptions.keep_synthetic_panel` is True.""" + + +@dataclass(frozen=True) +class AMNInferenceResult: + """Cluster-bootstrap standard errors and covariance for AMN params.""" + + standard_errors: pd.Series + """std across replicate_params, indexed by the params MultiIndex.""" + + vcov: pd.DataFrame + """cov(replicate_params), MultiIndexed on both axes.""" + + replicate_params: pd.DataFrame + """One row per bootstrap replicate, columns = params MultiIndex.""" + + n_clusters: int + """Caseids resampled per replicate.""" + + n_boot: int + """Number of bootstrap replicates.""" diff --git a/src/skillmodels/chs/__init__.py b/src/skillmodels/chs/__init__.py new file mode 100644 index 00000000..11da3581 --- /dev/null +++ b/src/skillmodels/chs/__init__.py @@ -0,0 +1,37 @@ +"""CHS (Cunha-Heckman-Schennach 2010) Kalman-filter MLE estimator. + +This subpackage holds the state-space machinery that powers the +default skillmodels estimator: + +* `kalman_filters` — square-root unscented and extended Kalman filter + predict/update steps. +* `likelihood` (`+ `_debug`) — Kalman-filter log-likelihood. +* `estimate_chs` — one-call driver wrapping `get_maximization_inputs` + and `optimagic.maximize`, returning a `CHSEstimationResult`. +* `maximization_inputs` — `get_maximization_inputs()`, the canonical + power-user entry point that bundles likelihood / gradients / + constraints / params template for `optimagic.maximize`. +* `process_debug_data` — Kalman-debug-output post-processing. +* `qr`, `clipping` — numerical helpers (square-root QR, soft clipping + for UKF stability). + +The public top-level package re-exports the user-facing entry points +(`estimate_chs`, `get_maximization_inputs`) so most callers don't need +to touch the `chs.` prefix. Cross-estimator state extraction +(`get_individual_states`) and the estimator-agnostic +`create_state_ranges` live under `skillmodels.common`. +""" + +from skillmodels.chs.estimate import estimate_chs +from skillmodels.chs.maximization_inputs import get_maximization_inputs +from skillmodels.chs.options import CHSEstimationOptions +from skillmodels.chs.process_debug_data import process_debug_data +from skillmodels.chs.types import CHSEstimationResult + +__all__ = [ + "CHSEstimationOptions", + "CHSEstimationResult", + "estimate_chs", + "get_maximization_inputs", + "process_debug_data", +] diff --git a/src/skillmodels/clipping.py b/src/skillmodels/chs/clipping.py similarity index 100% rename from src/skillmodels/clipping.py rename to src/skillmodels/chs/clipping.py diff --git a/src/skillmodels/chs/estimate.py b/src/skillmodels/chs/estimate.py new file mode 100644 index 00000000..d9fc21e0 --- /dev/null +++ b/src/skillmodels/chs/estimate.py @@ -0,0 +1,185 @@ +"""One-call driver for the CHS Kalman-MLE estimator. + +`estimate_chs` is a thin wrapper over `get_maximization_inputs` + +`estimagic.estimate_ml`, giving CHS the same `estimate_*(model_spec, data, +options, ...) -> ...EstimationResult` surface as `estimate_af` and +`estimate_amn`. Running through `estimate_ml` (rather than a bare +`optimagic.maximize`) means the returned result carries full ML inference — +standard errors, covariances, summaries — so callers that need inference can +adopt `estimate_chs` instead of hand-rolling `estimate_ml` on top of the +inputs. `get_maximization_inputs` stays public as the power-user escape +hatch for callers who want to drive the optimiser themselves. +""" + +import numpy as np +import optimagic as om +import pandas as pd +from beartype import beartype +from estimagic import estimate_ml + +from skillmodels._beartype_conf import ESTIMATION_CONF +from skillmodels.chs.maximization_inputs import get_maximization_inputs +from skillmodels.chs.options import CHSEstimationOptions +from skillmodels.chs.types import CHSEstimationResult +from skillmodels.common.constraints import ( + enforce_fixed_constraints, + project_start_to_linear_equalities, + reconcile_start_to_equality, +) +from skillmodels.common.identification import ( + fail_if_initial_state_unanchored, + warn_if_overrestricted, +) +from skillmodels.common.model_spec import ModelSpec +from skillmodels.common.types import to_plain_dict + + +@beartype(conf=ESTIMATION_CONF) +def estimate_chs( + model_spec: ModelSpec, + data: pd.DataFrame, + options: CHSEstimationOptions | None = None, + start_params: pd.DataFrame | None = None, + fixed_params: pd.DataFrame | None = None, + constraints: list[om.constraints.Constraint] | None = None, + lower_bounds: pd.Series | None = None, + upper_bounds: pd.Series | None = None, + *, + require_initial_anchors: bool = True, +) -> CHSEstimationResult: + """Estimate a latent factor model by Cunha-Heckman-Schennach Kalman MLE. + + Args: + model_spec: Model specification (same object the other estimators + consume). + data: Dataset in long format with MultiIndex (id, period). + options: CHS-specific tuning parameters, including the + `optimizer_algorithm` / `optimizer_options` driving the + `optimagic.maximize` call and the `start_params_strategy` + seeding the `params_template`. Defaults to + `CHSEstimationOptions()`. + start_params: Optional starting values. Entries whose index matches + the `params_template` overwrite the seeded `value` column; + unmatched template entries keep their seeded values. Uses the + standard 4-level MultiIndex (category, period, name1, name2). + fixed_params: Optional DataFrame with a `"value"` column pinning + parameters; forwarded to `get_maximization_inputs`, which turns + each into a `FixedConstraintWithValue` so `optimagic` holds it + fixed. + constraints: Optional extra `optimagic` constraints, appended to the + model-implied constraints from `get_maximization_inputs`. + lower_bounds: Optional lower bounds, indexed like the `params_template`, + that replace the template's bounds for those parameters: a floor on + a measurement SD that would otherwise collapse, or `-inf` to drop a + bound (optimagic counts each bound on a parameter in a + `LinearConstraint` as one more linear constraint). Start values + below them are raised onto them. + upper_bounds: Optional upper bounds, the counterpart of `lower_bounds` + (e.g. `0` to restrict a loading's sign). Start values above them + are lowered onto them. + require_initial_anchors: When True (the default), run the + estimator-agnostic period-0 anchor check + (`fail_if_initial_state_unanchored`) and raise `ValueError` if the + initial latent distribution has no scale or location anchor. Set + False only for models that are + intentionally location-under-identified -- e.g. the original CHS + replication convention, where the initial latent mean is a free + parameter seeded to 0 rather than pinned by an intercept + normalization. When True it also emits a `UserWarning` + (`warn_if_overrestricted`) for any period-0 orbit direction pinned + more than once, since such surplus pins are testable restrictions + rather than free normalizations. + + Return: + `CHSEstimationResult` with the estimated `params`, the `success` + flag, the maximised `loglikelihood`, the raw optimagic + `optimize_result`, and the estimagic `likelihood_result` carrying ML + inference (`.se()` / `.cov()` / `.summary()`). + + """ + options = options or CHSEstimationOptions() + if require_initial_anchors: + fail_if_initial_state_unanchored(model_spec, fixed_params, constraints) + warn_if_overrestricted(model_spec, fixed_params, constraints) + + max_inputs = get_maximization_inputs( + model_spec=model_spec, + data=data, + chs_options=options, + fixed_params=fixed_params, + ) + + start = max_inputs["params_template"].copy() + if start_params is not None: + overlay = start_params["value"].reindex(start.index) + start.loc[overlay.notna(), "value"] = overlay[overlay.notna()] + + if lower_bounds is not None: + replacement = lower_bounds.reindex(start.index) + locs = replacement.dropna().index + start.loc[locs, "lower_bound"] = replacement[locs] + start.loc[locs, "value"] = np.maximum( + start.loc[locs, "value"], start.loc[locs, "lower_bound"] + ) + + if upper_bounds is not None: + replacement = upper_bounds.reindex(start.index) + locs = replacement.dropna().index + start.loc[locs, "upper_bound"] = replacement[locs] + start.loc[locs, "value"] = np.minimum( + start.loc[locs, "value"], start.loc[locs, "upper_bound"] + ) + + all_constraints = [*max_inputs["constraints"], *(constraints or [])] + + # Write every `FixedConstraintWithValue`'s target into the start vector. + # optimagic's plain "fixed" constraint pins a parameter at its *start* value, + # so a user constraint's `.value` only takes effect once enforced here. User + # `constraints=` are merged only now; `get_maximization_inputs` enforced just + # the internal (model-implied / `fixed_params`) constraints, so without this + # a user-supplied fixed parameter would be silently held at its seed instead + # of the requested value. + start = enforce_fixed_constraints(start, all_constraints) + + # `estimate_ml` (via `om.minimize`) raises `InvalidParamsError` if the start + # point violates any equality constraint. Seeding strategies (AMN/Spearman) + # and user start_params fill each member independently, so pool each equality + # group's seeded value onto the constraint surface -- honouring any fixed + # member's enforced value so the line above is not averaged away. + start = reconcile_start_to_equality(start, all_constraints) + start = project_start_to_linear_equalities(start, all_constraints) + + optimize_options = { + "algorithm": options.optimizer_algorithm, + "algo_options": to_plain_dict(options.optimizer_options) or None, + "fun_and_jac": max_inputs["loglike_and_gradient"], + "error_handling": options.error_handling, + } + + # Default to OPG/jacobian-based inference (`hessian=False`): the numerical + # Hessian costs O(n_params**2) Kalman passes and is prohibitive on real + # models. Overridable via `options.estimate_ml_options`. + estimate_ml_kwargs = { + "hessian": False, + **to_plain_dict(options.estimate_ml_options), + } + + res = estimate_ml( + loglike=max_inputs["loglikeobs"], + params=start[["value"]], + optimize_options=optimize_options, + bounds=om.Bounds(lower=start["lower_bound"], upper=start["upper_bound"]), + constraints=all_constraints, + **estimate_ml_kwargs, + ) + + loglikelihood = float(max_inputs["loglike"](res.params)) + + return CHSEstimationResult( + model_spec=model_spec, + params=res.params, + success=bool(res.optimize_result.success), + loglikelihood=loglikelihood, + optimize_result=res.optimize_result, + likelihood_result=res, + ) diff --git a/src/skillmodels/kalman_filters.py b/src/skillmodels/chs/kalman_filters.py similarity index 65% rename from src/skillmodels/kalman_filters.py rename to src/skillmodels/chs/kalman_filters.py index 7f9549f7..ad47fd6a 100644 --- a/src/skillmodels/kalman_filters.py +++ b/src/skillmodels/chs/kalman_filters.py @@ -6,7 +6,8 @@ import jax.numpy as jnp from jax import Array -from skillmodels.qr import qr_gpu +from skillmodels.chs.qr import qr_gpu +from skillmodels.common.transitions import apply_anchored_transition LINEAR_FUNCTION_NAMES = frozenset({"linear", "constant"}) @@ -28,7 +29,7 @@ def kalman_update( upper_chols: Array, loadings: Array, control_params: Array, - meas_sd: Array, + meas_sd: float | Array, measurements: Array, controls: Array, log_mixture_weights: Array, @@ -130,6 +131,13 @@ def kalman_update( log_mixture_weights, ) + if n_mixtures >= 2: + new_states, new_upper_chols = reset_negligible_mixture_components( + states=new_states, + upper_chols=new_upper_chols, + log_mixture_weights=new_log_mixture_weights, + ) + return ( new_states, new_upper_chols, @@ -138,6 +146,43 @@ def kalman_update( ) +def reset_negligible_mixture_components( + states: Array, + upper_chols: Array, + log_mixture_weights: Array, +) -> tuple[Array, Array]: + """Give components whose weight underflows the dominant component's state. + + A component whose weight is below the smallest normal float contributes exactly + nothing to the likelihood, but its state is still propagated. Under a nonlinear + (e.g. translog) transition it can then explode to inf over later periods, and + the gradient through its zero weight becomes 0 * inf = NaN for every parameter. + Overwriting its state and covariance with the dominant component's keeps all + values finite; the likelihood is unchanged and the gradient is exact up to the + underflowed weight. The weights themselves are left untouched. + + Args: + states: Array of shape (n_obs, n_mixtures, n_states). + upper_chols: Array of shape (n_obs, n_mixtures, n_states, n_states). + log_mixture_weights: Array of shape (n_obs, n_mixtures). + + Returns: + states and upper_chols with negligible components replaced. + + """ + log_weights = jax.lax.stop_gradient(log_mixture_weights) + negligible = log_weights < jnp.log(jnp.finfo(log_weights.dtype).tiny) + dominant = jnp.argmax(log_weights, axis=1) + dominant_states = jnp.take_along_axis(states, dominant[:, None, None], axis=1) + dominant_chols = jnp.take_along_axis( + upper_chols, dominant[:, None, None, None], axis=1 + ) + return ( + jnp.where(negligible[..., None], dominant_states, states), + jnp.where(negligible[..., None, None], dominant_chols, upper_chols), + ) + + def calculate_sigma_scaling_factor_and_weights( n_states: int, kappa: float = 2, @@ -167,16 +212,26 @@ def kalman_predict( transition_func: Callable, states: Array, upper_chols: Array, - sigma_scaling_factor: float, + sigma_scaling_factor: float | Array, sigma_weights: Array, trans_coeffs: dict[str, Array], shock_sds: Array, anchoring_scaling_factors: Array, anchoring_constants: Array, observed_factors: Array, + observed_factor_vars: Array | None = None, + *, + missing_observed_indices: tuple[int, ...] = (), ) -> tuple[Array, Array]: """Make a unscented Kalman predict. + Observed factors at `missing_observed_indices` may be missing. They augment + the sigma-point input as extra Gaussian dimensions, independent of the latent + states, with mean `observed_factors` (the fill mean where missing) and + variance `observed_factor_vars` (0 where observed, so observed values pass + through unchanged). The number of sigma points, and hence `sigma_weights`, + is based on `n_latent + len(missing_observed_indices)` for every observation. + Args: transition_func: The transition function. states: Array of shape (n_obs, n_mixtures, n_states) with @@ -200,17 +255,31 @@ def kalman_predict( period, the second to the output period (i.e. input period + 1). observed_factors: Array of shape (n_obs, n_observed_factors) with data on the observed factors in period t. + observed_factor_vars: Array of shape + (n_obs, len(missing_observed_indices)) with the variance of each + possibly-missing observed factor (0 where it is observed). + missing_observed_indices: Positions (among the observed factors) of the + observed factors that may be missing. Returns: jax.numpy.array: Predicted states, same shape as states. jax.numpy.array: Predicted upper_chols, same shape as upper_chols. """ + if missing_observed_indices: + states, upper_chols = _augment_by_missing_observed_factors( + states=states, + upper_chols=upper_chols, + observed_factors=observed_factors, + observed_factor_vars=observed_factor_vars, + missing_observed_indices=missing_observed_indices, + ) sigma_points = _calculate_sigma_points( states=states, upper_chols=upper_chols, scaling_factor=sigma_scaling_factor, observed_factors=observed_factors, + missing_observed_indices=missing_observed_indices, ) transformed = transform_sigma_points( sigma_points=sigma_points, @@ -240,17 +309,19 @@ def linear_kalman_predict( transition_func: Callable | None, # noqa: ARG001 states: Array, upper_chols: Array, - sigma_scaling_factor: float, # noqa: ARG001 + sigma_scaling_factor: float | Array, # noqa: ARG001 sigma_weights: Array, # noqa: ARG001 trans_coeffs: dict[str, Array], shock_sds: Array, anchoring_scaling_factors: Array, anchoring_constants: Array, observed_factors: Array, + observed_factor_vars: Array | None = None, *, latent_factors: tuple[str, ...], constant_factor_indices: frozenset[int], n_all_factors: int, + missing_observed_indices: tuple[int, ...] = (), ) -> tuple[Array, Array]: """Make a linear Kalman predict (square-root form). @@ -262,6 +333,13 @@ def linear_kalman_predict( `sigma_weights` are accepted for signature compatibility with `kalman_predict` but are ignored. + Observed factors at `missing_observed_indices` may be missing, in which case + they are `N(m, v)` independent of the latent states, with `m` given in + `observed_factors` and `v` in `observed_factor_vars`. The prediction is exact: + the mean uses `m`, and the covariance adds `B diag(v) B'` with `B` the + unanchored coefficients of those factors, so the cross-covariance induced by + the same factor entering several equations is kept. + Args: transition_func: Ignored (kept for signature compatibility). states: Array of shape (n_obs, n_mixtures, n_states). @@ -273,9 +351,14 @@ def linear_kalman_predict( anchoring_scaling_factors: Array of shape (2, n_states). anchoring_constants: Array of shape (2, n_states). observed_factors: Array of shape (n_obs, n_observed_factors). + observed_factor_vars: Array of shape + (n_obs, len(missing_observed_indices)) with the variance of each + possibly-missing observed factor (0 where it is observed). latent_factors: Tuple of latent factor names. constant_factor_indices: Indices of factors with `constant` transition. n_all_factors: Total number of factors (latent + observed). + missing_observed_indices: Positions (among the observed factors) of the + observed factors that may be missing. Returns: Predicted states, same shape as states. @@ -315,9 +398,23 @@ def linear_kalman_predict( chol_g = upper_chols @ g_mat.T # (n_obs, n_mix, n_latent, n_latent) shock_diag = jnp.diag(shock_sds / s_out) # (n_latent, n_latent) - stack = jnp.concatenate( - [chol_g, jnp.broadcast_to(shock_diag, chol_g.shape)], axis=-2 - ) # (n_obs, n_mix, 2*n_latent, n_latent) + blocks = [chol_g, jnp.broadcast_to(shock_diag, chol_g.shape)] + if missing_observed_indices: + if observed_factor_vars is None: + msg = "observed_factor_vars is required with missing_observed_indices." + raise ValueError(msg) + # Row j is sqrt(v_j) * B[:, j], so the rows add B diag(v) B' to the cov. + b_missing = f_mat[:, n_latent + jnp.array(missing_observed_indices)] + b_missing = b_missing / s_out[:, jnp.newaxis] # (n_latent, n_missing) + # Promote before the root: loader moments are float32, while the + # covariance factor can be float64. A later cast cannot undo root rounding. + missing_sds = jnp.sqrt(observed_factor_vars.astype(chol_g.dtype)) + rows = missing_sds[..., jnp.newaxis] * b_missing.T + blocks.append( + jnp.broadcast_to(rows[:, jnp.newaxis], (n_obs, n_mix, *b_missing.T.shape)) + ) + # Stack shape is (n_obs, n_mix, 2 * n_latent + n_missing, n_latent). + stack = jnp.concatenate(blocks, axis=-2) predicted_covs = array_qr_jax(stack)[1][:, :, :n_latent] @@ -374,8 +471,9 @@ def _build_f_and_c( def _calculate_sigma_points( states: Array, upper_chols: Array, - scaling_factor: float, + scaling_factor: float | Array, observed_factors: Array, + missing_observed_indices: tuple[int, ...] = (), ) -> Array: """Calculate the array of sigma_points for the unscented transform. @@ -390,6 +488,9 @@ def _calculate_sigma_points( the sigma_point algorithm chosen. observed_factors: Array of shape (n_obs, n_observed_factors) with data on the observed factors in period t. + missing_observed_indices: Positions (among the observed factors) of the + observed factors held in the trailing `len(missing_observed_indices)` + entries of `states`. Their sigma-point values replace the data. Returns: jax.numpy.array: Array of shape n_obs, n_mixtures, n_sigma, n_fac (where n_sigma @@ -399,6 +500,7 @@ def _calculate_sigma_points( n_obs, n_mixtures, n_fac = states.shape n_sigma = 2 * n_fac + 1 n_observed = observed_factors.shape[1] + n_missing = len(missing_observed_indices) scaled_upper_chols = upper_chols * scaling_factor sigma_points = jnp.repeat(states, n_sigma, axis=1).reshape( @@ -414,10 +516,62 @@ def _calculate_sigma_points( observed_factors[:, jnp.newaxis, jnp.newaxis, :], (n_obs, n_mixtures, n_sigma, n_observed), ) + if n_missing: + # Promote first: observed factors are stored as float32, and writing the + # float64 sigma-point values into them would round those values. + observed_part = observed_part.astype(sigma_points.dtype) + observed_part = observed_part.at[..., jnp.array(missing_observed_indices)].set( + sigma_points[..., n_fac - n_missing :] + ) + sigma_points = sigma_points[..., : n_fac - n_missing] return jnp.concatenate([sigma_points, observed_part], axis=-1) +def _augment_by_missing_observed_factors( + states: Array, + upper_chols: Array, + observed_factors: Array, + observed_factor_vars: Array | None, + missing_observed_indices: tuple[int, ...], +) -> tuple[Array, Array]: + """Append possibly-missing observed factors as independent Gaussian states. + + Args: + states: Array of shape (n_obs, n_mixtures, n_latent). + upper_chols: Array of shape (n_obs, n_mixtures, n_latent, n_latent). + observed_factors: Array of shape (n_obs, n_observed_factors) with the fill + mean where a factor is missing. + observed_factor_vars: Array of shape (n_obs, n_missing) with the fill + variance where a factor is missing and 0 where it is observed. + missing_observed_indices: Positions of the possibly-missing factors among + the observed factors. + + Returns: + Augmented states of shape (n_obs, n_mixtures, n_latent + n_missing) and + block-diagonal upper Cholesky factors of matching shape. + + """ + if observed_factor_vars is None: + msg = "observed_factor_vars is required with missing_observed_indices." + raise ValueError(msg) + n_obs, n_mixtures, n_latent = states.shape + n_missing = len(missing_observed_indices) + n_aug = n_latent + n_missing + means = observed_factors[:, jnp.array(missing_observed_indices)] + aug_states = jnp.concatenate( + [states, jnp.broadcast_to(means[:, None], (n_obs, n_mixtures, n_missing))], + axis=-1, + ) + # Preserve the covariance-factor precision during the root, not just scatter. + sds = jnp.sqrt(observed_factor_vars.astype(upper_chols.dtype)) + aug_chols = jnp.zeros((n_obs, n_mixtures, n_aug, n_aug), dtype=upper_chols.dtype) + aug_chols = aug_chols.at[..., :n_latent, :n_latent].set(upper_chols) + diag = jnp.arange(n_latent, n_aug) + aug_chols = aug_chols.at[..., diag, diag].set(sds[:, None, :]) + return aug_states, aug_chols + + def transform_sigma_points( sigma_points: Array, transition_func: Callable, @@ -427,6 +581,14 @@ def transform_sigma_points( ) -> Array: """Anchor sigma points, transform them and unanchor the transformed sigma points. + Thin sigma-points-shape wrapper around + `skillmodels.common.transitions.apply_anchored_transition`: flattens + `(n_obs, n_mixtures, n_sigma, n_fac)` to `(N, n_fac)` for the + common-core anchor → transition → unanchor pipeline, then restores + the sigma-points layout for the UKF caller. Code paths that don't + care about sigma-points layout (e.g. `simulate_dataset`) should + call `apply_anchored_transition` directly. + Args: sigma_points: Array of shape n_obs, n_mixtures, n_sigma, n_fac. transition_func: The transition function. @@ -438,24 +600,19 @@ def transform_sigma_points( constants for anchoring. The first row corresponds to the input period, the second to the output period (i.e. input period + 1). - Returns: + Return: jax.numpy.array: Array of shape n_obs, n_mixtures, n_sigma, n_fac (where n_sigma equals 2 * n_fac + 1) with transformed sigma points. """ n_obs, n_mixtures, n_sigma, n_fac = sigma_points.shape - flat_sigma_points = sigma_points.reshape(-1, n_fac) - - anchored = flat_sigma_points * anchoring_scaling_factors[0] + anchoring_constants[0] - - transformed_anchored = transition_func(trans_coeffs, anchored) - - n_observed = transformed_anchored.shape[-1] - - transformed_unanchored = ( - transformed_anchored - anchoring_constants[1][:n_observed] - ) / anchoring_scaling_factors[1][:n_observed] + transformed_unanchored = apply_anchored_transition( + states=sigma_points.reshape(-1, n_fac), + transition_func=transition_func, + trans_coeffs=trans_coeffs, + anchoring_scaling_factors=anchoring_scaling_factors, + anchoring_constants=anchoring_constants, + ) - out_shape = (n_obs, n_mixtures, n_sigma, -1) - return transformed_unanchored.reshape(out_shape) + return transformed_unanchored.reshape((n_obs, n_mixtures, n_sigma, -1)) diff --git a/src/skillmodels/kalman_filters_debug.py b/src/skillmodels/chs/kalman_filters_debug.py similarity index 93% rename from src/skillmodels/kalman_filters_debug.py rename to src/skillmodels/chs/kalman_filters_debug.py index 230b768d..27d49665 100644 --- a/src/skillmodels/kalman_filters_debug.py +++ b/src/skillmodels/chs/kalman_filters_debug.py @@ -6,6 +6,8 @@ import jax.numpy as jnp from jax import Array +from skillmodels.chs.kalman_filters import reset_negligible_mixture_components + array_qr_jax = jax.vmap(jax.vmap(jnp.linalg.qr)) @@ -14,7 +16,7 @@ def kalman_update( upper_chols: Array, loadings: Array, control_params: Array, - meas_sd: float, + meas_sd: float | Array, measurements: Array, controls: Array, log_mixture_weights: Array, @@ -118,6 +120,13 @@ def kalman_update( log_mixture_weights, ) + if n_mixtures >= 2: + new_states, new_upper_chols = reset_negligible_mixture_components( + states=new_states, + upper_chols=new_upper_chols, + log_mixture_weights=new_log_mixture_weights, + ) + debug_info = {} residuals = jnp.where(not_missing.reshape(n_obs, 1), _residuals, jnp.nan) debug_info["residuals"] = residuals diff --git a/src/skillmodels/likelihood_function.py b/src/skillmodels/chs/likelihood.py similarity index 83% rename from src/skillmodels/likelihood_function.py rename to src/skillmodels/chs/likelihood.py index ee89f016..463bf7b9 100644 --- a/src/skillmodels/likelihood_function.py +++ b/src/skillmodels/chs/likelihood.py @@ -6,14 +6,15 @@ import jax import jax.numpy as jnp +import numpy as np from jax import Array -from skillmodels.clipping import soft_clipping -from skillmodels.kalman_filters import kalman_update -from skillmodels.parse_params import parse_params -from skillmodels.types import ( +from skillmodels.chs.clipping import soft_clipping +from skillmodels.chs.kalman_filters import kalman_update +from skillmodels.chs.options import CHSEstimationOptions +from skillmodels.common.parse_params import parse_params +from skillmodels.common.types import ( Dimensions, - EstimationOptions, Labels, ParsedParams, ParsingInfo, @@ -23,18 +24,19 @@ def log_likelihood( params: Array, parsing_info: ParsingInfo, - measurements: Array, + measurements: Array | np.ndarray, controls: Array, predict_func: Callable, - sigma_scaling_factor: float, + sigma_scaling_factor: float | Array, sigma_weights: Array, dimensions: Dimensions, labels: Labels, - estimation_options: EstimationOptions, - is_measurement_iteration: Array, - is_predict_iteration: Array, - iteration_to_period: Array, - observed_factors: Array, + chs_estimation_options: CHSEstimationOptions, + is_measurement_iteration: Array | np.ndarray, + is_predict_iteration: Array | np.ndarray, + iteration_to_period: Array | np.ndarray, + observed_factors: Array | np.ndarray, + observed_factor_vars: Array | np.ndarray, ) -> Array: """Aggregated log likelihood of a skill formation model. @@ -57,7 +59,7 @@ def log_likelihood( n_mixtures. labels: Labels for the model quantities like factors, periods, controls, stagemap and stages. - estimation_options: Options for estimation including clipping bounds. + chs_estimation_options: Options for estimation including clipping bounds. is_measurement_iteration: Boolean array indicating which iterations are measurement updates. is_predict_iteration: Boolean array indicating which iterations are predict @@ -65,6 +67,9 @@ def log_likelihood( iteration_to_period: Array mapping iteration index to period. observed_factors: Array of shape (n_periods, n_obs, n_observed_factors) with data on the observed factors. + observed_factor_vars: Array of shape (n_periods, n_obs, n_missing) with + the variance of each possibly-missing observed factor (0 where it is + observed). Returns: Scalar aggregated log likelihood. @@ -80,29 +85,31 @@ def log_likelihood( sigma_weights=sigma_weights, dimensions=dimensions, labels=labels, - estimation_options=estimation_options, + chs_estimation_options=chs_estimation_options, is_measurement_iteration=is_measurement_iteration, is_predict_iteration=is_predict_iteration, iteration_to_period=iteration_to_period, observed_factors=observed_factors, + observed_factor_vars=observed_factor_vars, ).sum() def log_likelihood_obs( params: Array, parsing_info: ParsingInfo, - measurements: Array, + measurements: Array | np.ndarray, controls: Array, predict_func: Callable, - sigma_scaling_factor: float, + sigma_scaling_factor: float | Array, sigma_weights: Array, dimensions: Dimensions, labels: Labels, - estimation_options: EstimationOptions, - is_measurement_iteration: Array, - is_predict_iteration: Array, - iteration_to_period: Array, - observed_factors: Array, + chs_estimation_options: CHSEstimationOptions, + is_measurement_iteration: Array | np.ndarray, + is_predict_iteration: Array | np.ndarray, + iteration_to_period: Array | np.ndarray, + observed_factors: Array | np.ndarray, + observed_factor_vars: Array | np.ndarray, ) -> Array: """Log likelihood of a skill formation model. @@ -134,7 +141,7 @@ def log_likelihood_obs( n_mixtures. See :ref:`dimensions`. labels: Dict of lists with labels for the model quantities like factors, periods, controls, stagemap and stages. See :ref:`labels` - estimation_options: Options for estimation including clipping bounds. + chs_estimation_options: Options for estimation including clipping bounds. is_measurement_iteration: Boolean array indicating which iterations are measurement updates. is_predict_iteration: Boolean array indicating which @@ -142,6 +149,9 @@ def log_likelihood_obs( iteration_to_period: Array mapping iteration index to period. observed_factors: Array of shape (n_periods, n_obs, n_observed_factors) with data on the observed factors. + observed_factor_vars: Array of shape (n_periods, n_obs, n_missing) with + the variance of each possibly-missing observed factor (0 where it is + observed). Returns: jnp.array: 1d array of length N, the aggregated log likelihood. @@ -180,6 +190,7 @@ def log_likelihood_obs( sigma_weights=sigma_weights, predict_func=predict_func, observed_factors=observed_factors, + observed_factor_vars=observed_factor_vars, ) _body = jax.checkpoint(_body, prevent_cse=False) static_out = jax.lax.scan(_body, carry, loop_args, unroll=False)[1] @@ -188,10 +199,10 @@ def log_likelihood_obs( # possible. return soft_clipping( arr=static_out["loglikes"], - lower=estimation_options.clipping_lower_bound, - upper=estimation_options.clipping_upper_bound, - lower_hardness=estimation_options.clipping_lower_hardness, - upper_hardness=estimation_options.clipping_upper_hardness, + lower=chs_estimation_options.clipping_lower_bound, + upper=chs_estimation_options.clipping_upper_bound, + lower_hardness=chs_estimation_options.clipping_lower_hardness, + upper_hardness=chs_estimation_options.clipping_upper_hardness, ).sum(axis=0) @@ -200,10 +211,11 @@ def _scan_body( loop_args: dict[str, Array], controls: Array, parsed_params: ParsedParams, - sigma_scaling_factor: float, + sigma_scaling_factor: float | Array, sigma_weights: Array, predict_func: Callable, - observed_factors: Array, + observed_factors: Array | np.ndarray, + observed_factor_vars: Array | np.ndarray, ) -> tuple[dict[str, Array], dict[str, Array]]: # ================================================================================== # create arguments needed for update @@ -249,6 +261,7 @@ def _scan_body( ], "anchoring_constants": parsed_params.anchoring_constants[jnp.array([t, t + 1])], "observed_factors": observed_factors[t], + "observed_factor_vars": observed_factor_vars[t], } fixed_kwargs = {"predict_func": predict_func} diff --git a/src/skillmodels/likelihood_function_debug.py b/src/skillmodels/chs/likelihood_debug.py similarity index 85% rename from src/skillmodels/likelihood_function_debug.py rename to src/skillmodels/chs/likelihood_debug.py index 6391695a..862cf845 100644 --- a/src/skillmodels/likelihood_function_debug.py +++ b/src/skillmodels/chs/likelihood_debug.py @@ -6,14 +6,15 @@ import jax import jax.numpy as jnp +import numpy as np from jax import Array -from skillmodels.clipping import soft_clipping -from skillmodels.kalman_filters_debug import kalman_update -from skillmodels.parse_params import parse_params -from skillmodels.types import ( +from skillmodels.chs.clipping import soft_clipping +from skillmodels.chs.kalman_filters_debug import kalman_update +from skillmodels.chs.options import CHSEstimationOptions +from skillmodels.common.parse_params import parse_params +from skillmodels.common.types import ( Dimensions, - EstimationOptions, Labels, ParsedParams, ParsingInfo, @@ -23,18 +24,19 @@ def log_likelihood( params: Array, parsing_info: ParsingInfo, - measurements: Array, + measurements: Array | np.ndarray, controls: Array, predict_func: Callable[..., tuple[Array, Array]], - sigma_scaling_factor: float, + sigma_scaling_factor: float | Array, sigma_weights: Array, dimensions: Dimensions, labels: Labels, - estimation_options: EstimationOptions, - is_measurement_iteration: Array, - is_predict_iteration: Array, - iteration_to_period: Array, - observed_factors: Array, + chs_estimation_options: CHSEstimationOptions, + is_measurement_iteration: Array | np.ndarray, + is_predict_iteration: Array | np.ndarray, + iteration_to_period: Array | np.ndarray, + observed_factors: Array | np.ndarray, + observed_factor_vars: Array | np.ndarray, ) -> dict[str, Any]: """Log likelihood of a skill formation model, returning debug data on top. @@ -56,7 +58,7 @@ def log_likelihood( n_mixtures. labels: Labels for the model quantities like factors, periods, controls, stagemap and stages. - estimation_options: Options for estimation including clipping bounds. + chs_estimation_options: Options for estimation including clipping bounds. is_measurement_iteration: Boolean array indicating which iterations are measurement updates. is_predict_iteration: Boolean array indicating which iterations are predict @@ -64,6 +66,9 @@ def log_likelihood( iteration_to_period: Array mapping iteration index to period. observed_factors: Array of shape (n_periods, n_obs, n_observed_factors) with data on the observed factors. + observed_factor_vars: Array of shape (n_periods, n_obs, n_missing) with + the variance of each possibly-missing observed factor (0 where it is + observed). Returns: All data relevant for debugging, e.g. the log likelihood contribution of @@ -103,6 +108,7 @@ def log_likelihood( sigma_weights=sigma_weights, predict_func=predict_func, observed_factors=observed_factors, + observed_factor_vars=observed_factor_vars, ) static_out = jax.lax.scan(_body, carry, loop_args)[1] @@ -111,10 +117,10 @@ def log_likelihood( # possible. clipped = soft_clipping( arr=static_out["loglikes"], - lower=estimation_options.clipping_lower_bound, - upper=estimation_options.clipping_upper_bound, - lower_hardness=estimation_options.clipping_lower_hardness, - upper_hardness=estimation_options.clipping_upper_hardness, + lower=chs_estimation_options.clipping_lower_bound, + upper=chs_estimation_options.clipping_upper_bound, + lower_hardness=chs_estimation_options.clipping_lower_hardness, + upper_hardness=chs_estimation_options.clipping_upper_hardness, ) value = clipped.sum() @@ -151,10 +157,11 @@ def _scan_body( loop_args: dict[str, Array], controls: Array, parsed_params: ParsedParams, - sigma_scaling_factor: float, + sigma_scaling_factor: float | Array, sigma_weights: Array, predict_func: Callable[..., tuple[Array, Array]], - observed_factors: Array, + observed_factors: Array | np.ndarray, + observed_factor_vars: Array | np.ndarray, ) -> tuple[dict[str, Array], dict[str, Any]]: # ================================================================================== # create arguments needed for update @@ -200,6 +207,7 @@ def _scan_body( ], "anchoring_constants": parsed_params.anchoring_constants[jnp.array([t, t + 1])], "observed_factors": observed_factors[t], + "observed_factor_vars": observed_factor_vars[t], } fixed_kwargs = {"predict_func": predict_func} diff --git a/src/skillmodels/chs/maximization_inputs.py b/src/skillmodels/chs/maximization_inputs.py new file mode 100644 index 00000000..e51cc2ff --- /dev/null +++ b/src/skillmodels/chs/maximization_inputs.py @@ -0,0 +1,545 @@ +"""Functions to create inputs for optimization of the log-likelihood.""" + +import functools +import warnings +from collections.abc import Callable +from types import MappingProxyType +from typing import Any + +import jax +import jax.numpy as jnp +import numpy as np +import pandas as pd +from beartype import beartype +from jax import Array +from numpy.typing import NDArray + +import skillmodels.chs.likelihood as lf +import skillmodels.chs.likelihood_debug as lfd +from skillmodels._beartype_conf import ESTIMATION_CONF +from skillmodels.amn.estimate import estimate_amn +from skillmodels.amn.mixture_em import InsufficientCompleteCasesError +from skillmodels.amn.start_values import ( + get_amn_start_params, + get_spearman_start_params, +) +from skillmodels.amn.types import AMNEstimationOptions, AMNEstimationResult +from skillmodels.chs.kalman_filters import ( + calculate_sigma_scaling_factor_and_weights, + is_all_linear, + kalman_predict, + linear_kalman_predict, +) +from skillmodels.chs.options import CHSEstimationOptions +from skillmodels.chs.process_debug_data import process_debug_data +from skillmodels.common.constraints import ( + FixedConstraintWithValue, + add_bounds, + align_index_names, + enforce_fixed_constraints, + get_constraints, + project_to_probability_constraints, +) +from skillmodels.common.measurement_models import GaussianMeasurement +from skillmodels.common.model_spec import ModelSpec +from skillmodels.common.params_index import get_params_index +from skillmodels.common.parse_params import create_parsing_info +from skillmodels.common.process_data import process_data +from skillmodels.common.process_model import process_model +from skillmodels.common.types import ParsingInfo, ProcessedModel + +jax.config.update("jax_enable_x64", True) # noqa: FBT003 + + +@beartype(conf=ESTIMATION_CONF) +def get_maximization_inputs( # noqa: C901, PLR0915 + model_spec: ModelSpec, + data: pd.DataFrame, + *, + chs_options: CHSEstimationOptions, + fixed_params: pd.DataFrame | None = None, +) -> dict[str, Any]: + """Create inputs for optimagic's maximize function. + + Args: + model_spec: The model specification. See: :ref:`model_specs` + data: Dataset in long format. + chs_options: CHS-specific tuning parameters. Its `start_params_strategy` + decides how the `params_template` values are seeded; pass + `CHSEstimationOptions(start_params_strategy="none")` when only the + likelihood functions or the bare template are needed, since the + `"amn"` strategy runs a full AMN estimation. + fixed_params: Optional DataFrame with a ``"value"`` column pinning + specified parameters to fixed values. Uses the same 4-level + MultiIndex as the returned ``params_template``. Each matching + entry becomes a `FixedConstraintWithValue` in the returned + constraints list, so optimagic holds the parameter at the given + value during optimization. When a fix overlaps a + `ProbabilityConstraint` selector (e.g., a gamma of a ``log_ces`` + transition), optimagic's fold machinery keeps the remaining free + entries on the implied simplex (see + ``optimagic.ProbabilityConstraint``). + + Returns a dictionary with keys: + loglike: A jax jitted function that takes an optimagic-style + params dataframe as only input and returns a dict with entries: + - "value": The scalar log likelihood + - "contributions": An array with the log likelihood per observation + debug_loglike: Similar to loglike, with the following differences: + - It is not jitted and thus faster on the first call and debuggable + - It will add intermediate results as additional entries in the returned + dictionary. Those can be used for debugging and plotting. + gradient: The gradient of the scalar log likelihood + function with respect to the parameters. + loglike_and_gradient: Combination of loglike and + loglike_gradient that is faster than calling the two functions separately. + constraints: List of optimagic constraints that are implied by the + model specification, extended by any user-supplied ``fixed_params``. + params_template: Parameter DataFrame with correct index and + bounds. The value column is empty except for the fixed constraints, which + are set including the bounds. + data_aug: DataFrame with augmented data. If model contains + endogenous factors, we double up the number of periods in order to add + + """ + _fail_if_non_gaussian_measurements(model_spec) + processed_model = process_model(model_spec) + p_index = get_params_index( + update_info=processed_model.update_info, + labels=processed_model.labels, + dimensions=processed_model.dimensions, + transition_info=processed_model.transition_info, + endogenous_factors_info=processed_model.endogenous_factors_info, + ) + + parsing_info = create_parsing_info( + params_index=p_index, + update_info=processed_model.update_info, + labels=processed_model.labels, + anchoring=processed_model.anchoring, + has_endogenous_factors=processed_model.endogenous_factors_info.has_endogenous_factors, + ) + processed_data = process_data( + df=data, + has_endogenous_factors=processed_model.endogenous_factors_info.has_endogenous_factors, + labels=processed_model.labels, + update_info=processed_model.update_info, + anchoring_info=processed_model.anchoring, + purpose="estimation", + ) + + # A physical observed input is repeated in both endogenous half-steps. + # Marginalizing it separately in each half drops its posterior/cross-covariance. + # Until it is carried jointly, reject uncertain inputs in prediction periods. + # The final two augmented rows have no outgoing transition. + if processed_model.endogenous_factors_info.has_endogenous_factors and np.any( + np.asarray(processed_data["observed_factor_vars"][:-2]) > 0 + ): + msg = ( + "CHS endogenous half-steps require a " + "persistent joint missing-observed-factor state for " + "positive-variance missing inputs. " + "This combination is not yet supported; zero-variance fills and " + "complete observed factors remain supported." + ) + raise NotImplementedError(msg) + + # Possibly-missing observed factors augment the sigma-point input. + sigma_scaling_factor, sigma_weights = calculate_sigma_scaling_factor_and_weights( + n_states=processed_model.dimensions.n_latent_factors + + len(processed_data["missing_observed_factors"]), + kappa=chs_options.sigma_points_scale, + ) + + partialed_get_jnp_params_vec = functools.partial( + _get_jnp_params_vec, + target_index=p_index, + ) + + partialed_loglikes = {} + for n, fun in { + "ll": lf.log_likelihood, + "llo": lf.log_likelihood_obs, + "debug_ll": lfd.log_likelihood, + }.items(): + partialed_loglikes[n] = _partial_some_log_likelihood( + fun=fun, + parsing_info=parsing_info, + measurements=processed_data["measurements"], + controls=processed_data["controls"], + observed_factors=processed_data["observed_factors"], + observed_factor_vars=processed_data["observed_factor_vars"], + missing_observed_factors=processed_data["missing_observed_factors"], + model=processed_model, + sigma_weights=sigma_weights, + sigma_scaling_factor=sigma_scaling_factor, + chs_options=chs_options, + ) + + _jitted_loglike = jax.jit(partialed_loglikes["ll"]) + _jitted_loglikeobs = jax.jit(partialed_loglikes["llo"]) + _gradient = jax.jit(jax.grad(partialed_loglikes["ll"])) + + def loglike(params: pd.DataFrame) -> float: + params_vec = partialed_get_jnp_params_vec(params) + return float(_jitted_loglike(params_vec)) + + def loglikeobs(params: pd.DataFrame) -> NDArray[np.floating]: + params_vec = partialed_get_jnp_params_vec(params) + return _to_numpy(_jitted_loglikeobs(params_vec)) + + def loglike_and_gradient( + params: pd.DataFrame, + ) -> tuple[float, NDArray[np.floating]]: + params_vec = partialed_get_jnp_params_vec(params) + crit = float(_jitted_loglike(params_vec)) + n_obs = processed_data["measurements"].shape[1] + _grad = jnp.zeros_like(params_vec) + start = 0 + split_dataset = chs_options.split_dataset + stop = int(n_obs / split_dataset) + step = int(n_obs / split_dataset) + for i in range(split_dataset): + stop = n_obs if i == split_dataset - 1 else stop + measurements_slice = processed_data["measurements"][:, start:stop] + controls_slice = processed_data["controls"][:, start:stop, :] + observed_factors_slice = processed_data["observed_factors"][ + :, start:stop, : + ] + _grad += _gradient( + params_vec, + measurements=measurements_slice, + controls=controls_slice, + observed_factors=observed_factors_slice, + observed_factor_vars=processed_data["observed_factor_vars"][ + :, start:stop, : + ], + ) + start += step + stop += step + grad = _to_numpy(_grad) + if not (np.isfinite(crit) and np.isfinite(grad).all()): + # Raise rather than return, so `error_handling="continue"` can replace + # the point by a penalty that rejects the step. + msg = ( + f"The log-likelihood ({crit}) or its gradient " + f"({int((~np.isfinite(grad)).sum())} entries) is non-finite." + ) + raise FloatingPointError(msg) + return crit, grad + + def debug_loglike(params: pd.DataFrame) -> dict[str, Any]: + params_vec = partialed_get_jnp_params_vec(params) + jax_output = partialed_loglikes["debug_ll"](params_vec) + tmp = _to_numpy(jax_output) + tmp["value"] = float(tmp["value"]) + return process_debug_data(debug_data=tmp, model=processed_model) + + constraints = get_constraints( + dimensions=processed_model.dimensions, + labels=processed_model.labels, + anchoring_info=processed_model.anchoring, + update_info=processed_model.update_info, + normalizations=processed_model.normalizations, + endogenous_factors_info=processed_model.endogenous_factors_info, + bounds_distance=chs_options.bounds_distance, + ) + + if fixed_params is not None: + fixed_constraints = _build_fixed_constraints_from_params( + fixed_params, params_index=p_index + ) + constraints = list(constraints) + fixed_constraints + + params_template = pd.DataFrame(columns=["value"], index=p_index) + params_template = add_bounds( + params=params_template, + bounds_distance=chs_options.bounds_distance, + ) + params_template = enforce_fixed_constraints( + params_template=params_template, + constraints=constraints, + ) + if not params_template.index.equals(p_index): + raise ValueError("params_template index is not equal to p_index") + + strategy = chs_options.start_params_strategy + if strategy == "spearman": + params_template = get_spearman_start_params( + model_spec=model_spec, + data=data, + params_template=params_template, + ) + elif strategy == "amn": + amn_result = _estimate_amn_for_chs_seeding(model_spec=model_spec, data=data) + params_template = get_amn_start_params( + model_spec=model_spec, + data=data, + params_template=params_template, + amn_params=amn_result.params, + ) + + params_template = project_to_probability_constraints( + params_template=params_template, constraints=constraints + ) + if strategy in ("spearman", "amn"): + _fail_if_start_params_incomplete(params_template) + + return { + "loglike": loglike, + "loglikeobs": loglikeobs, + "debug_loglike": debug_loglike, + "loglike_and_gradient": loglike_and_gradient, + "constraints": constraints, + "params_template": params_template, + } + + +def _fail_if_non_gaussian_measurements(model_spec: ModelSpec) -> None: + """Reject probit/Tobit measures: the CHS update is a Gaussian Kalman update. + + Such a measure would otherwise be silently estimated as a continuous Gaussian one. + """ + non_gaussian = sorted( + name + for name, model in model_spec.measurement_models.items() + if not isinstance(model, GaussianMeasurement) + ) + if non_gaussian: + msg = ( + f"CHS supports only Gaussian measurements, but {non_gaussian} are " + "non-Gaussian (probit/Tobit). The CHS likelihood runs a Gaussian Kalman " + "update for every measurement. Declare them Gaussian (a linear " + "probability / linear working model) or use estimate_af, which honours " + "probit/Tobit families in the initial period." + ) + raise NotImplementedError(msg) + + +def _estimate_amn_for_chs_seeding( + model_spec: ModelSpec, + data: pd.DataFrame, +) -> AMNEstimationResult: + """Estimate AMN to seed CHS, falling back to the missing-data EM if needed. + + Tries the fast complete-case Stage-1 mixture (the standalone default). On an + unbalanced panel with too few complete cases it retries explicitly with the + missing-data EM under a seed-sized budget (one restart, capped iterations, + capped rows). The fallback lives here, in the seeding caller, rather than + inside `estimate_amn`, so the standalone estimator keeps one honest interface + -- complete-case by default, raising when that is infeasible. + + `linearize_control_function=True` fits only the linear `cf` term even for + higher-order (translog) kappa bases; the higher-order kappa terms then take + their small start defaults. + """ + # Cap the Stage-2 minimum-distance iterations: with the exact JAX gradient + # each step is cheap, but a seed does not need full convergence, and the + # cap bounds the cost on a large factor-period block. + seed_md_options = MappingProxyType({"stopping_maxiter": 500}) + try: + return estimate_amn( + model_spec=model_spec, + data=data, + options=AMNEstimationOptions( + mixture_em_method="complete_case", + optimizer_options=seed_md_options, + ), + linearize_control_function=True, + for_start_values=True, + ) + except InsufficientCompleteCasesError: + warnings.warn( + "AMN start-value seeding: too few complete cases for the complete-case " + "Stage-1 mixture (unbalanced panel). Falling back to the missing-data " + "EM under a seed-sized budget (1 restart, <=100 iterations, <=3000 " + "rows).", + RuntimeWarning, + stacklevel=2, + ) + return estimate_amn( + model_spec=model_spec, + data=data, + options=AMNEstimationOptions( + mixture_em_method="missing_data", + em_n_init=1, + em_max_iter=100, + mixture_em_max_rows=3000, + optimizer_options=seed_md_options, + # This fit only seeds estimate_chs, which re-fits every parameter + # from the data; the row cap can drop every observation of a rare + # measurement, so tolerate never-observed columns with a neutral + # seed rather than crashing the seeding step. + allow_never_observed_measurements=True, + ), + linearize_control_function=True, + for_start_values=True, + ) + + +def _fail_if_start_params_incomplete(params_template: pd.DataFrame) -> None: + """Fail early if a seeded start point has any missing or non-finite value. + + A `"spearman"` or `"amn"` strategy must hand the optimiser a complete, finite + start point. optimagic otherwise rejects it with an opaque error downstream, + so surface the exact offending parameter rows here, where the seeding ran. + """ + value = params_template["value"].to_numpy(dtype=float) + bad_mask = ~np.isfinite(value) + if bad_mask.any(): + bad = params_template.index[bad_mask] + shown = ", ".join(str(tuple(loc)) for loc in bad[:10]) + more = "" if len(bad) <= 10 else f" (+{len(bad) - 10} more)" + msg = ( + f"Start-value seeding left {len(bad)} parameter(s) without a finite " + f"value: {shown}{more}. This start point is infeasible for " + "estimation; check start_params_strategy and the model spec." + ) + raise ValueError(msg) + + +def _build_fixed_constraints_from_params( + fixed_params: pd.DataFrame, + params_index: pd.MultiIndex, +) -> list[FixedConstraintWithValue]: + """Convert a user-provided ``fixed_params`` DataFrame into constraints. + + Each matching row becomes a ``FixedConstraintWithValue`` so optimagic + can treat user fixes uniformly with model-implied fixes (normalisations, + anchoring, augmented periods, ...). Entries whose index is not in + ``params_index`` are ignored. + + Users typically key `fixed_params` by the public-facing `period` + level name, while `params_index` uses `aug_period` internally. + `MultiIndex.intersection` silently returns an empty index when + the operands' level names differ, so the level names are + normalised first via `align_index_names`. + """ + aligned = align_index_names(fixed_params, target_names=params_index.names) + common = params_index.intersection(aligned.index) + return [ + FixedConstraintWithValue( + loc=idx, + value=float(aligned.loc[idx, "value"]), + ) + for idx in common + ] + + +def _partial_some_log_likelihood( + fun: Callable, + parsing_info: ParsingInfo, + measurements: Array, + controls: Array, + observed_factors: Array, + observed_factor_vars: Array, + missing_observed_factors: tuple[str, ...], + model: ProcessedModel, + sigma_weights: Array, + sigma_scaling_factor: Array, + chs_options: CHSEstimationOptions, +) -> Callable: + update_info = model.update_info + is_measurement_iteration = (update_info["purpose"] == "measurement").to_numpy() + _aug_periods = pd.Series( + update_info.index.get_level_values("aug_period").to_numpy() + ) + is_predict_iteration = ((_aug_periods - _aug_periods.shift(-1)) == -1).to_numpy() + # iteration_to_period is used as an indexer to loop over arrays of different lengths + # in a jax.lax.scan. It needs to work for arrays of length n_aug_periods and not + # raise IndexErrors on tracer arrays of length n_aug_periods - 1 (i.e. + # n_transitions). To achieve that, we replace the last aug_period by -1. If there + # are endogenous factors, the last aug_period is found at index -2 (there should not + # be measurements for endogenous factors in the "second half" of the last period). + # Augmented-period timing: real period p -> even aug_period 2p (states half) + # and odd 2p+1 (endogenous half). The investment level and its first-stage + # prediction are produced at the same odd aug_period, so cf is a same-period + # residual; transition[t] steps t->t+1, so cf formed at odd t enters theta at + # t+1. With endogenous factors the terminal aug_period is aug_periods[-2], + # dropping the non-existent final production transition rather than applying + # one into a non-existent period. + last_aug_period = ( + model.labels.aug_periods[-2] + if parsing_info.has_endogenous_factors + else model.labels.aug_periods[-1] + ) + iteration_to_period = _aug_periods.replace(last_aug_period, -1).to_numpy() + if max(iteration_to_period) != last_aug_period - 1: + raise ValueError("Unexpected iteration_to_period configuration") + + # A control function makes the production equation non-linear in the raw + # states (cf is a non-linear function of the latent states), so the linear + # fast-path would silently bypass the cf DAG node. Force the unscented path. + has_control_function = model.endogenous_factors_info.control_function is not None + missing_observed_indices = tuple( + model.labels.observed_factors.index(f) for f in missing_observed_factors + ) + if is_all_linear(model.transition_info.function_names) and not has_control_function: + constant_factor_indices = frozenset( + i + for i, f in enumerate(model.labels.latent_factors) + if model.transition_info.function_names[f] == "constant" + ) + predict_func = functools.partial( + linear_kalman_predict, + model.transition_info.func, + latent_factors=model.labels.latent_factors, + constant_factor_indices=constant_factor_indices, + n_all_factors=model.dimensions.n_all_factors, + missing_observed_indices=missing_observed_indices, + ) + else: + predict_func = functools.partial( + kalman_predict, + model.transition_info.func, + missing_observed_indices=missing_observed_indices, + ) + + return functools.partial( + fun, + parsing_info=parsing_info, + measurements=measurements, + controls=controls, + predict_func=predict_func, + sigma_scaling_factor=sigma_scaling_factor, + sigma_weights=sigma_weights, + dimensions=model.dimensions, + labels=model.labels, + chs_estimation_options=chs_options, + is_measurement_iteration=is_measurement_iteration, + is_predict_iteration=is_predict_iteration, + iteration_to_period=iteration_to_period, + observed_factors=observed_factors, + observed_factor_vars=observed_factor_vars, + ) + + +def _to_numpy(obj: Any) -> Any: # noqa: ANN401 + if isinstance(obj, dict): + res = {} + for key, value in obj.items(): + if np.isscalar(value): + res[key] = value + else: + res[key] = np.array(value) + + elif np.isscalar(obj): + res = obj + else: + res = np.array(obj) + + return res + + +def _get_jnp_params_vec(params: pd.DataFrame, target_index: pd.MultiIndex) -> Array: + if set(params.index) != set(target_index): + additional_entries = params.index.difference(target_index).tolist() + missing_entries = target_index.difference(params.index).tolist() + msg = "Invalid params DataFrame. " + if additional_entries: + msg += f"Your params have additional entries: {additional_entries}. " + if missing_entries: + msg += f"Your params have missing entries: {missing_entries}. " + raise ValueError(msg) + + return jnp.array(params.reindex(target_index)["value"].to_numpy()) diff --git a/src/skillmodels/chs/options.py b/src/skillmodels/chs/options.py new file mode 100644 index 00000000..f8058df1 --- /dev/null +++ b/src/skillmodels/chs/options.py @@ -0,0 +1,99 @@ +"""CHS-specific estimation options.""" + +from collections.abc import Mapping +from dataclasses import dataclass, field +from types import MappingProxyType +from typing import Any, Literal + +from skillmodels._beartype_conf import OPTIONS_CONF, beartype_init +from skillmodels.common.types import ensure_containers_are_immutable + + +@beartype_init(OPTIONS_CONF) +@dataclass(frozen=True) +class CHSEstimationOptions: + """Tuning parameters for the CHS Kalman-MLE estimator.""" + + robust_bounds: bool = True + """Whether to use robust bounds.""" + bounds_distance: float = 1e-3 + """Distance for bounds. Zeroed out if `robust_bounds` is False.""" + sigma_points_scale: float = 2 + """Scaling factor for sigma points in unscented transform.""" + split_dataset: int = 1 + """Number of slices of the individuals over which the gradient is accumulated. + + More slices lower the peak memory of the gradient; the result is the same.""" + clipping_lower_bound: float = -1e30 + """Lower bound for soft clipping.""" + clipping_upper_bound: float | None = None + """Upper bound for soft clipping (None for no upper bound).""" + clipping_lower_hardness: float = 1 + """Hardness of lower clipping.""" + clipping_upper_hardness: float = 1 + """Hardness of upper clipping.""" + start_params_strategy: Literal["none", "constant", "spearman", "amn"] = "amn" + """How to populate the `value` column of the `params_template`. + + Canonical name shared with `AFEstimationOptions`; the literal set is + unified across the two likelihood estimators. + + `"amn"` (default) runs the full Attanasio-Meghir-Nix (2020) + three-stage estimator and uses its parameter estimates as starting + values for the downstream MLE. `"spearman"` seeds free entries + from Spearman cross-covariance / Bartlett-OLS moments only (fast + but less accurate on non-Gaussian factor distributions). `"none"` + leaves free entries as `NaN` so the caller can fill them. + `"constant"` is accepted for cross-estimator symmetry and, for the + Kalman template, behaves identically to `"none"` (no moment seeding; + the template's default values stand). + """ + + optimizer_algorithm: str = "scipy_lbfgsb" + """`optimagic` algorithm name for the maximisation. + + `estimate_chs` forwards it as `estimate_ml`'s + `optimize_options["algorithm"]` (e.g. `"scipy_lbfgsb"`, `"fides"`).""" + + optimizer_options: Mapping[str, Any] = field( + default_factory=lambda: MappingProxyType({}) + ) + """Algorithm-specific options (`optimize_options["algo_options"]`). + + Forwarded by `estimate_chs` to `estimate_ml` (e.g. convergence + tolerances, trust-region settings for `fides`).""" + + error_handling: Literal["raise", "continue"] = "raise" + """What `optimagic` does when the criterion raises (`optimize_options`). + + The criterion raises whenever the log-likelihood or its gradient is + non-finite. `"raise"` aborts the estimation. `"continue"` replaces that + point by a penalty worse than the start value, so a trust-region step into + a numerically explosive region is rejected and the radius shrinks.""" + + estimate_ml_options: Mapping[str, Any] = field( + default_factory=lambda: MappingProxyType({}) + ) + """Extra keyword arguments forwarded verbatim to `estimagic.estimate_ml`. + + The generic estimagic pass-through for everything beyond the optimiser + knobs above — e.g. `logging` (an `optimagic` log-options object), + `hessian`, `jacobian`, `design_info`. `estimate_chs` defaults + `hessian=False` (OPG/jacobian-based standard errors, since the numerical + Hessian is prohibitively expensive); override it here for the sandwich + covariance. `estimate_chs` manages `loglike`, `params`, `bounds`, + `constraints`, and `optimize_options` itself, so do not set those here.""" + + def __post_init__(self) -> None: # noqa: D105 + if not self.robust_bounds: + object.__setattr__(self, "bounds_distance", 0.0) + object.__setattr__( + self, + "optimizer_options", + ensure_containers_are_immutable(dict(self.optimizer_options)), + ) + object.__setattr__( + self, + "estimate_ml_options", + ensure_containers_are_immutable(dict(self.estimate_ml_options)), + ) diff --git a/src/skillmodels/process_debug_data.py b/src/skillmodels/chs/process_debug_data.py similarity index 79% rename from src/skillmodels/process_debug_data.py rename to src/skillmodels/chs/process_debug_data.py index 770317d5..5cbbe81a 100644 --- a/src/skillmodels/process_debug_data.py +++ b/src/skillmodels/chs/process_debug_data.py @@ -7,7 +7,8 @@ from jax import Array from numpy.typing import NDArray -from skillmodels.types import ProcessedModel +from skillmodels.common.state_ranges import create_state_ranges +from skillmodels.common.types import ProcessedModel def process_debug_data( @@ -109,7 +110,7 @@ def process_debug_data( def _create_post_update_states( - filtered_states: Array, + filtered_states: Array | np.ndarray, factors: tuple[str, ...], update_info: pd.DataFrame, ) -> pd.DataFrame: @@ -128,7 +129,7 @@ def _create_post_update_states( def _convert_state_array_to_df( - arr: NDArray[np.floating[Any]], + arr: NDArray[np.float64], factor_names: tuple[str, ...], ) -> pd.DataFrame: """Convert a 3d state array into a 2d DataFrame. @@ -144,8 +145,8 @@ def _convert_state_array_to_df( def _create_filtered_states( - filtered_states: Array, - log_mixture_weights: Array, + filtered_states: Array | np.ndarray, + log_mixture_weights: Array | np.ndarray, update_info: pd.DataFrame, factors: tuple[str, ...], ) -> pd.DataFrame: @@ -174,49 +175,8 @@ def _create_filtered_states( return pd.concat(to_concat) -def create_state_ranges( - filtered_states: pd.DataFrame, - factors: tuple[str, ...] | list[str], - quantile_cutoff: float | None = None, -) -> dict[str, pd.DataFrame]: - """Compute minimum and maximum state values for each factor by period. - - Args: - filtered_states: DataFrame with filtered states. Must have a "period" - column. - factors: List of factor names to compute ranges for. - quantile_cutoff: If provided, use quantiles instead of min/max. The cutoff - is applied symmetrically: the minimum is the `quantile_cutoff` quantile - and the maximum is the `1 - quantile_cutoff` quantile. For example, - quantile_cutoff=0.01 uses the 1st and 99th percentiles. - - Returns: - Dictionary mapping factor names to DataFrames with "minimum" and "maximum" - columns, indexed by period. - - """ - ranges: dict[str, pd.DataFrame] = {} - # Group by whichever period column is present - period_col = "aug_period" if "aug_period" in filtered_states.columns else "period" - - if quantile_cutoff is not None: - if not 0 < quantile_cutoff < 0.5: - raise ValueError("quantile_cutoff must be between 0 and 0.5 (exclusive)") - minima = filtered_states.groupby(period_col).quantile(quantile_cutoff) - maxima = filtered_states.groupby(period_col).quantile(1 - quantile_cutoff) - else: - minima = filtered_states.groupby(period_col).min() - maxima = filtered_states.groupby(period_col).max() - - for factor in factors: - df = pd.concat([minima[factor], maxima[factor]], axis=1) - df.columns = pd.Index(["minimum", "maximum"]) - ranges[factor] = df - return ranges - - def _process_residuals( - residuals: Array, + residuals: Array | np.ndarray | list, update_info: pd.DataFrame, ) -> pd.DataFrame: to_concat = [] @@ -232,14 +192,14 @@ def _process_residuals( def _process_residual_sds( - residual_sds: Array, + residual_sds: Array | np.ndarray, update_info: pd.DataFrame, ) -> pd.DataFrame: return _process_residuals(residuals=residual_sds, update_info=update_info) def _process_all_contributions( - all_contributions: Array, + all_contributions: Array | np.ndarray, update_info: pd.DataFrame, ) -> pd.DataFrame: to_concat = [] diff --git a/src/skillmodels/qr.py b/src/skillmodels/chs/qr.py similarity index 63% rename from src/skillmodels/qr.py rename to src/skillmodels/chs/qr.py index d42862f7..d9ac11ee 100644 --- a/src/skillmodels/qr.py +++ b/src/skillmodels/chs/qr.py @@ -53,6 +53,28 @@ def _tril(m: Array, k: int = 0) -> Array: return jax.lax.select(jax.lax.broadcast(mask, m.shape[:-2]), m, jnp.zeros_like(m)) +# Floor for the magnitude of R's diagonal in the tangent solve below. The QR +# derivative solves against R, so a zero on R's diagonal -- a rank-deficient +# input, which the square-root UKF produces when a predicted covariance collapses +# as the optimiser inflates a nonlinear transition -- would send the tangent to +# +/-inf and poison the entire gradient with NaN, aborting the optimisation. +_QR_JVP_DIAGONAL_FLOOR = 1e-6 + + +def _floor_diagonal_magnitude(r: Array, floor: float) -> Array: + """Return `r` with each diagonal entry pushed to magnitude at least `floor`. + + Off-diagonal entries and the sign of each diagonal entry are preserved; a + diagonal entry already larger than `floor` in magnitude is untouched, so a + well-conditioned R (and its gradient) is unchanged. + """ + n = r.shape[-1] + diag = jnp.diagonal(r, axis1=-2, axis2=-1) + sign = jnp.where(diag < 0.0, -1.0, 1.0) + safe = jnp.where(jnp.abs(diag) < floor, sign * floor, diag) + return r + (safe - diag)[..., :, None] * jnp.eye(n, dtype=r.dtype) + + @qr_gpu.defjvp def qr_jvp_rule( primals: tuple[Array], @@ -63,7 +85,13 @@ def qr_jvp_rule( (x,) = primals (dx,) = tangents q, r = qr_gpu(x) - dx_rinv = jax.lax.linalg.triangular_solve(r, dx) # Right side solve by default + # Solve against a diagonal-floored R so a (near-)singular decomposition yields + # a large but finite tangent instead of NaN. The primal `q, r` and every other + # term below use the unmodified `r`. + r_solve = _floor_diagonal_magnitude(r, _QR_JVP_DIAGONAL_FLOOR) + dx_rinv = jax.lax.linalg.triangular_solve( + r_solve, dx + ) # Right side solve by default qt_dx_rinv = _h(q) @ dx_rinv qt_dx_rinv_lower = _tril(m=qt_dx_rinv, k=-1) do = qt_dx_rinv_lower - _h(qt_dx_rinv_lower) # This is skew-symmetric diff --git a/src/skillmodels/chs/types.py b/src/skillmodels/chs/types.py new file mode 100644 index 00000000..6919e312 --- /dev/null +++ b/src/skillmodels/chs/types.py @@ -0,0 +1,44 @@ +"""Frozen result dataclass for the CHS Kalman-MLE estimator.""" + +from dataclasses import dataclass +from typing import Any + +import pandas as pd + +from skillmodels.common.model_spec import ModelSpec + + +@dataclass(frozen=True) +class CHSEstimationResult: + """Complete result from CHS Kalman-MLE estimation. + + Conforms to `skillmodels.common.estimation.CommonEstimationResult`: + `loglikelihood` is always populated (CHS maximises a likelihood) and + `md_criterion` is always `None`. Estimation runs through + `estimagic.estimate_ml`, so `likelihood_result` carries full ML + inference (standard errors, covariances, summaries). + """ + + model_spec: ModelSpec + """The ModelSpec used for estimation.""" + + params: pd.DataFrame + """Estimated parameters with the standard 4-level MultiIndex + (category, period, name1, name2) and a `"value"` column.""" + + success: bool + """Whether the optimiser converged.""" + + loglikelihood: float + """Maximised log-likelihood at the optimum.""" + + optimize_result: Any + """Raw optimagic `OptimizeResult` for full optimisation diagnostics.""" + + likelihood_result: Any = None + """The estimagic `LikelihoodResult` from `estimate_ml`, exposing ML + inference via `.se()` / `.cov()` / `.summary()` / `.p_values()`. `None` + only for hand-constructed results (e.g. in tests).""" + + md_criterion: float | None = None + """Always `None` for CHS; present to satisfy the common result Protocol.""" diff --git a/src/skillmodels/common/__init__.py b/src/skillmodels/common/__init__.py new file mode 100644 index 00000000..e56ee676 --- /dev/null +++ b/src/skillmodels/common/__init__.py @@ -0,0 +1,14 @@ +"""Estimator-agnostic infrastructure shared by CHS, AF, and AMN. + +This subpackage holds everything that the three estimator subpackages +build on but do not own: the user-facing model specification +(`ModelSpec`, `FactorSpec`, `AnchoringSpec`), the data and parameter +processing pipeline (`process_model`, `process_data`, `params_index`, +`parse_params`), the constraint plumbing (`constraints`, +`decorators`), shared transition-function library, and the +visualisation helpers that operate on the common filtered-states +DataFrame format. + +The dependency rule for this package: it imports from no estimator +subpackage. Conversely, `chs`, `af`, and `amn` import freely from here. +""" diff --git a/src/skillmodels/filtered_states.py b/src/skillmodels/common/anchoring.py similarity index 52% rename from src/skillmodels/filtered_states.py rename to src/skillmodels/common/anchoring.py index c525ac0e..9a97271a 100644 --- a/src/skillmodels/filtered_states.py +++ b/src/skillmodels/common/anchoring.py @@ -1,66 +1,26 @@ -"""Functions to compute and process filtered latent states.""" +"""Generic anchoring utilities, estimator-agnostic. -from typing import Any +Anchoring maps unitless latent factors back to the unit of a designated +anchor measurement via a per-period (scale, offset) pair recovered from +`ModelSpec.anchoring`. The application is a pure scalar transformation +of a DataFrame's latent-factor columns; the implementation only depends +on `process_model` / `parse_params` (both common) and operates on a +`(obs x period x factor)` DataFrame irrespective of which estimator +produced it. + +Historically this lived under `skillmodels.chs.filtered_states` but +the cross-subpackage import from `common.simulate_data` was a code +smell — the function is genuinely common. +""" import jax.numpy as jnp import numpy as np import pandas as pd -from skillmodels.maximization_inputs import get_maximization_inputs -from skillmodels.model_spec import ModelSpec -from skillmodels.params_index import get_params_index -from skillmodels.parse_params import create_parsing_info, parse_params -from skillmodels.process_debug_data import create_state_ranges -from skillmodels.process_model import process_model - - -def get_filtered_states( - model_spec: ModelSpec, - data: pd.DataFrame, - params: pd.DataFrame, -) -> dict[str, dict[str, Any]]: - """Compute filtered latent states given data and estimated parameters.""" - max_inputs = get_maximization_inputs(model_spec=model_spec, data=data) - params = params.loc[max_inputs["params_template"].index] - debug_loglike = max_inputs["debug_loglike"] - debug_data = debug_loglike(params) - unanchored_states_df = debug_data["filtered_states"] - unanchored_ranges = debug_data["state_ranges"] - processed_model = process_model(model_spec) - - anchored_states_df = anchor_states_df( - states_df=unanchored_states_df, - model_spec=model_spec, - params=params, - use_aug_period=True, - ) - - # Map aug_period → period for the public API - ap_to_p = processed_model.labels.aug_periods_to_periods - for df in (anchored_states_df, unanchored_states_df): - df["period"] = df["aug_period"].map(ap_to_p) - anchored_states_df = anchored_states_df.drop(columns="aug_period") - unanchored_states_df = unanchored_states_df.drop(columns="aug_period") - - anchored_ranges = create_state_ranges( - filtered_states=anchored_states_df, - factors=processed_model.labels.latent_factors, - ) - unanchored_ranges = create_state_ranges( - filtered_states=unanchored_states_df, - factors=processed_model.labels.latent_factors, - ) - - return { - "anchored_states": { - "states": anchored_states_df, - "state_ranges": anchored_ranges, - }, - "unanchored_states": { - "states": unanchored_states_df, - "state_ranges": unanchored_ranges, - }, - } +from skillmodels.common.model_spec import ModelSpec +from skillmodels.common.params_index import get_params_index +from skillmodels.common.parse_params import create_parsing_info, parse_params +from skillmodels.common.process_model import process_model def anchor_states_df( @@ -72,14 +32,13 @@ def anchor_states_df( ) -> pd.DataFrame: """Anchor states in a DataFrame. - The DataFrame is expected to have a column called "period" as well as one column - for each latent factor. - - All other columns are not affected. - - This is a bit difficult because we need to re-use `parse_params` (which was meant - as an internal function that only works with jax objects). + The DataFrame is expected to have a column called "period" (or + "aug_period" when `use_aug_period=True`) as well as one column for + each latent factor. All other columns are not affected. + This is a bit difficult because we need to re-use `parse_params` + (which was meant as an internal function that only works with jax + objects). """ processed_model = process_model(model_spec) diff --git a/src/skillmodels/check_model.py b/src/skillmodels/common/check_model.py similarity index 78% rename from src/skillmodels/check_model.py rename to src/skillmodels/common/check_model.py index 18f85af7..24191fb9 100644 --- a/src/skillmodels/check_model.py +++ b/src/skillmodels/common/check_model.py @@ -1,11 +1,13 @@ """Functions to validate model specifications.""" from collections.abc import Mapping +from itertools import combinations +from typing import Any import numpy as np -from skillmodels.model_spec import ModelSpec -from skillmodels.types import Anchoring, Dimensions, Labels +from skillmodels.common.model_spec import ModelSpec +from skillmodels.common.types import Anchoring, Dimensions, Labels def check_model( @@ -90,7 +92,12 @@ def check_stagemap( return report -def _check_anchoring(anchoring: Anchoring) -> list[str]: +def _check_anchoring(anchoring: Any) -> list[str]: # noqa: ANN401 + """Validate anchoring attributes. + + Runtime-typed because callers may pass duck-typed namespaces or + partially-built objects. + """ report = [] if not isinstance(anchoring.anchoring, bool): report.append("anchoring.anchoring must be a bool.") @@ -138,20 +145,49 @@ def _check_measurements( def _check_no_overlap_in_measurements_of_states_and_inv( model_spec: ModelSpec, labels: Labels ) -> list[str]: + """Reject measurement-name collisions across latent factors of split halves. + + With augmented periods, state factors are measured at the even aug-periods and + endogenous factors at the odd ones. A measurement name shared by a state and an + endogenous factor (or by two endogenous factors, e.g. a duplicate-measurement + twin) collides their level/prediction measurement systems. State-vs-state + sharing is left alone (legitimate cross-loadings). + """ report = [] for period in labels.periods: - meas: dict[str, set] = {} + aug_periods = [ + aug_period + for aug_period, p in labels.aug_periods_to_periods.items() + if p == period + ] + state_meas: dict[str, set[str]] = {} + endogenous_meas: dict[str, set[str]] = {} for factor in labels.latent_factors: fspec = model_spec.factors[factor] - if fspec.is_endogenous: - meas["endogenous_factors"] = set(fspec.measurements[period]) - else: - meas["states"] = set(fspec.measurements[period]) - if overlap := meas["states"].intersection(meas["endogenous_factors"]): - report.append( - "Measurements for exogenous and endogenous latent factors must not " - f"overlap.\n\nCheck measurements {overlap} in period {period}.", - ) + names = { + name + for aug_period in aug_periods + for name in fspec.measurements[aug_period] + } + target = endogenous_meas if fspec.is_endogenous else state_meas + target[factor] = names + + pairs = [ + (s_factor, s_names, e_factor, e_names) + for s_factor, s_names in state_meas.items() + for e_factor, e_names in endogenous_meas.items() + ] + pairs += [ + (f1, n1, f2, n2) + for (f1, n1), (f2, n2) in combinations(endogenous_meas.items(), 2) + ] + for factor_a, names_a, factor_b, names_b in pairs: + if overlap := names_a & names_b: + report.append( + "Measurements for distinct latent factors must not overlap.\n\n" + f"Check measurements {overlap} shared by {factor_a} and " + f"{factor_b} in period {period}.", + ) return report diff --git a/src/skillmodels/common/config.py b/src/skillmodels/common/config.py new file mode 100644 index 00000000..c570e402 --- /dev/null +++ b/src/skillmodels/common/config.py @@ -0,0 +1,16 @@ +"""Configuration constants and paths for skillmodels.""" + +from pathlib import Path + +# `__file__` lives in src/skillmodels/common/config.py; test_data sits in +# src/skillmodels/test_data so resolve one level up. +TEST_DATA_DIR = Path(__file__).resolve().parent.parent / "test_data" +REGRESSION_VAULT = ( + Path(__file__).resolve().parent.parent.parent.parent / "tests" / "regression_vault" +) + +# Long-format CNLSY measurements used by the AF 2025 application; produced +# by ``matlab_ces_repro/load_cnlsy.py`` from the bundled ``complete_7_9_11.xls`` +# (CNLSY public-use data, BLS). Read with +# ``pd.read_csv(CNLSY_DATA_PATH).set_index(["caseid", "period"])``. +CNLSY_DATA_PATH = TEST_DATA_DIR / "cnlsy_7_9_11.csv" diff --git a/src/skillmodels/common/constraints.py b/src/skillmodels/common/constraints.py new file mode 100644 index 00000000..6a78e390 --- /dev/null +++ b/src/skillmodels/common/constraints.py @@ -0,0 +1,863 @@ +"""Constraint objects for a model specification.""" + +import functools +import warnings +from collections.abc import Iterable, Mapping +from typing import Any + +import numpy as np +import optimagic as om +import pandas as pd + +import skillmodels.common.transition_functions as t_f_module +from skillmodels.common.fixed_constraint import FixedConstraintWithValue +from skillmodels.common.selector import align_index_names, select_by_loc +from skillmodels.common.types import ( + Anchoring, + ControlFunctionInfo, + Dimensions, + EndogenousFactorsInfo, + Labels, + MeasurementType, + Normalizations, +) + +__all__ = [ + "FixedConstraintWithValue", + "add_bounds", + "align_index_names", + "collect_fixed_locs", + "enforce_fixed_constraints", + "filter_within_step_constraints", + "get_constraints", + "project_to_probability_constraints", + "reconcile_start_to_equality", + "select_by_loc", +] + + +def _equality_constraint_loc(c: om.constraints.Constraint) -> pd.MultiIndex | None: + """Return the `loc` MultiIndex of a `select_by_loc`-style EqualityConstraint. + + Returns `None` for any other constraint type or selector shape, so + callers can `continue` past unrecognised entries without nested + guard clauses. + """ + if not isinstance(c, om.EqualityConstraint): + return None + keywords = getattr(c.selector, "keywords", None) + if not keywords: + return None + loc = keywords.get("loc") + return loc if isinstance(loc, pd.MultiIndex) else None + + +def _pairwise_equality_locs( + c: om.constraints.Constraint, +) -> list[pd.MultiIndex] | None: + """Return the aligned `select_by_loc` locs of a `PairwiseEqualityConstraint`. + + Each selector ties its members element-wise to the others, so the returned + `MultiIndex`es are equal length and position `k` forms one equality group. + Returns `None` for any other constraint type or selector shape. + """ + if not isinstance(c, om.PairwiseEqualityConstraint): + return None + selectors = getattr(c, "selectors", None) + if not selectors: + return None + locs: list[pd.MultiIndex] = [] + for sel in selectors: + keywords = getattr(sel, "keywords", None) + loc = keywords.get("loc") if keywords else None + if not isinstance(loc, pd.MultiIndex): + return None + locs.append(loc) + if len({len(loc) for loc in locs}) != 1: + return None + return locs + + +def filter_within_step_constraints( + user_constraints: list[om.constraints.Constraint] | None, + params_index: pd.Index, +) -> list[om.constraints.Constraint]: + """Return user equality constraints fully contained in `params_index`. + + Used by AF's per-step optimizers to forward only those user-supplied + `om.EqualityConstraint` objects whose `select_by_loc` `loc` MultiIndex + is a subset of the current step's params index. Cross-period + equalities (whose members straddle multiple steps) are handled + separately by `_propagate_equality_groups` in + `skillmodels.af.estimate`. + """ + if not user_constraints: + return [] + idx_set = set(params_index) + out: list[om.constraints.Constraint] = [] + for c in user_constraints: + loc = _equality_constraint_loc(c) + if loc is not None and all(tup in idx_set for tup in loc): + out.append(c) + return out + + +def _fixed_loc_values( + constraints: Iterable[om.constraints.Constraint], +) -> dict[tuple[Any, ...], float]: + """Map every `FixedConstraintWithValue.loc` tuple to its target `value`. + + The companion of `collect_fixed_locs` that keeps the value, so the + equality reconciler can pool a group onto a fixed member's value + rather than the group mean. Handles the same `loc` shapes + (single 4-tuple, list/tuple of 4-tuples, `pd.MultiIndex`); string + `loc`s are skipped as in `collect_fixed_locs`. + """ + out: dict[tuple[Any, ...], float] = {} + for c in constraints: + if not isinstance(c, FixedConstraintWithValue) or c.value is None: + continue + value = float(c.value) + loc = c.loc + if isinstance(loc, pd.MultiIndex): + for tup in loc: + out[tuple(tup)] = value + elif isinstance(loc, tuple) and loc and not isinstance(loc[0], tuple): + out[loc] = value + elif isinstance(loc, (list, tuple)): + for sub in loc: + if isinstance(sub, tuple): + out[sub] = value + return out + + +def _pooled_equality_value( + members: list[tuple[Any, ...]], + params: pd.DataFrame, + fixed_values: dict[tuple[Any, ...], float], +) -> float: + """Return the shared value an equality group's members must take. + + If any member is fixed (via a `FixedConstraintWithValue`), the group + must take that fixed value -- averaging would move the fixed + coordinate off its target. Conflicting fixed values within one group + are infeasible and raise. Otherwise the group is averaged. + """ + fixed = {fixed_values[m] for m in members if m in fixed_values} + if len(fixed) > 1: + msg = ( + f"Conflicting fixed values in an equality group: {sorted(fixed)}. " + "Members tied by equality cannot be fixed to different values." + ) + raise ValueError(msg) + if fixed: + return next(iter(fixed)) + return float(params["value"].reindex(members).mean()) + + +def reconcile_start_to_equality( + params: pd.DataFrame, + equality_constraints: list[om.constraints.Constraint], +) -> pd.DataFrame: + """Pool each equality group's `value` so the start point satisfies it. + + `om.minimize` raises `InvalidParamsError` when an equality + constraint is violated at the starting point. For each + `om.EqualityConstraint` and each element-wise group of an + `om.PairwiseEqualityConstraint` (e.g. the time-invariance ties on + controls / loadings / meas_sds across periods), set every member's + `value` to a single shared value: the value of a fixed member if the + group contains a `FixedConstraintWithValue` (so a previously enforced + fix is not averaged away), otherwise the group mean. Conflicting + fixed values within one group raise. Returns a copy; `params` is not + modified. + """ + if not equality_constraints: + return params + out = params.copy() + fixed_values = _fixed_loc_values(equality_constraints) + for c in equality_constraints: + loc = _equality_constraint_loc(c) + if loc is not None and all(tup in out.index for tup in loc): + members = list(loc) + out.loc[members, "value"] = _pooled_equality_value( + members, out, fixed_values + ) + continue + pairwise = _pairwise_equality_locs(c) + if pairwise is None: + continue + for group in zip(*pairwise, strict=True): + members = [m for m in group if m in out.index] + if len(members) > 1: + out.loc[members, "value"] = _pooled_equality_value( + members, out, fixed_values + ) + return out + + +def project_start_to_linear_equalities( + params: pd.DataFrame, + constraints: Iterable[om.constraints.Constraint], +) -> pd.DataFrame: + """Move the start point onto every linear equality constraint. + + `om.minimize` raises `InvalidParamsError` when a constraint is violated at the + starting point. All `om.LinearConstraint`s with a `value` are stacked into one + system `A x = b` over the parameters they involve, and those parameters' `value` + is replaced by its orthogonal projection onto the solution set (e.g. the + least-squares line for second-difference constraints). Other parameters are + untouched. Returns a copy; `params` is not modified. + """ + rows = [] + for c in constraints: + if isinstance(c, om.LinearConstraint) and c.value is not None: + selected = pd.Series(c.selector(params)).index + weights = np.broadcast_to( + np.asarray(c.weights, dtype=float), (len(selected),) + ) + rows.append((selected, weights, float(c.value))) + if not rows: + return params + involved = pd.Index( + sorted({tup for idx, _, _ in rows for tup in idx}), tupleize_cols=False + ) + a = np.zeros((len(rows), len(involved))) + b = np.array([value for _, _, value in rows]) + for i, (idx, weights, _) in enumerate(rows): + a[i, involved.get_indexer(idx)] = weights + x = params.loc[list(involved), "value"].to_numpy(dtype=float) + projected = x - np.linalg.pinv(a) @ (a @ x - b) + out = params.copy() + out.loc[list(involved), "value"] = projected + return out + + +def collect_fixed_locs( + constraints: Iterable[om.constraints.Constraint], +) -> set[tuple[Any, ...]]: + """Flatten every `FixedConstraintWithValue.loc` into a single set of tuples. + + Used by `project_to_probability_constraints` to decide which + entries of a `ProbabilityConstraint` group are already pinned by + an overlapping `FixedConstraintWithValue` and therefore must not + be touched by the rescaling step. + + Handles every shape that `FixedConstraintWithValue.loc` permits + per its type annotation: a single 4-tuple (`("loadings", 0, ...)`), + a `tuple` / `list` of 4-tuples (used by the anchoring + constraints), and a `pd.MultiIndex` (the type annotation allows + it; the runtime needs to follow). String `loc`s (like + `"mixture_weights"`) are deliberately skipped: they refer to + a category prefix in the params index, not to a single + parameter, and never belong to a probability fold. + """ + fixed_locs: set[tuple[Any, ...]] = set() + for c in constraints: + if not isinstance(c, FixedConstraintWithValue): + continue + loc = c.loc + if isinstance(loc, pd.MultiIndex): + fixed_locs.update(tuple(t) for t in loc) + elif isinstance(loc, tuple) and loc and not isinstance(loc[0], tuple): + fixed_locs.add(loc) + elif isinstance(loc, (list, tuple)): + fixed_locs.update(sub for sub in loc if isinstance(sub, tuple)) + return fixed_locs + + +def project_to_probability_constraints( + params_template: pd.DataFrame, + constraints: Iterable[om.constraints.Constraint], +) -> pd.DataFrame: + """Project starting values onto each `ProbabilityConstraint`'s simplex. + + Spearman / AMN seeding does not know about probability folds: the + seeded entries don't sum to one. Walk every `ProbabilityConstraint` + whose selector is the `select_by_loc(loc=list_of_tuples)` form and + rescale its free members so they sum to `1 - sum(fixed_values)`. + Entries also bound by a `FixedConstraintWithValue` keep their + pinned value; only the remaining (free) entries are rescaled. + Groups where the free entries sum to zero are left untouched -- + the user is on the hook for supplying a feasible start in that + degenerate case. + """ + fixed_locs = collect_fixed_locs(constraints) + + out = params_template + for c in constraints: + if not isinstance(c, om.ProbabilityConstraint): + continue + keywords = getattr(c.selector, "keywords", None) + loc = keywords.get("loc") if keywords else None + if not isinstance(loc, list): + continue + + free_loc = [tup for tup in loc if tup not in fixed_locs] + pinned_loc = [tup for tup in loc if tup in fixed_locs] + if not free_loc: + continue + try: + free_values = out.loc[free_loc, "value"] + except KeyError: + continue + free_total = float(free_values.sum()) + if free_total <= 0 or not np.isfinite(free_total): + continue + + pinned_total = float(out.loc[pinned_loc, "value"].sum()) if pinned_loc else 0.0 + target = max(0.0, 1.0 - pinned_total) + if abs(free_total - target) < 1e-12: + continue + + if out is params_template: + out = params_template.copy() + out.loc[free_loc, "value"] = free_values * (target / free_total) + return out + + +def get_constraints( + dimensions: Dimensions, + labels: Labels, + anchoring_info: Anchoring, + update_info: pd.DataFrame, + normalizations: Mapping[str, Normalizations], + endogenous_factors_info: EndogenousFactorsInfo, + bounds_distance: float, +) -> list[om.constraints.Constraint]: + """Generate constraints implied by the model specification. + + Args: + dimensions: Dimensional information like n_states, n_periods, n_controls, + n_mixtures. See :ref:`dimensions`. + labels: Dict of lists with labels for the model quantities like + factors, periods, controls, stagemap and stages. See :ref:`labels` + anchoring_info: Information about anchoring. See :ref:`anchoring` + update_info: DataFrame with one row per Kalman update needed + in the likelihood function. See :ref:`update_info`. + normalizations: Nested dictionary with information on normalized factor + loadings and intercepts for each factor. See :ref:`normalizations`. + endogenous_factors_info: Information about endogenous factors in the model. + bounds_distance: Distance from zero/one used for soft-pinning shock + standard deviations in carry-forward augmented periods. + + Returns: + List of optimagic constraint objects. + + """ + constraints: list[om.constraints.Constraint] = [] + + constraints += _get_normalization_constraints( + normalizations=normalizations, factors=labels.latent_factors + ) + constraints += _get_mixture_weights_constraints(dimensions.n_mixtures) + constraints += _get_stage_constraints( + stagemap=labels.aug_stagemap, + stages=labels.aug_stages, + ) + constraints += _get_constant_factors_constraints( + labels=labels, endogenous_factors_info=endogenous_factors_info + ) + constraints += _get_initial_states_constraints( + n_mixtures=dimensions.n_mixtures, + factors=labels.latent_factors, + ) + constraints += _get_transition_constraints( + labels=labels, endogenous_factors_info=endogenous_factors_info + ) + constraints += _get_anchoring_constraints( + update_info=update_info, + controls=labels.controls, + anchoring_info=anchoring_info, + periods=labels.aug_periods, + ) + if endogenous_factors_info.has_endogenous_factors: + constraints += _get_constraints_for_augmented_periods( + labels=labels, + endogenous_factors_info=endogenous_factors_info, + bounds_distance=bounds_distance, + ) + + return constraints + + +def add_bounds(params: pd.DataFrame, bounds_distance: float) -> pd.DataFrame: + """Add bounds for standard deviations to params. + + Lower and upper bounds are set to (minus) infinity; lower bounds for standard + deviation-like parameters are set to *bounds_distance*. Note that the latter will be + overridden for parameters where fixed constraints are imposed. + + Args: + params: see :ref:`params`. + bounds_distance: set standard deviation-like to this amount. + + Returns: + Modified copy of params + + """ + df = params.copy() + with warnings.catch_warnings(): + warnings.filterwarnings( + "ignore", + message="indexing past lexsort depth may impact performance.", + ) + if "lower_bound" not in df.columns: + df["lower_bound"] = -np.inf + if "upper_bound" not in df.columns: + df["upper_bound"] = np.inf + + df.loc["meas_sds", "lower_bound"] = bounds_distance + df.loc["shock_sds", "lower_bound"] = bounds_distance + + cholcov_index = df.query("category == 'initial_cholcovs'").index.tolist() + ind_tups = [tup for tup in cholcov_index if _is_diagonal_entry(tup)] + df.loc[ind_tups, "lower_bound"] = bounds_distance + + return df + + +def _is_diagonal_entry(ind_tup: tuple[Any, ...]) -> bool: + name2 = ind_tup[-1] + middle_pos = int(len(name2) // 2) + if ( + len(name2) % 2 == 0 + or name2[middle_pos] != "-" + or name2[:middle_pos] != name2[middle_pos + 1 :] + ): + is_diag = False + else: + is_diag = True + return is_diag + + +def _get_normalization_constraints( + normalizations: Mapping[str, Normalizations], + factors: tuple[str, ...], +) -> list[om.constraints.Constraint]: + """List of constraints to enforce normalizations. + + Args: + normalizations: Mapping from factor name to Normalizations instance. + factors: Tuple of factor names to process. + + Returns: + List of constraint objects. + + """ + periods = range(len(normalizations[factors[0]].loadings)) + + constraints: list[om.constraints.Constraint] = [] + for factor in factors: + for period in periods: + for meas, normval in normalizations[factor].loadings[period].items(): + loc = ("loadings", period, meas, factor) + constraints.append(FixedConstraintWithValue(loc=loc, value=normval)) + for meas, normval in normalizations[factor].intercepts[period].items(): + loc = ("controls", period, meas, "constant") + constraints.append(FixedConstraintWithValue(loc=loc, value=normval)) + + return constraints + + +def _get_mixture_weights_constraints( + n_mixtures: int, +) -> list[om.constraints.Constraint]: + """Constrain mixture weights to be between 0 and 1 and sum to 1.""" + loc = "mixture_weights" + if n_mixtures == 1: + return [ + FixedConstraintWithValue(loc=loc, value=1.0), + ] + return [ + om.ProbabilityConstraint(selector=functools.partial(select_by_loc, loc=loc)) + ] + + +def _get_stage_constraints( + stagemap: tuple[int, ...], + stages: tuple[int, ...], +) -> list[om.constraints.Constraint]: + """Equality constraints for transition and shock parameters within stages. + + Args: + stagemap: map aug_periods to aug_stages + stages: aug_stages + + Returns: + List of constraint objects. + + """ + constraints: list[om.constraints.Constraint] = [] + + stages_to_periods: dict[int, list[int]] = {stage: [] for stage in stages} + for aug_period, stage in enumerate(stagemap): + stages_to_periods[stage].append(aug_period) + + for stage_periods in stages_to_periods.values(): + if len(stage_periods) > 1: + loc_trans = [("transition", p) for p in stage_periods] + loc_q = [("shock_sds", p) for p in stage_periods] + constraints.append( + om.PairwiseEqualityConstraint( + selectors=[ + functools.partial(select_by_loc, loc=loc) for loc in loc_trans + ], + ), + ) + constraints.append( + om.PairwiseEqualityConstraint( + selectors=[ + functools.partial(select_by_loc, loc=loc) for loc in loc_q + ], + ), + ) + + return constraints + + +def _get_constant_factors_constraints( + labels: Labels, + endogenous_factors_info: EndogenousFactorsInfo, +) -> list[om.constraints.Constraint]: + """Fix shock variances of constant factors to zero. + + Args: + labels: Dict of lists with labels for the model quantities like + factors, periods, controls, stagemap and stages. See :ref:`labels` + endogenous_factors_info: Information about endogenous factors. Used to + mirror `get_transition_index_tuples`, which stops at + `aug_periods[:-2]` when endogenous factors are present (otherwise + `[:-1]`). The params index has no transition/shock entries at the + final transition aug-period, so a naive `[:-1]` loop would emit one + orphan `shock_sds` loc that trips the optimagic selector. + + Returns: + List of constraint objects. + + """ + last = -2 if endogenous_factors_info.has_endogenous_factors else -1 + transition_augs = labels.aug_periods[:last] + constraints: list[om.constraints.Constraint] = [] + for f, factor in enumerate(labels.latent_factors): + if labels.transition_names[f] == "constant": + for aug_period in transition_augs: + loc = ("shock_sds", aug_period, factor, "-") + constraints.append( + FixedConstraintWithValue(loc=loc, value=0.0), + ) + return constraints + + +def _get_initial_states_constraints( + n_mixtures: int, + factors: tuple[str, ...], +) -> list[om.constraints.Constraint]: + """Enforce that the x values of the first factor are increasing. + + Otherwise the model would only be identified up to the order of the start factors. + + Args: + n_mixtures: number of elements in the mixture of normal of the factors. + factors: the latent factors of the model + + Returns: + List of constraint objects. + + """ + if n_mixtures > 1: + locs = [ + ("initial_states", 0, f"mixture_{emf}", factors[0]) + for emf in range(n_mixtures) + ] + return [ + om.IncreasingConstraint(selector=functools.partial(select_by_loc, loc=locs)) + ] + return [] + + +def _get_transition_constraints( + labels: Labels, + endogenous_factors_info: EndogenousFactorsInfo, +) -> list[om.constraints.Constraint]: + """Collect possible constraints on transition parameters. + + Args: + labels: Dict of lists with labels for the model quantities like + factors, periods, controls, stagemap and stages. See :ref:`labels` + endogenous_factors_info: Information about endogenous factors in the model. + + Returns: + List of constraint objects. + + """ + # Transition params (and therefore their simplex/probability folds) live on + # `aug_periods[:-2]` when endogenous factors split the calendar into augmented + # periods, else `aug_periods[:-1]`. Mirror `get_transition_index_tuples` exactly + # so no constraint targets a transition row absent from the params index. + end = -2 if endogenous_factors_info.has_endogenous_factors else -1 + constraints: list[om.constraints.Constraint] = [] + for f, factor in enumerate(labels.latent_factors): + tname = labels.transition_names[f] + for aug_period in labels.aug_periods[:end]: + funcname = f"constraints_{tname}" + if func := getattr(t_f_module, funcname, False): + constraints.append( + func( # ty: ignore[call-non-callable] + factor=factor, + factors=labels.all_factors, + aug_period=aug_period, + ) + ) + return constraints + + +def _get_anchoring_constraints( # noqa: C901 + update_info: pd.DataFrame, + controls: tuple[str, ...], + anchoring_info: Anchoring, + periods: tuple[int, ...], +) -> list[om.constraints.Constraint]: + """Constraints on anchoring parameters. + + Args: + update_info: DataFrame with one row per Kalman update needed + in the likelihood function. See :ref:`update_info`. + controls: List of control variables + anchoring_info: Information about anchoring. See :ref:`anchoring` + periods: Period of the model + + Returns: + List of constraint objects. + + """ + anchoring_updates = update_info[update_info["purpose"] == "anchoring"].index + + constraints: list[om.constraints.Constraint] = [] + if not anchoring_info.free_constant: + locs = [] + for period, meas in anchoring_updates: + locs.append(("controls", period, meas, "constant")) + if locs: + loc = tuple(locs) + constraints.append( + FixedConstraintWithValue(loc=loc, value=0), + ) + + if not anchoring_info.free_controls: + ind_tups = [] + for period, meas in anchoring_updates: + for cont in [c for c in controls if c != "constant"]: + ind_tups.append(("controls", period, meas, cont)) + if ind_tups: + loc = tuple(ind_tups) + constraints.append( + FixedConstraintWithValue(loc=loc, value=0), + ) + + if not anchoring_info.free_loadings: + ind_tups = [] + for period in periods: + for factor in anchoring_info.factors: + outcome = anchoring_info.outcomes[factor] + meas = f"{outcome}_{factor}" + ind_tups.append(("loadings", period, meas, factor)) + + if ind_tups: + loc = tuple(ind_tups) + constraints.append( + FixedConstraintWithValue(loc=loc, value=1), + ) + + return constraints + + +def _factors_in_param_name(name: str) -> set[str]: + """Return the factor tokens referenced by a built-in transition param name. + + `"inv_z"` -> `{"inv_z"}`, `"inv_z ** 2"` -> `{"inv_z"}`, + `"fac1 * inv_z"` -> `{"fac1", "inv_z"}`, `"constant"` -> `{"constant"}`. + """ + return {part.strip() for part in name.replace(" ** 2", "").split(" * ")} + + +def _get_instrument_exclusion_constraints( + labels: Labels, + control_function: ControlFunctionInfo, + aug_period_meas_types: Mapping[int, MeasurementType], +) -> list[FixedConstraintWithValue]: + """Pin built-in production coefficients on first-stage-only instruments to 0. + + A built-in transition enumerates a free coefficient for every observed factor + (incl. the excluded instruments), which would leak the instrument into + production. Pin those coefficients to 0 on the production (ENDOGENOUS) aug + periods; on the carry-forward aug periods they are already 0 via the identity + constraints. Custom transitions are validated separately. + """ + constraints: list[FixedConstraintWithValue] = [] + production_aug_periods = [ + k + for k, v in aug_period_meas_types.items() + if v == MeasurementType.ENDOGENOUS_FACTORS + ][:-1] + instruments = set(control_function.instruments) + for target in control_function.targets: + tname = labels.transition_names[labels.latent_factors.index(target)] + if not isinstance(tname, str) or tname == "constant": + continue + params_enumerator = getattr(t_f_module, f"params_{tname}", None) + if params_enumerator is None: + # Custom transition (no built-in `params_` enumerator). The + # built-in safe-by-construction pinning does not apply; instrument + # leakage through custom production is validated separately by + # `check_model`, which raises on it. + continue + leak_names = [ + name + for name in params_enumerator(labels.all_factors) + if instruments & _factors_in_param_name(name) + ] + constraints.extend( + FixedConstraintWithValue( + loc=("transition", aug_period, target, name2), + value=0.0, + ) + for aug_period in production_aug_periods + for name2 in leak_names + ) + return constraints + + +def _get_constraints_for_augmented_periods( + labels: Labels, + endogenous_factors_info: EndogenousFactorsInfo, + bounds_distance: float, +) -> list[om.constraints.Constraint]: + """Constraints for augmented periods. + + - Carry forward states from uneven periods to even periods + - Carry forward endogenous factors even periods to uneven periods + - Set shock_sds to 0 when carrying anything forward + + Both depend on the transition function. + + Args: + labels: Dict of lists with labels for the model quantities like + factors, periods, controls, stagemap and stages. See :ref:`labels` + endogenous_factors_info: Information about endogenous factors and their + relationship to augmented periods. + bounds_distance: Value to pin shock standard deviations to in + carry-forward augmented periods. + + Returns: + List of constraint objects. + + """ + constraints: list[om.constraints.Constraint] = [] + for f, factor in enumerate(labels.latent_factors): + tname = labels.transition_names[f] + if tname == "constant": + continue + # We are restricting transitions and shocks, not measurements. So this might + # look counterintuitive... + aug_period_meas_type_to_constrain = ( + MeasurementType.STATES + if endogenous_factors_info.factor_info[factor].is_state + else MeasurementType.ENDOGENOUS_FACTORS + ) + aug_period_meas_types = ( + endogenous_factors_info.aug_periods_to_aug_period_meas_types + ) + aug_periods_to_constrain = [ + k + for k, v in aug_period_meas_types.items() + if v == aug_period_meas_type_to_constrain + ] + # The last entry of `aug_periods_to_constrain` is the aug-period + # half of the last calendar period for this factor's meas-type. + # `get_transition_index_tuples` stops at `aug_periods[:-2]` when + # endogenous factors are present (or `[:-1]` otherwise), so the + # params index has no transition entries at that final aug-period + # for any factor. Emitting identity constraints there would target + # locs that don't exist and trip the optimagic selector. The + # shock-sds loop below already uses `[:-1]` for the same reason + # — keep them symmetric. + for aug_period in aug_periods_to_constrain[:-1]: + if func := getattr(t_f_module, f"identity_constraints_{tname}", False): + constraints += func( # ty: ignore[call-non-callable] + factor=factor, + aug_period=aug_period, + all_factors=labels.all_factors, + ) + for aug_period in aug_periods_to_constrain[:-1]: + loc = ("shock_sds", aug_period, factor, "-") + constraints.append( + FixedConstraintWithValue( + loc=loc, + value=bounds_distance, + ) + ) + + control_function = endogenous_factors_info.control_function + if control_function is not None: + # The control-function loading (kappa) only acts where a target factor's + # production transition runs. On the target's carry-forward aug periods the + # base transition is pinned to identity, so kappa must be pinned to 0 there + # too (otherwise kappa * cf corrupts the carried-forward state). Targets are + # state factors, so their carry-forward periods are the STATES aug periods, + # truncated by [:-1] for the same index-range reason as the loops above. + aug_period_meas_types = ( + endogenous_factors_info.aug_periods_to_aug_period_meas_types + ) + carry_forward_aug_periods = [ + k for k, v in aug_period_meas_types.items() if v == MeasurementType.STATES + ][:-1] + for target in control_function.targets: + for aug_period in carry_forward_aug_periods: + for term in control_function.kappa_terms[target]: + constraints.append( + FixedConstraintWithValue( + loc=("kappa", aug_period, target, term), + value=0.0, + ) + ) + + constraints.extend( + _get_instrument_exclusion_constraints( + labels=labels, + control_function=control_function, + aug_period_meas_types=aug_period_meas_types, + ) + ) + + return constraints + + +def enforce_fixed_constraints( + params_template: pd.DataFrame, + constraints: list[om.constraints.Constraint], +) -> pd.DataFrame: + """Enforce fixed constraints on params_template. + + For fixed constraints, we also set the lower and upper bounds to the fixed value. + This means that any robust bounds will be overridden for fixed parameters. + + Args: + params_template: see :ref:`params_df`. + constraints: list of optimagic constraint objects. + + Returns: + pd.DataFrame: modified copy of params_template + """ + params = params_template.copy() + with warnings.catch_warnings(): + warnings.filterwarnings( + "ignore", + message="indexing past lexsort depth may impact performance.", + ) + for constraint in constraints: + if isinstance(constraint, FixedConstraintWithValue): + params.loc[constraint.loc, "value"] = constraint.value + + # Setting via loc may expand the index, so reduce to the original index + return params.loc[params_template.index].astype(float) diff --git a/src/skillmodels/common/control_function.py b/src/skillmodels/common/control_function.py new file mode 100644 index 00000000..45aa44e8 --- /dev/null +++ b/src/skillmodels/common/control_function.py @@ -0,0 +1,266 @@ +"""Construction of the control-function (cf) nodes for the CHS transition DAG. + +The first-class control-function correction adds three kinds of synthetic node +to the per-period transition DAG built in `process_model._get_transition_info`: + +1. a deterministic, contemporaneous first-stage prediction + `E[ln I_t | theta_t, Y_t]` for the endogenous investment factor, +2. the residual `cf_t = ln I_t - E[ln I_t | theta_t, Y_t]`, and +3. for each target production factor, the additive `sum_k kappa_k * cf_term_k` + term grafted onto the factor's transition output. + +All nodes operate on the same period-`t` anchored sigma-point `states` row that +the production transitions already consume, which is what makes `cf` a genuine +same-period residual. The functions here are pure builders returning the node +callables; the wiring into the DAG lives in `process_model`. +""" + +from collections.abc import Callable, Iterator, Mapping, Sequence + +import jax.numpy as jnp +from jax import Array + + +def build_prediction_node( + beta_key: str, + predictor_positions: Sequence[int], +) -> Callable[[Array, Mapping[str, Array]], Array]: + """Return the contemporaneous first-stage prediction node. + + The node reads the period-`t` anchored `states` row and the reserved + first-stage coefficient vector `params[beta_key]` (ordered as the + predictors then a trailing constant) and returns `x @ betas`. + + Args: + beta_key: Reserved transition-coeffs key holding the first-stage betas. + predictor_positions: Positions of the predictor/instrument factors in + the `states` vector, in the same order as the first-stage betas. + + Returns: + A node `(states, params) -> prediction`. + + """ + pos = jnp.array(tuple(predictor_positions), dtype=int) + + def prediction(states: Array, params: Mapping[str, Array]) -> Array: + betas = params[beta_key] + x = jnp.concatenate([states[pos], jnp.array([1.0])]) + return jnp.dot(x, betas) + + return prediction + + +def compute_investment_residual_sds( + investment: Array, + predictors: Array, + betas: Array, +) -> Array: + """Report SD(eta_I) per period: the first-stage residual's cross-sectional SD. + + A derived diagnostic, not a free MLE parameter. `eta_{I,t} = ln I_t - + E[ln I_t | theta_t, Y_t]` and this returns its standard deviation over + observations for each period, mirroring the AMN first-stage residual SD. The + caller supplies the (filtered or simulated) investment values and predictor + panel and the estimated first-stage coefficients. + + Args: + investment: Shape `(n_obs, n_periods)`. The investment factor values. + predictors: Shape `(n_obs, n_periods, n_predictors)`. The first-stage + predictors and instruments, in the coefficient order. + betas: Shape `(n_periods, n_predictors + 1)`. First-stage coefficients + with the constant last. + + Returns: + Shape `(n_periods,)` with SD(eta_I) for each period. + + """ + ones = jnp.ones((*predictors.shape[:2], 1)) + design = jnp.concatenate([predictors, ones], axis=-1) + prediction = jnp.einsum("opk,pk->op", design, betas) + return jnp.std(investment - prediction, axis=0) + + +def build_cf_node(inv_pos: int) -> Callable[[Array, Array], Array]: + """Return the residual node `cf = ln I_t - prediction`. + + Args: + inv_pos: Position of the investment factor in the `states` vector. + + Returns: + A node `(states, prediction) -> cf`. + + """ + + def cf(states: Array, prediction: Array) -> Array: + return states[inv_pos] - prediction + + return cf + + +def build_kappa_term_evaluators( + kappa_terms: Sequence[str], + factor_positions: Mapping[str, int], +) -> list[Callable[[Array, Array], Array]]: + """Return one evaluator per kappa term. + + Each evaluator maps `(cf, states) -> term value`: `"cf"` -> `cf`, + `"cf ** 2"` -> `cf ** 2`, and `"cf * "` -> `cf * states[pos]`. + + Args: + kappa_terms: The cf regressor names for one target factor. + factor_positions: Positions of factors in the `states` vector, used to + resolve interaction terms. + + Returns: + Evaluators aligned with `kappa_terms`. + + Raises: + ValueError: If a kappa term is not one of the supported forms. + + """ + return [_make_monomial_evaluator(term, factor_positions) for term in kappa_terms] + + +def _parse_kappa_term( + term: str, + factor_positions: Mapping[str, int], +) -> tuple[int, tuple[tuple[int, int], ...]]: + """Parse a kappa monomial into its cf power and `(position, power)` factors. + + A kappa term is a monomial `cf ** a * factor_1 ** b_1 * ...` written with the + same spacing as the built-in transition parameter names (`" * "` between + atoms, `" ** "` for powers, a bare name for power 1). Returns the cf power + (which must be at least one) and the `(states position, power)` pairs. + """ + cf_power = 0 + factor_powers: list[tuple[int, int]] = [] + for atom in term.split(" * "): + if atom == "cf": + cf_power += 1 + elif atom.startswith("cf ** "): + cf_power += int(atom.removeprefix("cf ** ")) + elif " ** " in atom: + factor, power = atom.split(" ** ") + factor_powers.append((factor_positions[factor], int(power))) + else: + factor_powers.append((factor_positions[atom], 1)) + if cf_power == 0: + msg = ( + f"Kappa term {term!r} must include cf (e.g. 'cf', 'cf ** 2', " + "'cf * factor', 'cf ** 2 * factor_1 * factor_2')." + ) + raise ValueError(msg) + return cf_power, tuple(factor_powers) + + +def _make_monomial_evaluator( + term: str, + factor_positions: Mapping[str, int], +) -> Callable[[Array, Array], Array]: + cf_power, factor_powers = _parse_kappa_term(term, factor_positions) + + def evaluator(cf: Array, states: Array) -> Array: + result = cf**cf_power + for position, power in factor_powers: + result = result * states[position] ** power + return result + + return evaluator + + +def generate_kappa_terms( + factors: Sequence[str], + max_degree: int, + max_cf_power: int | None = None, +) -> tuple[str, ...]: + """Generate the complete cf-interaction basis up to a total degree. + + Every monomial `cf ** a * prod_i factor_i ** b_i` with `a >= 1`, `b_i >= 0` + and `a + sum_i b_i <= max_degree` (optionally capping the cf power at + `max_cf_power`). At `max_degree=1` this is just `("cf",)`; at `max_degree=2` + over two factors it is the translog set `cf, cf * f1, cf * f2, cf ** 2`. + Pass the result as a target's `kappa_terms` and pin unwanted coefficients to + zero with an optimagic constraint. + + Args: + factors: The state factors that interact with cf. + max_degree: Maximum total degree of a monomial (cf power plus factor + powers). + max_cf_power: Optional cap on the cf power. Defaults to `max_degree`. + + Returns: + The kappa term names, in ascending degree order. + + """ + factors = tuple(factors) + cap = max_degree if max_cf_power is None else min(max_cf_power, max_degree) + terms: list[str] = [] + for cf_power in range(1, cap + 1): + for factor_powers in _bounded_power_tuples(len(factors), max_degree - cf_power): + terms.append(_monomial_name(cf_power, factor_powers, factors)) + return tuple(terms) + + +def _bounded_power_tuples(n_factors: int, total: int) -> Iterator[tuple[int, ...]]: + """Yield non-negative integer tuples of length `n_factors` summing to <= total.""" + if n_factors == 0: + yield () + return + for first in range(total + 1): + for rest in _bounded_power_tuples(n_factors - 1, total - first): + yield (first, *rest) + + +def _monomial_name( + cf_power: int, + factor_powers: Sequence[int], + factors: Sequence[str], +) -> str: + parts = ["cf" if cf_power == 1 else f"cf ** {cf_power}"] + for factor, power in zip(factors, factor_powers, strict=True): + if power == 1: + parts.append(factor) + elif power >= 2: + parts.append(f"{factor} ** {power}") + return " * ".join(parts) + + +def build_kappa_addition_node( + kappa_key: str, + kappa_evaluators: Sequence[Callable[[Array, Array], Array]], +) -> Callable[[Array, Mapping[str, Array], Array, Array], Array]: + """Add `sum_k kappa_k * cf_term_k` to a target factor's base output. + + Kappa coefficients live in their own transition-coeffs key (a separate + `kappa` params category), so the base production node is left completely + untouched: its arguments, parameter layout, and DAG dependencies are + unchanged, which keeps both built-in (positional, constant-last) and custom + (named-factor) transitions working. The kappa contribution is added to the + scalar base output, outside any translog/CES aggregator. + + Args: + kappa_key: The target's key into the transition-coeffs dict holding its + period-sliced kappa coefficients (aligned with `kappa_evaluators`). + kappa_evaluators: One evaluator per kappa term (see + `build_kappa_term_evaluators`). + + Returns: + A node `(base_value, params, cf, states) -> next state`. The first + argument is the base factor transition's output; the caller renames it + to the base node's name when wiring the DAG. + + """ + + def add_kappa( + base_value: Array, + params: Mapping[str, Array], + cf: Array, + states: Array, + ) -> Array: + kappa = params[kappa_key] + result = base_value + for coefficient, evaluator in zip(kappa, kappa_evaluators, strict=True): + result = result + coefficient * evaluator(cf, states) + return result + + return add_kappa diff --git a/src/skillmodels/correlation_heatmap.py b/src/skillmodels/common/correlation_heatmap.py similarity index 97% rename from src/skillmodels/correlation_heatmap.py rename to src/skillmodels/common/correlation_heatmap.py index be0f6aff..595127b8 100644 --- a/src/skillmodels/correlation_heatmap.py +++ b/src/skillmodels/common/correlation_heatmap.py @@ -4,15 +4,18 @@ import numpy as np import pandas as pd +from beartype import beartype from numpy.typing import NDArray from plotly import graph_objects as go -from skillmodels.model_spec import ModelSpec -from skillmodels.process_data import pre_process_data -from skillmodels.process_model import process_model -from skillmodels.types import ProcessedModel +from skillmodels._beartype_conf import DIAGNOSTICS_CONF +from skillmodels.common.model_spec import ModelSpec +from skillmodels.common.process_data import pre_process_data +from skillmodels.common.process_model import process_model +from skillmodels.common.types import ProcessedModel +@beartype(conf=DIAGNOSTICS_CONF) def plot_correlation_heatmap( corr: pd.DataFrame, heatmap_kwargs: dict[str, Any] | None = None, @@ -132,6 +135,7 @@ def plot_correlation_heatmap( return fig +@beartype(conf=DIAGNOSTICS_CONF) def get_measurements_corr( data: pd.DataFrame, model_spec: ModelSpec, @@ -175,6 +179,7 @@ def get_measurements_corr( return df.corr() +@beartype(conf=DIAGNOSTICS_CONF) def get_quasi_scores_corr( data: pd.DataFrame, model_spec: ModelSpec, @@ -221,6 +226,7 @@ def get_quasi_scores_corr( return df.corr() +@beartype(conf=DIAGNOSTICS_CONF) def get_scores_corr( data: pd.DataFrame, params: pd.DataFrame, @@ -405,6 +411,8 @@ def _get_measurement_data_for_single_period( )["variable"].to_list() for fac in observed_factors: measurements.append(fac) + # A measurement that loads on several factors is one column. + measurements = list(dict.fromkeys(measurements)) return data.query(f"{update_info_by_period.index.names[0]}=={period}")[measurements] @@ -786,10 +794,15 @@ def _get_factor_scores_data_for_multiple_periods( def _process_factors( - model: ProcessedModel, + model: Any, # noqa: ANN401 factors: list[str] | tuple[str, ...] | str | None, ) -> tuple[tuple[str, ...], tuple[str, ...]]: - """Process factors to get a tuple of tuples.""" + """Process factors to get a tuple of tuples. + + `model` is annotated `Any` because tests pass minimal duck-typed + namespaces that only expose `.labels.latent_factors` / + `.labels.observed_factors`. Production callers pass a `ProcessedModel`. + """ if not factors: latent_factors = model.labels.latent_factors observed_factors = model.labels.observed_factors diff --git a/src/skillmodels/decorators.py b/src/skillmodels/common/decorators.py similarity index 100% rename from src/skillmodels/decorators.py rename to src/skillmodels/common/decorators.py diff --git a/src/skillmodels/diagnostic_plots.py b/src/skillmodels/common/diagnostic_plots.py similarity index 80% rename from src/skillmodels/diagnostic_plots.py rename to src/skillmodels/common/diagnostic_plots.py index 21d45634..66fb8e84 100644 --- a/src/skillmodels/diagnostic_plots.py +++ b/src/skillmodels/common/diagnostic_plots.py @@ -5,47 +5,48 @@ import numpy as np import pandas as pd import plotly.graph_objects as go +from beartype import beartype -from skillmodels.maximization_inputs import get_maximization_inputs -from skillmodels.model_spec import ModelSpec -from skillmodels.process_model import process_model +from skillmodels._beartype_conf import DIAGNOSTICS_CONF +from skillmodels.common.model_spec import ModelSpec +from skillmodels.common.process_model import process_model +@beartype(conf=DIAGNOSTICS_CONF) def plot_residual_boxplots( model_spec: ModelSpec, - data: pd.DataFrame, - params: pd.DataFrame, - period: int | None = None, *, + residuals: pd.DataFrame, + period: int | None = None, show_reference_line: bool = True, layout_kwargs: dict[str, Any] | None = None, ) -> go.Figure | dict[int, go.Figure]: """Create boxplots of measurement residuals by measurement variable. - Residuals are computed as the difference between observed measurements and - their predicted values based on filtered states. + Residuals are the difference between observed measurements and their + predicted values based on filtered latent states. The caller is + responsible for producing this DataFrame from their estimator's + debug output (e.g. CHS's + ``get_maximization_inputs(...)["debug_loglike"](params)["residuals"]``). Args: - model_spec: The model specification. - data: Empirical dataset used to estimate the model. - params: Estimated model parameters. - period: If provided, create a single figure for that period. If None, - returns a dictionary mapping periods to figures. + model_spec: The model specification, used to map ``aug_period`` + back to user-facing ``period``. + residuals: DataFrame with at minimum the columns ``aug_period``, + ``measurement``, and ``residual``. + period: If provided, create a single figure for that period. If + ``None``, returns a dictionary mapping periods to figures. show_reference_line: Whether to show a horizontal reference line at zero. layout_kwargs: Dictionary of keyword arguments for Plotly layout. - Returns: + Return: If period is specified, returns a single go.Figure. Otherwise, returns a dictionary mapping period numbers to figures. """ - max_inputs = get_maximization_inputs(model_spec=model_spec, data=data) - # debug_loglike already returns processed debug data - processed_debug = max_inputs["debug_loglike"](params) - processed_model = process_model(model_spec) - residuals_df = processed_debug["residuals"] + residuals_df = residuals update_info = processed_model.update_info # Get period column name @@ -92,7 +93,7 @@ def plot_residual_boxplots( def _create_residual_boxplot_for_period( residuals_df: pd.DataFrame, - period: int, + period: int | np.integer, period_col: str, *, show_reference_line: bool, @@ -135,36 +136,37 @@ def _create_residual_boxplot_for_period( return fig +@beartype(conf=DIAGNOSTICS_CONF) def plot_likelihood_contributions( model_spec: ModelSpec, - data: pd.DataFrame, - params: pd.DataFrame, - period: int | None = None, *, + contributions: pd.DataFrame, + period: int | None = None, layout_kwargs: dict[str, Any] | None = None, ) -> go.Figure | dict[int, go.Figure]: """Create boxplots of log-likelihood contributions by measurement. + The caller is responsible for producing the contributions DataFrame + from their estimator's debug output (e.g. CHS's + ``get_maximization_inputs(...)["debug_loglike"](params)["all_contributions"]``). + Args: - model_spec: The model specification. - data: Empirical dataset used to estimate the model. - params: Estimated model parameters. - period: If provided, create a single figure for that period. If None, - returns a dictionary mapping periods to figures. + model_spec: The model specification, used to map ``aug_period`` + back to user-facing ``period``. + contributions: DataFrame with at minimum the columns + ``aug_period``, ``measurement``, and ``contribution``. + period: If provided, create a single figure for that period. If + ``None``, returns a dictionary mapping periods to figures. layout_kwargs: Dictionary of keyword arguments for Plotly layout. - Returns: + Return: If period is specified, returns a single go.Figure. Otherwise, returns a dictionary mapping period numbers to figures. """ - max_inputs = get_maximization_inputs(model_spec=model_spec, data=data) - # debug_loglike already returns processed debug data - processed_debug = max_inputs["debug_loglike"](params) - processed_model = process_model(model_spec) - contributions_df = processed_debug["all_contributions"] + contributions_df = contributions update_info = processed_model.update_info period_col = "aug_period" @@ -208,7 +210,7 @@ def plot_likelihood_contributions( def _create_likelihood_boxplot_for_period( contributions_df: pd.DataFrame, - period: int, + period: int | np.integer, period_col: str, layout_kwargs: dict[str, Any] | None, ) -> go.Figure: diff --git a/src/skillmodels/common/estimation.py b/src/skillmodels/common/estimation.py new file mode 100644 index 00000000..57d9c54f --- /dev/null +++ b/src/skillmodels/common/estimation.py @@ -0,0 +1,64 @@ +"""Cross-estimator structural Protocols. + +The three estimators (CHS, AF, AMN) each return a rich, concrete result +dataclass with estimator-specific extras (`period_results`, `stages`, +`optimize_result`, ...). `CommonEstimationResult` and +`CommonEstimationOptions` capture the *minimal* surface every consumer can +rely on regardless of which estimator produced the object, so harmonised +post-estimation code (state extraction, plotting, tabulation) can be written +once. They are `runtime_checkable` Protocols, not base classes: the concrete +dataclasses conform structurally and a single conformance test guards the +contract. +""" + +from collections.abc import Mapping +from typing import Any, Protocol, runtime_checkable + +import pandas as pd + +from skillmodels.common.model_spec import ModelSpec + + +@runtime_checkable +class CommonEstimationResult(Protocol): + """Minimal result surface shared by every estimator's result object. + + Invariant: **exactly one** of `loglikelihood` / `md_criterion` is + non-`None`. Likelihood-based estimators (CHS, AF) fill `loglikelihood` + and leave `md_criterion` `None`; the minimum-distance estimator (AMN) + does the reverse. This lets a caller branch on *which* objective was + optimised without importing the concrete result types. + """ + + model_spec: ModelSpec + """The `ModelSpec` that was estimated.""" + + params: pd.DataFrame + """Estimated parameters with the standard 4-level MultiIndex + (category, period, name1, name2) and a `"value"` column.""" + + success: bool + """Whether the estimator's optimisation converged.""" + + loglikelihood: float | None + """Maximised log-likelihood (CHS, AF); `None` for AMN.""" + + md_criterion: float | None + """Minimum-distance criterion at the optimum (AMN); `None` for CHS/AF.""" + + +@runtime_checkable +class CommonEstimationOptions(Protocol): + """Minimal options surface shared by every estimator's options object. + + Every estimator ultimately drives `optimagic`; these two fields are the + universal optimiser knobs. Estimator-specific tuning (Halton counts, EM + restarts, start-value strategy, ...) lives on the concrete options + dataclasses and is intentionally absent here. + """ + + optimizer_algorithm: str + """`optimagic` algorithm name passed to `minimize`/`maximize`.""" + + optimizer_options: Mapping[str, Any] + """Extra keyword arguments forwarded to the `optimagic` call.""" diff --git a/src/skillmodels/common/fixed_constraint.py b/src/skillmodels/common/fixed_constraint.py new file mode 100644 index 00000000..0296f7d2 --- /dev/null +++ b/src/skillmodels/common/fixed_constraint.py @@ -0,0 +1,46 @@ +"""`FixedConstraintWithValue`: leaf data type used across constraint code. + +Lives in its own module so that low-level callers (`transition_functions`, +`af/params`, etc.) can import it without triggering the heavier +`skillmodels.common.constraints` module — `constraints.py` imports +`transition_functions`, which would otherwise force a circular import or +a `TYPE_CHECKING` guard that beartype.claw cannot resolve at decoration +time. +""" + +import functools +from dataclasses import dataclass + +import optimagic as om +import pandas as pd + +from skillmodels.common.selector import select_by_loc + + +@dataclass(frozen=True) +class FixedConstraintWithValue(om.FixedConstraint): + """Fixed constraint that carries the target value and parameter location. + + `om.FixedConstraint` fixes parameters at their start values but does not carry a + target value. This wrapper adds `loc` (the parameter location in the params + DataFrame) and `value` (the value to set before optimization). + """ + + loc: pd.MultiIndex | tuple | str | None = None + """Parameter location in the params DataFrame.""" + value: float | None = None + """Value to enforce on the parameter.""" + + def __post_init__(self) -> None: + """Validate that `loc` and `value` are not None and derive `selector`.""" + if self.loc is None: + msg = "loc must not be None" + raise TypeError(msg) + if self.value is None: + msg = "value must not be None" + raise TypeError(msg) + object.__setattr__( + self, + "selector", + functools.partial(select_by_loc, loc=self.loc), + ) diff --git a/src/skillmodels/common/identification.py b/src/skillmodels/common/identification.py new file mode 100644 index 00000000..38cf4dd8 --- /dev/null +++ b/src/skillmodels/common/identification.py @@ -0,0 +1,458 @@ +"""Transition-aware identification anchor diagnostics (audit F6/F7/F8). + +The initial-period latent distribution is not produced by any transition, so +its affine orbit (scale + location) must be pinned directly. `check_initial_anchors` +verifies that, dispatching on each factor's transition type: + +Every factor with an initial distribution needs BOTH a scale anchor and a location +anchor at the initial period, regardless of transition. The scale anchor is a +finite, nonzero loading; the location anchor is a finite measurement intercept OR, +equivalently, a finite fixed initial-component latent mean (the CHS convention pins +the latter and leaves the measurement constants free). The CES simplex +`sum_i gamma_i = 1` does NOT supply the initial location anchor (Pro F1: plain CES +obeys f(x+c,i+c)=f(x,i)+c, so a common shift of all latent inputs leaves observables +unchanged while preserving the simplex); it only replaces the *cross-period* +skills-location alternative, which this period-0 precheck does not police. + +An anchor may come from a `Normalizations` map, a `fixed_params` pin, or a +`select_by_loc` equality constraint connected to a numerically pinned member. The +pinned VALUE (not just the key) is propagated through equality components and then +tested against the category rule, so a loading tied to a zero intercept does not +masquerade as a scale anchor. A factor whose `normalizations is None` is checked the +same way against its fixed/equality anchors, not skipped. Periods t>0 are +intentionally not checked here: an unrestricted +transition transforms along with a later latent's affine orbit, so verifying +those needs a full transition-aware diagnostic (a larger, separate piece). This +is therefore an INITIAL-ANCHOR PRECHECK, not a complete identification proof: an +empty result means `initial_anchor_ok`, with later identification unverified. + +This is the estimator-agnostic core: identification of the initial latent +distribution is a property of the model, not of any estimator. +`fail_if_initial_state_unanchored` wraps it as a hard gate that `estimate_af` +(via `validate_af_model`), `estimate_chs` +and `estimate_amn` all run by default, so an unanchored initial distribution raises in +every estimator. The gate lives at the estimator entry (not in `process_model`) because +the alternative anchor sources (`fixed_params`, equality `constraints`) are only known +there, not from the bare `ModelSpec`. Each estimator exposes a `require_initial_anchors` +switch to turn the gate off for models that are intentionally location-under-identified +-- e.g. the original CHS replication convention, where the initial latent mean is a free +parameter seeded to 0 rather than pinned by an intercept normalization. + +RESTRICTED-CES SCALE SHARING (Pro F5). For a restricted-CES skill factor, the +production restrictions identify the relative skill/investment scales, so only +ONE primitive scale anchor is needed across the connected skill-investment system +(on lambda_theta,0,1 OR lambda_I,0,1); a second loading pin is then a testable +restriction, not a normalization. This is split deliberately between the two +sides of the diagnostic: + +- The HARD GATE (`check_initial_anchors` / `fail_if_initial_state_unanchored`) stays + per-factor and CONSERVATIVE: it requires each factor with an initial + distribution to carry its own scale anchor. A precise per-system requirement + needs the production graph plus nonzero-share information, which is not + available from the bare `ModelSpec`; a crude graph could make the gate PASS a + genuinely scale-under-identified model, which is worse than over-requiring. In + the standard setup investment is endogenous with + `has_initial_distribution=False`, so it is skipped and exactly one scale anchor + (on skills) is required -- correct. The only cost is over-requiring a redundant + anchor in the exotic case where a CES input factor ALSO carries its own initial + distribution; pass `require_initial_anchors=False` (or add the redundant anchor) + there. +- The WARN side (`find_excess_initial_restrictions` / + `warn_if_overrestricted`) IS restricted-CES aware: when a restricted-CES + production is present it accounts scale anchors once across the CES system and + flags a second independent scale pin as a testable restriction. Being + imprecise here only over- or under-emits a warning, never weakens the gate. +""" + +import math +import warnings +from collections.abc import Iterable + +import optimagic as om +import pandas as pd + +from skillmodels.common.constraints import _equality_constraint_loc +from skillmodels.common.model_spec import FactorSpec, ModelSpec + +# Restricted CES (psi=1) production is affine in its latent inputs, so the +# production shares identify the relative scales of the combined factors; one +# primitive scale anchor propagates to the whole system. The general +# `log_ces_general` form is excluded (it does not impose the restriction). +_RESTRICTED_CES_TRANSITIONS = frozenset( + {"log_ces", "log_ces_af", "log_ces_with_constant"} +) + + +def _restricted_ces_scale_system(model_spec: ModelSpec) -> frozenset[str]: + """Return latent factors that share one scale through restricted-CES production. + + When any factor uses a restricted-CES transition, the production combines the + latent factors into a system whose relative scales the CES restrictions identify + from a single primitive anchor (see `recover_primitive_ces_scales`). skillmodels + CES production is over the full latent state, so the system is the set of latent + factors that carry an initial distribution. Returns an empty set when no + restricted-CES transition is present (the translog default: each factor anchors + its own scale) or when fewer than two such factors exist (no sharing to report). + """ + has_restricted_ces = any( + isinstance(spec.transition_function, str) + and spec.transition_function in _RESTRICTED_CES_TRANSITIONS + for spec in model_spec.factors.values() + ) + if not has_restricted_ces: + return frozenset() + members = frozenset( + name + for name, spec in model_spec.factors.items() + if spec.has_initial_distribution + ) + return members if len(members) >= 2 else frozenset() + + +def _is_scale_anchor_value(value: float) -> bool: + """A loading (scale) anchor must be finite and nonzero (Pro F1). + + A zero loading is invariant to every rescaling of the latent factor and so + cannot pin its scale; non-finite values do not define a valid model. + """ + return math.isfinite(value) and value != 0.0 + + +def _is_location_anchor_value(value: float) -> bool: + """An intercept (location) anchor must be finite (Pro F1).""" + return math.isfinite(value) + + +def _pinned_values( + model_spec: ModelSpec, + fixed_params: pd.DataFrame | None, +) -> dict[tuple[object, ...], float]: + """Map every numerically pinned parameter key to its value. + + Combines `Normalizations` (loadings to `("loadings", period, meas, factor)`, + intercepts to `("controls", period, meas, "constant")`) with `fixed_params` + rows. Keeping the value -- not just the key -- lets the caller apply the + category-specific anchor rule: a loading pins scale only when finite and + nonzero, a location anchor needs only finiteness. + """ + pinned: dict[tuple[object, ...], float] = {} + for factor, spec in model_spec.factors.items(): + norms = spec.normalizations + if norms is None: + continue + for period, loadings in enumerate(norms.loadings or ()): + for meas, value in loadings.items(): + pinned[("loadings", period, meas, factor)] = float(value) + for period, intercepts in enumerate(norms.intercepts or ()): + for meas, value in intercepts.items(): + pinned[("controls", period, meas, "constant")] = float(value) + if fixed_params is not None: + values = fixed_params["value"].to_numpy() + for idx, value in zip(fixed_params.index, values, strict=True): + pinned[tuple(idx)] = float(value) + return pinned + + +def _equality_components( + constraints: list[om.constraints.Constraint] | None, +) -> list[frozenset[tuple[object, ...]]]: + """Return connected components of keys tied equal by `select_by_loc` groups. + + Two keys share a component when one equality group lists them together or a + chain of overlapping groups connects them; standalone keys are omitted. + """ + components: list[set[tuple[object, ...]]] = [] + for constraint in constraints or []: + loc = _equality_constraint_loc(constraint) + if loc is None: + continue + merged = {tuple(idx) for idx in loc} + disjoint: list[set[tuple[object, ...]]] = [] + for component in components: + if component & merged: + merged |= component + else: + disjoint.append(component) + disjoint.append(merged) + components = disjoint + return [frozenset(component) for component in components] + + +def _propagate_equality_values( + pinned: dict[tuple[object, ...], float], + components: list[frozenset[tuple[object, ...]]], +) -> dict[tuple[object, ...], float]: + """Spread each equality component's agreed value to all its members (Pro F3). + + A member inherits a value only when its component's pinned members agree on a + single value; a component with conflicting pins fabricates no anchor. Carrying + the VALUE -- not merely the membership -- stops a loading tied to a zero + intercept from masquerading as a scale anchor. + """ + propagated = dict(pinned) + for component in components: + component_values = {pinned[key] for key in component if key in pinned} + if len(component_values) == 1: + (value,) = component_values + for key in component: + propagated[key] = value + return propagated + + +def fail_if_initial_state_unanchored( + model_spec: ModelSpec, + fixed_params: pd.DataFrame | None = None, + constraints: list[om.constraints.Constraint] | None = None, +) -> None: + """Raise if any factor's initial-period affine orbit is unanchored. + + The estimator-agnostic gate every entry point runs by default: + `check_initial_anchors` collects the missing period-0 scale/location anchors + and this wrapper turns a non-empty result into a `ValueError`. Identification + of the initial latent distribution is a property of the model, not of the + estimator, so AF, CHS and AMN all enforce it. Anchors may come from + `Normalizations`, `fixed_params`, or a connected equality constraint (all + passed through to `check_initial_anchors`). + + Raises: + ValueError: If the initial-anchor precheck reports any problem. + + """ + problems = check_initial_anchors(model_spec, fixed_params, constraints) + if problems: + msg = ( + "ModelSpec initial-period latent distribution is not anchored " + "(initial-anchor precheck failed; later-period identification is a " + "separate question this gate does not certify):\n" + + "\n".join(f" - {problem}" for problem in problems) + ) + raise ValueError(msg) + + +def check_initial_anchors( + model_spec: ModelSpec, + fixed_params: pd.DataFrame | None = None, + constraints: list[om.constraints.Constraint] | None = None, +) -> list[str]: + """Return problems with the initial-period affine anchoring of each factor. + + Empty list means every factor with an initial distribution has both a period-0 + scale anchor (a finite, nonzero loading) and a period-0 location anchor (a + finite measurement intercept or a finite fixed initial-component latent mean). + Anchors come from `Normalizations`, `fixed_params`, or equality constraints + connected to a numerically pinned member; the pinned VALUE -- not just the key + -- decides whether the category-specific anchor rule is met. A factor whose + `normalizations is None` is checked the same way, against whatever fixed/equality + anchors it has, rather than skipped. + """ + pinned = _pinned_values(model_spec, fixed_params) + pinned = _propagate_equality_values(pinned, _equality_components(constraints)) + problems: list[str] = [] + for factor_name, spec in model_spec.factors.items(): + if not spec.has_initial_distribution: + continue + if len(spec.measurements) == 0 or len(spec.measurements[0]) == 0: + continue + measures = spec.measurements[0] + + # The initial distribution is not produced by a transition, so its scale + # and location orbits must be pinned directly. A loading pins scale only + # when finite and nonzero (the CES simplex does NOT supply the location + # anchor: f(x+c,i+c)=f(x,i)+c leaves a common-shift orbit). The location + # anchor is a finite measurement intercept OR a finite fixed + # initial-component latent mean (the CHS convention leaves the measurement + # constants free). + has_loading = any( + _is_scale_anchor_value(pinned[key]) + for meas in measures + if (key := ("loadings", 0, meas, factor_name)) in pinned + ) + has_intercept = any( + _is_location_anchor_value(pinned[key]) + for meas in measures + if (key := ("controls", 0, meas, "constant")) in pinned + ) or any( + _is_location_anchor_value(pinned[key]) + for component in range(model_spec.n_mixtures) + if (key := ("initial_states", 0, f"mixture_{component}", factor_name)) + in pinned + ) + + if not has_loading: + problems.append( + f"Factor '{factor_name}' period 0: no loading normalization " + f"(scale anchor). The initial distribution is not produced by a " + f"transition, so its scale must be pinned directly. Add a " + f"loading=1 normalization for one period-0 measurement, a " + f"`fixed_params` loading pin, or an equality constraint." + ) + if not has_intercept: + problems.append( + f"Factor '{factor_name}' period 0: no location anchor. The initial " + f"distribution is not produced by a transition, so its location " + f"must be pinned directly. Add an intercept=0 normalization for one " + f"period-0 measurement, a `fixed_params` intercept pin, a " + f"`fixed_params` pin on one initial-component mean " + f"(`initial_states`, the CHS convention), or an equality constraint." + ) + return problems + + +def _initial_anchor_keys( + factor_name: str, + spec: FactorSpec, + pinned: dict[tuple[object, ...], float], + n_mixtures: int, +) -> tuple[list[tuple[str, int, str, str]], list[tuple[str, int, str, str]]]: + """Return the pinned period-0 scale and location anchor keys for a factor. + + Scale keys are finite-nonzero period-0 loadings; location keys are finite + period-0 measurement intercepts plus finite fixed initial-component means. + """ + measures = spec.measurements[0] + scale_keys = [ + key + for meas in measures + if (key := ("loadings", 0, meas, factor_name)) in pinned + and _is_scale_anchor_value(pinned[key]) + ] + location_keys = [ + key + for meas in measures + if (key := ("controls", 0, meas, "constant")) in pinned + and _is_location_anchor_value(pinned[key]) + ] + [ + key + for component in range(n_mixtures) + if (key := ("initial_states", 0, f"mixture_{component}", factor_name)) in pinned + and _is_location_anchor_value(pinned[key]) + ] + return scale_keys, location_keys + + +def _scale_excess_message(factor_name: str, n_scale: int) -> list[str]: + """Return the per-factor scale over-restriction message, if any.""" + if n_scale <= 1: + return [] + return [ + f"Factor '{factor_name}' period 0: {n_scale} independent scale pins " + f"(loadings), but the initial scale orbit has one direction. " + f"{n_scale - 1} of them are testable restrictions, not normalizations -- " + f"they constrain identified features and can move the estimate under " + f"misspecification." + ] + + +def _location_excess_message(factor_name: str, n_location: int) -> list[str]: + """Return the per-factor location over-restriction message, if any.""" + if n_location <= 1: + return [] + return [ + f"Factor '{factor_name}' period 0: {n_location} independent location pins " + f"(measurement intercept and/or initial-component mean), but the initial " + f"location orbit has one direction. {n_location - 1} of them are testable " + f"restrictions, not normalizations." + ] + + +def find_excess_initial_restrictions( + model_spec: ModelSpec, + fixed_params: pd.DataFrame | None = None, + constraints: list[om.constraints.Constraint] | None = None, +) -> list[str]: + """Report period-0 anchoring restrictions that exceed the affine orbit (Pro F4). + + `check_initial_anchors` is one-sided: it flags *too few* anchors. This is the + complementary side -- it flags *too many*. Each factor's initial affine orbit + has exactly two free directions, one scale and one location, so exactly one + independent scale pin and one independent location pin are normalizations. Any + further independent pin is a *testable* restriction: it constrains an identified + feature of the model and can move the pseudo-true estimate under misspecification, + rather than merely choosing units or origin. A second period-0 loading pin and a + simultaneous measurement-intercept + initial-mean pin are the common cases. + + Returns one human-readable string per over-restricted scale/location block; an + empty list means each orbit direction is pinned at most once. Pins tied together + by an equality constraint count as a single restriction, so consistent equality + chains never trip the check. + + Restricted-CES scale sharing (Pro F5): when the model uses a restricted-CES + production (`log_ces` / `log_ces_af` / `log_ces_with_constant`), the production + shares identify the RELATIVE scales of the factors the CES combines, so a single + primitive scale anchor across the whole CES system is the only scale + normalization (see `recover_primitive_ces_scales`). A per-factor scale anchor on a + second CES factor is therefore a testable restriction. The scale accounting for + those factors is reported once at the SYSTEM level rather than per factor. This is + the WARN side only -- the hard gate (`fail_if_initial_state_unanchored`) stays + per-factor and conservative, so it never passes a genuinely scale-under-identified + model on the + strength of an assumed CES link. + """ + pinned = _pinned_values(model_spec, fixed_params) + components = _equality_components(constraints) + component_of: dict[tuple[object, ...], int] = {} + for index, component in enumerate(components): + for key in component: + component_of[key] = index + + def _independent_count(keys: Iterable[tuple[object, ...]]) -> int: + return len({component_of.get(key, key) for key in keys}) + + ces_system = _restricted_ces_scale_system(model_spec) + + messages: list[str] = [] + system_scale_keys: list[tuple[object, ...]] = [] + for factor_name, spec in model_spec.factors.items(): + if not spec.has_initial_distribution: + continue + if len(spec.measurements) == 0 or len(spec.measurements[0]) == 0: + continue + scale_keys, location_keys = _initial_anchor_keys( + factor_name, spec, pinned, model_spec.n_mixtures + ) + + if factor_name in ces_system: + # Scale accounting is deferred to the system-level check below, since + # the CES restrictions pin one scale across all member factors. + system_scale_keys.extend(scale_keys) + else: + messages.extend( + _scale_excess_message(factor_name, _independent_count(scale_keys)) + ) + messages.extend( + _location_excess_message(factor_name, _independent_count(location_keys)) + ) + + n_system_scale = _independent_count(system_scale_keys) + if n_system_scale > 1: + members = ", ".join(f"'{name}'" for name in sorted(ces_system)) + messages.append( + f"Restricted-CES scale system ({members}) period 0: {n_system_scale} " + f"independent scale pins (loadings) across the system, but the CES " + f"restrictions identify the relative scales from a SINGLE primitive " + f"anchor. {n_system_scale - 1} of them are testable restrictions, not " + f"normalizations." + ) + return messages + + +def warn_if_overrestricted( + model_spec: ModelSpec, + fixed_params: pd.DataFrame | None = None, + constraints: list[om.constraints.Constraint] | None = None, + *, + stacklevel: int = 3, +) -> None: + """Emit a `UserWarning` for each period-0 restriction beyond a normalization. + + The mirror image of `fail_if_initial_state_unanchored`: that gate fires when an + initial orbit direction is UNPINNED (under-identification); this one fires when a + direction is pinned MORE THAN ONCE. A surplus pin constrains an identified + feature, so it is a testable restriction rather than a free normalization and can + move the estimate under misspecification. Warning (not raising) keeps such models + estimable while flagging the implicit restriction to the user. + """ + for restriction in find_excess_initial_restrictions( + model_spec, fixed_params, constraints + ): + warnings.warn(restriction, UserWarning, stacklevel=stacklevel) diff --git a/src/skillmodels/common/individual_states.py b/src/skillmodels/common/individual_states.py new file mode 100644 index 00000000..ee884fff --- /dev/null +++ b/src/skillmodels/common/individual_states.py @@ -0,0 +1,173 @@ +"""Cross-estimator extraction of per-individual latent states. + +Replaces the old `get_filtered_states` (the "filtered" name was a Kalman +term that did not fit AF/AMN). Two entry points: + +* `get_individual_states(data, result)` dispatches on the estimation + result type and is the harmonised, recommended call. +* `get_individual_states_from_params(model_spec, data, params)` is the + CHS-only Kalman-from-raw-parameters escape hatch (AF/AMN need their + result machinery, so there is no raw-params path for them). +""" + +from dataclasses import replace +from typing import Any + +import pandas as pd +from beartype import beartype + +from skillmodels._beartype_conf import ESTIMATION_CONF + +# Runtime imports (not `TYPE_CHECKING`-guarded) so the beartype perimeter +# can resolve the union annotation without a forward-ref string. The +# `types` modules are negligible-cost; AMN's pulls sklearn lazily. +from skillmodels.af.types import AFEstimationResult +from skillmodels.amn.types import AMNEstimationResult +from skillmodels.chs.maximization_inputs import get_maximization_inputs +from skillmodels.chs.options import CHSEstimationOptions +from skillmodels.chs.types import CHSEstimationResult +from skillmodels.common.anchoring import anchor_states_df +from skillmodels.common.model_spec import ModelSpec +from skillmodels.common.process_model import process_model +from skillmodels.common.state_ranges import create_state_ranges + + +@beartype(conf=ESTIMATION_CONF) +def get_individual_states( + data: pd.DataFrame, + result: CHSEstimationResult | AFEstimationResult | AMNEstimationResult, + *, + chs_options: CHSEstimationOptions | None = None, +) -> dict[str, dict[str, Any]]: + """Compute per-individual latent state estimates from a fitted result. + + Dispatches on the concrete result type; the `ModelSpec` and parameters + are read off `result`. For CHS this filters via the Kalman debug + likelihood; for AF it computes posterior means via Halton quadrature; + for AMN it computes mixture-Schur conditional posteriors of the latent + factors given the augmented measure vector. + + Args: + data: Dataset in long format with MultiIndex (id, period). + result: A `CHSEstimationResult`, `AFEstimationResult`, or + `AMNEstimationResult`. + chs_options: The options the CHS result was estimated with, so the + filter uses the same likelihood settings. Required for a + `CHSEstimationResult`; unused for AF and AMN. + + Return: + Nested dict. The return shape is **asymmetric** across estimators: + + * CHS returns both `"anchored_states"` and `"unanchored_states"`. + * AF and AMN return `"unanchored_states"` only — neither anchors. + + Each present key maps to `{"states": DataFrame, "state_ranges": ...}`. + + """ + if isinstance(result, AFEstimationResult): + from skillmodels.af.posterior_states import ( # noqa: PLC0415 + get_af_posterior_states, + ) + + return get_af_posterior_states( + af_result=result, + model_spec=result.model_spec, + data=data, + ) + + if isinstance(result, AMNEstimationResult): + from skillmodels.amn.posterior_states import ( # noqa: PLC0415 + get_amn_posterior_states, + ) + + return get_amn_posterior_states( + amn_result=result, + data=data, + ) + + if chs_options is None: + msg = ( + "get_individual_states needs `chs_options` for a CHSEstimationResult: " + "pass the CHSEstimationOptions used for the estimation." + ) + raise TypeError(msg) + return get_individual_states_from_params( + model_spec=result.model_spec, + data=data, + params=result.params, + chs_options=chs_options, + ) + + +@beartype(conf=ESTIMATION_CONF) +def get_individual_states_from_params( + model_spec: ModelSpec, + data: pd.DataFrame, + params: pd.DataFrame, + *, + chs_options: CHSEstimationOptions, +) -> dict[str, dict[str, Any]]: + """Compute CHS filtered states directly from raw parameters. + + The escape hatch behind `get_individual_states`'s CHS branch: it runs + the Kalman debug likelihood at `params` without needing a result + object. Inherently CHS-only — AF and AMN reconstruct states from their + result machinery, not from a flat parameter vector. + + Args: + model_spec: Model specification. + data: Dataset in long format with MultiIndex (id, period). + params: Estimated parameter DataFrame (standard 4-level MultiIndex). + chs_options: The options used for the estimation, so the filter uses the + same likelihood settings (e.g. the sigma-point scale). Its + `start_params_strategy` is ignored: no start values are seeded. + + Return: + Dict with both `"anchored_states"` and `"unanchored_states"`, each + `{"states": DataFrame, "state_ranges": ...}`. + + """ + max_inputs = get_maximization_inputs( + model_spec=model_spec, + data=data, + chs_options=replace(chs_options, start_params_strategy="none"), + ) + params = params.loc[max_inputs["params_template"].index] + debug_loglike = max_inputs["debug_loglike"] + debug_data = debug_loglike(params) + unanchored_states_df = debug_data["filtered_states"] + processed_model = process_model(model_spec) + + anchored_states_df = anchor_states_df( + states_df=unanchored_states_df, + model_spec=model_spec, + params=params, + use_aug_period=True, + ) + + # Map aug_period → period for the public API + ap_to_p = processed_model.labels.aug_periods_to_periods + for df in (anchored_states_df, unanchored_states_df): + df["period"] = df["aug_period"].map(ap_to_p) + anchored_states_df = anchored_states_df.drop(columns="aug_period") + unanchored_states_df = unanchored_states_df.drop(columns="aug_period") + + anchored_ranges = create_state_ranges( + filtered_states=anchored_states_df, + factors=processed_model.labels.latent_factors, + ) + unanchored_ranges = create_state_ranges( + filtered_states=unanchored_states_df, + factors=processed_model.labels.latent_factors, + ) + + return { + "anchored_states": { + "states": anchored_states_df, + "state_ranges": anchored_ranges, + }, + "unanchored_states": { + "states": unanchored_states_df, + "state_ranges": unanchored_ranges, + }, + } diff --git a/src/skillmodels/common/measurement_models.py b/src/skillmodels/common/measurement_models.py new file mode 100644 index 00000000..b955d900 --- /dev/null +++ b/src/skillmodels/common/measurement_models.py @@ -0,0 +1,192 @@ +"""Shared measurement-family log-likelihood kernel. + +One JAX-compatible kernel evaluates the log density/probability contribution of a +single measurement given its linear predictor ``eta = c + x'beta + lambda'theta``, +its scale, and a `MeasurementFamily` code. AF estimation, simulation and +posterior-state reweighting route their measurement contributions through this +kernel. CHS (a Gaussian Kalman update) and AMN do not, and reject non-Gaussian +measurements. + +The three families: + +- ``GAUSSIAN`` -- ``log N(y; eta, sigma)``. +- ``PROBIT`` -- ``log Phi((2y-1) eta)`` for ``y in {0, 1}``; the latent error SD is + fixed to 1, so ``sigma`` is ignored. Evaluated through `jax.scipy.special.log_ndtr` + (never ``log(1 - ndtr)``) so the tails stay finite and stable. +- ``TOBIT`` -- censored normal with known bounds: the interior normal log density on + ``L < y < U``, the left tail mass ``Phi((L-eta)/sigma)`` at ``y = L``, and the + right tail mass ``Phi((eta-U)/sigma)`` at ``y = U``. A non-finite bound disables + that side (no censoring there). +""" + +import enum +import math +from collections.abc import Mapping, Sequence +from dataclasses import dataclass + +import jax +import jax.numpy as jnp +import numpy as np +from jax import Array +from jax.scipy.special import log_ndtr +from jax.scipy.stats import norm + + +@dataclass(frozen=True) +class GaussianMeasurement: + """Continuous measure with a free normal measurement-error SD (the default).""" + + +@dataclass(frozen=True) +class ProbitMeasurement: + """Binary 0/1 measure with a standard-normal latent error (scale fixed to 1).""" + + +@dataclass(frozen=True) +class TobitMeasurement: + """Censored-normal measure (not truncated, selected, or zero-inflated). + + `lower` / `upper` are the known censoring bounds; `None` disables that side. + At least one bound must be finite. Observations equal to a bound are treated as + censored (tail mass); interior observations use the normal density. + """ + + lower: float | None = 0.0 + """Lower censoring bound, or `None` for no lower censoring.""" + upper: float | None = None + """Upper censoring bound, or `None` for no upper censoring.""" + + def __post_init__(self) -> None: # noqa: D105 + if self.lower is None and self.upper is None: + msg = "TobitMeasurement needs at least one finite censoring bound." + raise ValueError(msg) + if ( + self.lower is not None + and self.upper is not None + and self.lower >= self.upper + ): + msg = ( + f"TobitMeasurement lower bound ({self.lower}) must be strictly below " + f"the upper bound ({self.upper})." + ) + raise ValueError(msg) + + +# A measurement's observation model, attached per variable on `ModelSpec`. +MeasurementModel = GaussianMeasurement | ProbitMeasurement | TobitMeasurement + + +class MeasurementFamily(enum.IntEnum): + """Observation model attached to a measurement variable. + + Integer-valued so the code can be stored in a JAX array aligned with the + measurement system and compared inside traced/jitted code. A distinct name from + `MeasurementType` (which marks state vs endogenous-factor augmented periods). + """ + + GAUSSIAN = 0 + PROBIT = 1 + TOBIT = 2 + + +def resolve_measurement_family( + model: MeasurementModel, +) -> tuple[MeasurementFamily, float, float]: + """Map a public `MeasurementModel` to its internal `(family, lower, upper)`. + + `lower` / `upper` are the censoring bounds threaded to `measurement_loglik`; + non-Tobit families and open Tobit sides use `-inf` / `+inf`. + """ + if isinstance(model, ProbitMeasurement): + return MeasurementFamily.PROBIT, -math.inf, math.inf + if isinstance(model, TobitMeasurement): + lower = -math.inf if model.lower is None else float(model.lower) + upper = math.inf if model.upper is None else float(model.upper) + return MeasurementFamily.TOBIT, lower, upper + return MeasurementFamily.GAUSSIAN, -math.inf, math.inf + + +def measurement_family_arrays( + measurement_models: Mapping[str, MeasurementModel], + measure_names: Sequence[str], +) -> tuple[np.ndarray, np.ndarray, np.ndarray]: + """Return `(family_codes, lowers, uppers)` aligned to `measure_names`. + + A name absent from `measurement_models` resolves to Gaussian. The arrays line + up row-for-row with a measurement system's loadings / SD arrays so the shared + kernel can be vmapped over them. Each code is a `MeasurementFamily` integer. + """ + resolved = [ + resolve_measurement_family(measurement_models.get(name, GaussianMeasurement())) + for name in measure_names + ] + codes = np.array([int(family) for family, _lo, _hi in resolved], dtype=np.int64) + lowers = np.array([lo for _f, lo, _hi in resolved], dtype=np.float64) + uppers = np.array([hi for _f, _lo, hi in resolved], dtype=np.float64) + return codes, lowers, uppers + + +def measurement_loglik( + y: Array, + eta: Array, + sigma: Array, + family: Array, + lower: Array, + upper: Array, +) -> Array: + """Return the log contribution of one measurement under its family. + + Args: + y: Observed measurement value (0/1 for probit; a censored value for Tobit). + eta: Linear predictor `c + x'beta + lambda'theta`. + sigma: Measurement scale (ignored for probit, which fixes it to 1). + family: A `MeasurementFamily` integer code. + lower: Tobit lower censoring bound (`-inf` to disable). + upper: Tobit upper censoring bound (`+inf` to disable). + + Return: + The scalar log density (Gaussian/Tobit interior) or log probability + (probit, Tobit tail) of the measurement. + + """ + gaussian = norm.logpdf(y, loc=eta, scale=sigma) + probit = log_ndtr((2.0 * y - 1.0) * eta) + tobit = _tobit_loglik(y, eta, sigma, lower, upper) + return jnp.where( + family == int(MeasurementFamily.PROBIT), + probit, + jnp.where(family == int(MeasurementFamily.TOBIT), tobit, gaussian), + ) + + +def _tobit_loglik( + y: Array, eta: Array, sigma: Array, lower: Array, upper: Array +) -> Array: + """Censored-normal log contribution with safe-gradient handling of inf bounds. + + A non-finite bound is replaced by a finite sentinel before any arithmetic so the + masked-out tail term carries no `inf`/`NaN` into `jnp.where` (whose gradient + would otherwise be poisoned), then masked out by the finiteness check. + """ + interior = norm.logpdf(y, loc=eta, scale=sigma) + + lower_finite = jnp.isfinite(lower) + upper_finite = jnp.isfinite(upper) + safe_lower = jnp.where(lower_finite, lower, 0.0) + safe_upper = jnp.where(upper_finite, upper, 0.0) + + left = log_ndtr((safe_lower - eta) / sigma) + right = log_ndtr((eta - safe_upper) / sigma) + + at_lower = lower_finite & (y <= lower) + at_upper = upper_finite & (y >= upper) + return jnp.where(at_lower, left, jnp.where(at_upper, right, interior)) + + +# Vmapped over a 1-D measurement vector (all six arguments share axis 0). Use this +# form INSIDE another jitted/vmapped function (e.g. the AF integrand); it is not +# itself jitted, so it composes without nesting `jax.jit`. +measurement_loglik_vec = jax.vmap(measurement_loglik, in_axes=(0, 0, 0, 0, 0, 0)) + +# Standalone pre-jitted batch form for callers not already inside a jit. +measurement_loglik_batch = jax.jit(measurement_loglik_vec) diff --git a/src/skillmodels/common/model_spec.py b/src/skillmodels/common/model_spec.py new file mode 100644 index 00000000..993db665 --- /dev/null +++ b/src/skillmodels/common/model_spec.py @@ -0,0 +1,551 @@ +"""Strongly-typed model specification dataclasses. + +This module provides frozen dataclasses for defining model specifications +in a type-safe, immutable manner. All collections use immutable types +(tuples, MappingProxyType) to ensure the specification cannot be accidentally +modified. +""" + +from collections.abc import Callable, Mapping +from dataclasses import dataclass, field, replace +from types import MappingProxyType +from typing import Any, Literal, Self + +from skillmodels._beartype_conf import MODEL_SPEC_CONF, beartype_init +from skillmodels.common.measurement_models import ( + GaussianMeasurement, + MeasurementModel, + ProbitMeasurement, + TobitMeasurement, +) +from skillmodels.common.types import ( + Normalizations, + ensure_containers_are_immutable, +) + + +def _parse_measurement_models( + spec: Mapping[str, Mapping[str, Any]] | None, +) -> dict[str, MeasurementModel]: + """Build `MeasurementModel` instances from a `from_dict` measurement_models map. + + Each entry is `{family: "gaussian" | "probit" | "tobit", lower?, upper?}`. + """ + if not spec: + return {} + models: dict[str, MeasurementModel] = {} + for name, cfg in spec.items(): + family = cfg.get("family", "gaussian") + if family == "gaussian": + models[name] = GaussianMeasurement() + elif family == "probit": + models[name] = ProbitMeasurement() + elif family == "tobit": + models[name] = TobitMeasurement( + lower=cfg.get("lower", 0.0), upper=cfg.get("upper") + ) + else: + msg = ( + f"measurement_models['{name}'] has unknown family '{family}'; " + "expected 'gaussian', 'probit', or 'tobit'." + ) + raise ValueError(msg) + return models + + +@beartype_init(MODEL_SPEC_CONF) +@dataclass(frozen=True) +class CorrectionSpec: + """Control-function correction for an endogenous investment factor. + + Declared on the endogenous investment `FactorSpec`. It makes the library + own the AF Section 3.5 / AMN eq. 7-8 control function: a contemporaneous + first-stage equation predicts the investment factor from the present state + factors and excluded observed instruments, and its residual `cf` enters + each target factor's production equation as an additive `kappa * cf` term. + + The same specification is read by both the CHS (Kalman-MLE) and AMN + (simulate-and-regress) estimators, so the control function is configured in + exactly one place regardless of which estimator runs. + """ + + instruments: tuple[str, ...] + """Excluded observed factors entering the first-stage equation only and never + a production (target) equation, identifying `kappa`. Required (at least one); + auto-registered as observed factors by `ModelSpec.with_correction`.""" + state_predictors: tuple[str, ...] = () + """State factors entering the first-stage investment equation. Empty means + all state factors; per-period presence is then handled downstream.""" + targets: tuple[str, ...] = () + """State factors whose production equation receives the additive `kappa * + cf` term. Empty means all state factors.""" + kappa_degree: int | None = None + """Degree of the `cf`-interaction polynomial applied to every target (1 = + linear `cf`, 2 = the translog basis). `None` resolves to degree 1. Mutually + exclusive with `kappa_terms`.""" + kappa_terms: Mapping[str, tuple[str, ...]] | None = None + """Expert per-target override of the `cf` regressor names (e.g. `("cf",)` or + `("cf", "cf ** 2", "cf * health_mom")`). Mutually exclusive with + `kappa_degree`; `None` means expand `kappa_degree`.""" + + def __post_init__(self) -> None: # noqa: D105 + if not self.instruments: + msg = ( + "CorrectionSpec needs at least one excluded observed instrument; " + "otherwise the control-function residual is collinear with the " + "production inputs and kappa is unidentified." + ) + raise ValueError(msg) + if self.kappa_degree is not None and self.kappa_terms is not None: + msg = "kappa_degree and kappa_terms are mutually exclusive; set one." + raise ValueError(msg) + if self.kappa_terms is not None: + object.__setattr__( + self, "kappa_terms", ensure_containers_are_immutable(self.kappa_terms) + ) + + +@beartype_init(MODEL_SPEC_CONF) +@dataclass(frozen=True) +class FactorSpec: + """Specification for a single latent factor.""" + + measurements: tuple[tuple[str, ...], ...] + """Per-period measurement variables. Each element is a tuple of variable names.""" + normalizations: Normalizations | None = None + """Identification normalizations for this factor.""" + is_endogenous: bool = False + """Whether this factor is endogenous.""" + correction: CorrectionSpec | None = None + """Control-function correction declared on an endogenous investment factor. + + When set (and the factor is endogenous), the library forms the deterministic + control-function residual `cf` and injects `kappa * cf` into each target + factor's production equation. `None` means no correction.""" + transition_function: str | Callable | None = None + """Transition function name (e.g. `"linear"`, `"log_ces"`) or a callable.""" + has_production_shock: bool = True + """Whether transitions add a stochastic shock for this factor. + + When `False`, the AF transition integrates the factor deterministically: + no shock SD parameter, no shock dimension in the joint Halton draw, and + the transition output is used as-is. Set this to `False` for + time-invariant factors (combined with an identity transition pinned via + `fixed_params`) to cut integration dimensionality. + """ + has_initial_distribution: bool = True + """Whether this factor is drawn from the AF period-0 mixture distribution. + + When `False`, the factor is not included in the initial joint mixture + (no mean / Cholesky entries for it) and is instead reconstructed + deterministically per Halton draw. Currently only supported in + conjunction with `is_endogenous=True`: the factor's period-0 value is + computed from its investment equation at period 0 plus an investment + shock, with investment-equation and shock parameters estimated as part + of the initial step. The transition function must not depend on the + factor's own lag. + """ + af_state_role: Literal["dynamic", "static_persistent"] = "dynamic" + """AF calendar role of a non-endogenous state factor. + + `"static_persistent"` marks a time-invariant factor (e.g. MC/MN) whose + period-0 measurement density is re-applied as an AF importance factor at + every transition step, because the same latent value re-enters the + investment/production equations at every period. Declared explicitly + rather than inferred from an identity transition (which may be pinned via + `fixed_params`). Ignored by CHS/AMN and for endogenous factors. + """ + + def with_transition_function(self, func: str | Callable) -> Self: + """Return a new FactorSpec with the given transition function.""" + return replace(self, transition_function=func) + + def with_normalizations(self, normalizations: Normalizations) -> Self: + """Return a new FactorSpec with the given normalizations.""" + return replace(self, normalizations=normalizations) + + +@beartype_init(MODEL_SPEC_CONF) +@dataclass(frozen=True) +class AnchoringSpec: + """Specification for anchoring latent factors to outcomes.""" + + outcomes: Mapping[str, str] = field(default_factory=dict) + """Mapping from factor names to outcome variable names.""" + free_controls: bool = False + """Whether control coefficients are free in anchoring equations.""" + free_constant: bool = False + """Whether the constant is free in anchoring equations.""" + free_loadings: bool = False + """Whether loadings are free in anchoring equations.""" + ignore_constant_when_anchoring: bool = False + """Whether to ignore constant when anchoring.""" + + def __post_init__(self) -> None: # noqa: D105 + object.__setattr__( + self, "outcomes", ensure_containers_are_immutable(self.outcomes) + ) + + +@beartype_init(MODEL_SPEC_CONF) +@dataclass(frozen=True, init=False) +class ModelSpec: + """Complete model specification. + + All fields are immutable to prevent accidental modifications. + """ + + _factors: MappingProxyType[str, FactorSpec] + observed_factors: tuple[str, ...] = () + """Observed factor variable names.""" + controls: tuple[str, ...] = () + """Control variable names.""" + stagemap: tuple[int, ...] | None = None + """Stage mapping for transition functions.""" + anchoring: AnchoringSpec | None = None + """Anchoring specification.""" + n_mixtures: int = 1 + """Number of Gaussian-mixture components in the latent-factor distribution.""" + measurement_models: MappingProxyType[str, MeasurementModel] = field( + default_factory=lambda: MappingProxyType({}) + ) + """Per-variable observation model (probit / Tobit / Gaussian). A measurement + omitted from this mapping is Gaussian, so existing specs are unchanged.""" + missing_observed_factor_moments: MappingProxyType[str, tuple[str, str]] = field( + default_factory=lambda: MappingProxyType({}) + ) + """Map an observed factor that may be missing to its `(mean, variance)` columns. + + Where the factor is missing for a person-period, the CHS filter treats it as + `N(mean, variance)`, independent of the latent states, with both moments read + from that person-period's row of the data, and integrates it out in the + predict step. Where the factor is observed, the moment columns are ignored. + An observed factor not listed here must never be missing. Only the CHS + likelihood (and the filtered states built on it) integrates missing values + out; simulation and transition plots still require complete observed + factors. In CHS models with endogenous factors, positive-variance missing + inputs in a physical period with an outgoing transition are not yet + supported: both half-steps would need to carry the same missing input's + joint posterior. Such inputs raise `NotImplementedError`; zero-variance + fills, complete inputs, and terminal-only missing inputs remain supported. + """ + + def __init__( + self, + factors: Mapping[str, FactorSpec], + observed_factors: tuple[str, ...] = (), + controls: tuple[str, ...] = (), + stagemap: tuple[int, ...] | None = None, + anchoring: AnchoringSpec | None = None, + n_mixtures: int = 1, + measurement_models: Mapping[str, MeasurementModel] | None = None, + missing_observed_factor_moments: Mapping[str, tuple[str, str]] | None = None, + ) -> None: + """Create ModelSpec, wrapping factors dict in MappingProxyType.""" + object.__setattr__(self, "_factors", ensure_containers_are_immutable(factors)) + object.__setattr__(self, "observed_factors", observed_factors) + object.__setattr__(self, "controls", controls) + object.__setattr__(self, "stagemap", stagemap) + object.__setattr__(self, "anchoring", anchoring) + object.__setattr__(self, "n_mixtures", n_mixtures) + self._set_measurement_models(measurement_models) + moments = dict(missing_observed_factor_moments or {}) + unknown = sorted(name for name in moments if name not in observed_factors) + if unknown: + msg = ( + f"missing_observed_factor_moments references {unknown}, which is not " + f"an observed factor. Observed factors: {list(observed_factors)}." + ) + raise ValueError(msg) + object.__setattr__( + self, "missing_observed_factor_moments", MappingProxyType(moments) + ) + + def _set_measurement_models( + self, measurement_models: Mapping[str, MeasurementModel] | None + ) -> None: + """Validate measurement-model keys against the model's measures and store.""" + models = dict(measurement_models or {}) + known = self._measurement_names() + unknown = sorted(name for name in models if name not in known) + if unknown: + msg = ( + f"measurement_models references {unknown}, which is not a measurement " + f"variable in the model. Known measurements: {sorted(known)}." + ) + raise ValueError(msg) + object.__setattr__( + self, "measurement_models", ensure_containers_are_immutable(models) + ) + + def _measurement_names(self) -> set[str]: + """Return every measurement-variable name across all factors and periods.""" + return { + meas + for spec in self._factors.values() + for period in spec.measurements + for meas in period + } + + def measurement_model(self, name: str) -> MeasurementModel: + """Return the observation model for a measurement (Gaussian if unlisted).""" + return self.measurement_models.get(name, GaussianMeasurement()) + + @classmethod + def from_dict(cls, d: dict[str, Any]) -> Self: + """Create a ModelSpec from a dictionary (e.g. loaded from YAML). + + Args: + d: A dictionary with keys like "factors", "observed_factors", + "controls", "stagemap", "anchoring", "n_mixtures". + + Returns: + A ModelSpec instance. + + """ + factors = {} + auto_instruments: list[str] = [] + for name, spec in d["factors"].items(): + correction = None + if "correction" in spec: + cd = spec["correction"] + kt = cd.get("kappa_terms") + correction = CorrectionSpec( + instruments=tuple(cd["instruments"]), + state_predictors=tuple(cd.get("state_predictors", ())), + targets=tuple(cd.get("targets", ())), + kappa_degree=cd.get("kappa_degree"), + kappa_terms=( + {t: tuple(v) for t, v in kt.items()} if kt is not None else None + ), + ) + auto_instruments.extend( + i for i in correction.instruments if i not in auto_instruments + ) + normalizations = None + if "normalizations" in spec: + nd = spec["normalizations"] + if "intercepts" not in nd: + n_periods = len(nd.get("loadings", [])) + nd["intercepts"] = [{} for _ in range(n_periods)] + normalizations = Normalizations( + loadings=tuple(nd["loadings"]), + intercepts=tuple(nd["intercepts"]), + ) + factors[name] = FactorSpec( + measurements=tuple(tuple(m) for m in spec["measurements"]), + normalizations=normalizations, + is_endogenous=spec.get("is_endogenous", False), + transition_function=spec.get("transition_function"), + has_production_shock=spec.get("has_production_shock", True), + has_initial_distribution=spec.get("has_initial_distribution", True), + af_state_role=spec.get("af_state_role", "dynamic"), + correction=correction, + ) + + anchoring = None + if "anchoring" in d: + anchoring = AnchoringSpec(**d["anchoring"]) + + stagemap = d.get("stagemap") + + # Auto-register control-function instruments as observed factors (deduped). + observed = tuple(d.get("observed_factors", [])) + observed += tuple(i for i in auto_instruments if i not in observed) + + measurement_models = _parse_measurement_models(d.get("measurement_models")) + moments = { + name: (mean_col, var_col) + for name, (mean_col, var_col) in d.get( + "missing_observed_factor_moments", {} + ).items() + } + + return cls( + factors=factors, + observed_factors=observed, + controls=tuple(d.get("controls", [])), + stagemap=tuple(stagemap) if stagemap is not None else None, + anchoring=anchoring, + n_mixtures=d.get("n_mixtures", 1), + measurement_models=measurement_models, + missing_observed_factor_moments=moments, + ) + + @property + def factors(self) -> MappingProxyType[str, FactorSpec]: + """Immutable mapping of factor names to specifications.""" + return self._factors + + def _replace(self, **changes: Any) -> Self: # noqa: ANN401 + """Return a new ModelSpec with the specified fields replaced.""" + return type(self)( + factors=changes.get("factors", self.factors), + observed_factors=changes.get("observed_factors", self.observed_factors), + controls=changes.get("controls", self.controls), + stagemap=changes.get("stagemap", self.stagemap), + anchoring=changes.get("anchoring", self.anchoring), + n_mixtures=changes.get("n_mixtures", self.n_mixtures), + measurement_models=changes.get( + "measurement_models", self.measurement_models + ), + missing_observed_factor_moments=changes.get( + "missing_observed_factor_moments", + self.missing_observed_factor_moments, + ), + ) + + def with_transition_functions( + self, + transition_functions: dict[str, str | Callable], + ) -> Self: + """Return a new ModelSpec with transition functions added to factors. + + Args: + transition_functions: Mapping from factor name to transition function. + Can be strings (referencing built-in functions) or callables. + + Returns: + New ModelSpec with transition functions set on factors. + + Raises: + ValueError: If transition_functions keys don't match factor names. + + """ + if set(transition_functions.keys()) != set(self.factors.keys()): + msg = ( + f"Transition function keys {set(transition_functions.keys())} " + f"do not match factor keys {set(self.factors.keys())}" + ) + raise ValueError(msg) + + new_factors = { + name: spec.with_transition_function(transition_functions[name]) + for name, spec in self.factors.items() + } + return self._replace(factors=new_factors) + + def with_added_factor( + self, + name: str, + spec: FactorSpec, + ) -> Self: + """Return a new ModelSpec with an additional factor. + + Args: + name: Name of the new factor. + spec: Specification for the new factor. + + Returns: + New ModelSpec with the additional factor. + + """ + new_factors = dict(self.factors) + new_factors[name] = spec + return self._replace(factors=new_factors) + + def with_added_observed_factors( + self, + *names: str, + ) -> Self: + """Return a new ModelSpec with additional observed factors. + + Args: + *names: Names of additional observed factors. + + Returns: + New ModelSpec with the additional observed factors. + + """ + return self._replace( + observed_factors=self.observed_factors + names, + ) + + def without_correction(self) -> Self: + """Return a new ModelSpec with every `FactorSpec.correction` removed. + + Useful to run an estimator that does not implement the control-function + correction (e.g. AF) on a spec authored for CHS. + + Returns: + New ModelSpec with no control-function corrections. + + """ + new_factors = { + name: replace(spec, correction=None) + if spec.correction is not None + else spec + for name, spec in self.factors.items() + } + return self._replace(factors=new_factors) + + def with_correction( + self, + factor_name: str, + correction: CorrectionSpec, + ) -> Self: + """Return a new ModelSpec attaching a control-function correction. + + Attaches `correction` to `factor_name` and auto-registers its instruments + as observed factors (deduped against existing ones), so instruments are + declared exactly once. + + Args: + factor_name: The endogenous investment factor to correct. + correction: The control-function specification. + + Returns: + New ModelSpec with the correction attached and instruments registered. + + """ + corrected = replace(self.factors[factor_name], correction=correction) + new_factors = {**self.factors, factor_name: corrected} + new_observed = self.observed_factors + tuple( + i for i in correction.instruments if i not in self.observed_factors + ) + return self._replace(factors=new_factors, observed_factors=new_observed) + + def with_anchoring( + self, + anchoring: AnchoringSpec, + ) -> Self: + """Return a new ModelSpec with the given anchoring specification. + + Args: + anchoring: New anchoring specification. + + Returns: + New ModelSpec with the updated anchoring. + + """ + return self._replace(anchoring=anchoring) + + def with_controls( + self, + controls: tuple[str, ...], + ) -> Self: + """Return a new ModelSpec with the given controls. + + Args: + controls: New control variable names. + + Returns: + New ModelSpec with the updated controls. + + """ + return self._replace(controls=controls) + + def with_stagemap( + self, + stagemap: tuple[int, ...], + ) -> Self: + """Return a new ModelSpec with the given stagemap. + + Args: + stagemap: New stage mapping. + + Returns: + New ModelSpec with the updated stagemap. + + """ + return self._replace(stagemap=stagemap) diff --git a/src/skillmodels/params_index.py b/src/skillmodels/common/params_index.py similarity index 74% rename from src/skillmodels/params_index.py rename to src/skillmodels/common/params_index.py index c3a19587..ad519a57 100644 --- a/src/skillmodels/params_index.py +++ b/src/skillmodels/common/params_index.py @@ -2,7 +2,8 @@ import pandas as pd -from skillmodels.types import ( +from skillmodels.common.types import ( + ControlFunctionInfo, Dimensions, EndogenousFactorsInfo, Labels, @@ -62,6 +63,15 @@ def get_params_index( aug_periods=labels.aug_periods, has_endogenous_factors=endogenous_factors_info.has_endogenous_factors, ) + if endogenous_factors_info.control_function is not None: + ind_tups += get_investment_eq_index_tuples( + aug_periods=labels.aug_periods, + control_function=endogenous_factors_info.control_function, + ) + ind_tups += get_kappa_index_tuples( + aug_periods=labels.aug_periods, + control_function=endogenous_factors_info.control_function, + ) return pd.MultiIndex.from_tuples( ind_tups, @@ -147,6 +157,60 @@ def get_shock_sds_index_tuples( return ind_tups +def get_investment_eq_index_tuples( + aug_periods: tuple[int, ...], + control_function: ControlFunctionInfo, +) -> list[tuple[str, int, str, str]]: + """Index tuples for the first-stage investment-equation coefficients. + + One canonical block keyed by the investment factor (`name1`). The + predictor order (`name2`) is the single source of truth shared with the + prediction DAG node: state predictors, then excluded instruments, then the + constant. A control function only exists for endogenous models, so the + rows always live on `aug_periods[:-2]`. + + Args: + aug_periods: The augmented periods of the model. + control_function: The resolved control-function configuration. + + """ + inv = control_function.investment_factor + predictors = ( + *control_function.state_predictors, + *control_function.instruments, + "constant", + ) + ind_tups = [] + for aug_period in aug_periods[:-2]: + for predictor in predictors: + ind_tups.append(("investment_eq", aug_period, inv, predictor)) + return ind_tups + + +def get_kappa_index_tuples( + aug_periods: tuple[int, ...], + control_function: ControlFunctionInfo, +) -> list[tuple[str, int, str, str]]: + """Index tuples for the control-function loadings (kappa). + + Each target factor receives one `("kappa", aug_period, target, term)` row + per cf regressor term, free per period (a dedicated category, so the + transition-stage constraints do not touch it). A control function only + exists for endogenous models, so the rows live on `aug_periods[:-2]`. + + Args: + aug_periods: The augmented periods of the model. + control_function: The resolved control-function configuration. + + """ + ind_tups = [] + for aug_period in aug_periods[:-2]: + for target, terms in control_function.kappa_terms.items(): + for term in terms: + ind_tups.append(("kappa", aug_period, target, term)) + return ind_tups + + def initial_mean_index_tuples( n_mixtures: int, factors: tuple[str, ...], diff --git a/src/skillmodels/parse_params.py b/src/skillmodels/common/parse_params.py similarity index 86% rename from src/skillmodels/parse_params.py rename to src/skillmodels/common/parse_params.py index 21e06a5e..92b8c659 100644 --- a/src/skillmodels/parse_params.py +++ b/src/skillmodels/common/parse_params.py @@ -8,7 +8,7 @@ import pandas as pd from jax import Array -from skillmodels.types import ( +from skillmodels.common.types import ( Anchoring, Dimensions, Labels, @@ -59,6 +59,31 @@ def create_parsing_info( meas_sds = _get_positional_selector_from_loc(range_sr=range_sr, loc="meas_sds") shock_sds = _get_positional_selector_from_loc(range_sr=range_sr, loc="shock_sds") + # control-function first-stage equation (empty selector for non-CF models). + investment_eq = _get_positional_selector_from_loc( + range_sr=range_sr, loc="investment_eq" + ) + investment_eq_rows = params_index[ + params_index.get_level_values("category") == "investment_eq" + ] + investment_factor = ( + str(investment_eq_rows.get_level_values("name1")[0]) + if len(investment_eq_rows) + else None + ) + + # control-function loadings (kappa), one selector per target factor. + kappa: dict[str, Array | slice] = {} + kappa_targets = params_index[ + params_index.get_level_values("category") == "kappa" + ].get_level_values("name1") + kappa_helper = pd.DataFrame(index=params_index) + for target in dict.fromkeys(kappa_targets): + loc = kappa_helper.query(f"category == 'kappa' & name1 == '{target}'").index + kappa[str(target)] = _get_positional_selector_from_loc( + range_sr=range_sr, loc=loc + ) + # loadings: mask = update_info[list(labels.latent_factors)].to_numpy() helper = np.arange(mask.size).reshape(mask.shape) @@ -105,6 +130,9 @@ def create_parsing_info( is_anchoring_update=is_anchoring_update, ignore_constant_when_anchoring=anchoring.ignore_constant_when_anchoring, has_endogenous_factors=has_endogenous_factors, + investment_eq=investment_eq, + investment_factor=investment_factor, + kappa=MappingProxyType(kappa), ) @@ -296,6 +324,18 @@ def _get_transition_params( for factor in list(labels.latent_factors): ilocs = info.transition[factor] trans_params[factor] = params[ilocs].reshape(n_aug_periods - len_reduction, -1) + if info.investment_factor is not None: + # First-stage betas, threaded under a reserved key so the prediction DAG + # node reads them as ordinary period-sliced transition coefficients. + reserved = f"__first_stage_{info.investment_factor}__" + trans_params[reserved] = params[info.investment_eq].reshape( + n_aug_periods - len_reduction, -1 + ) + for target, ilocs in info.kappa.items(): + # Control-function loadings, one reserved key per target factor. + trans_params[f"__kappa_{target}__"] = params[ilocs].reshape( + n_aug_periods - len_reduction, -1 + ) return MappingProxyType(trans_params) diff --git a/src/skillmodels/process_data.py b/src/skillmodels/common/process_data.py similarity index 71% rename from src/skillmodels/process_data.py rename to src/skillmodels/common/process_data.py index 72f731fe..73e955da 100644 --- a/src/skillmodels/process_data.py +++ b/src/skillmodels/common/process_data.py @@ -8,7 +8,7 @@ import pandas as pd from jax import Array -from skillmodels.types import Anchoring, Labels +from skillmodels.common.types import Anchoring, Labels def process_data( @@ -42,7 +42,13 @@ def process_data( observed control variables for the measurement equations. observed_factors: Array of shape (n_periods, n_obs, n_observed_factors) with data on the observed factors. - Only returned if estimation==True + Where a factor listed in `labels.missing_observed_factor_moments` is + missing, it holds the fill mean. + missing_observed_factors: Names of the observed factors with fill moments + that are missing somewhere in the data (estimation only; else empty). + observed_factor_vars: Array of shape + (n_periods, n_obs, len(missing_observed_factors)) with the fill + variance where the factor is missing and 0 where it is observed. """ df = pre_process_data(df=df, periods=labels.periods) @@ -63,6 +69,20 @@ def process_data( df=df, controls=labels.controls, update_info=update_info ) out["controls"] = _generate_controls_array(df=df, labels=labels, n_obs=n_obs) + missing = tuple( + f + for f in labels.observed_factors + if purpose == "estimation" + and f in labels.missing_observed_factor_moments + and df[f].isna().any() + ) + out["missing_observed_factors"] = missing + out["observed_factor_vars"] = _generate_observed_factor_vars_array( + df=df, labels=labels, n_obs=n_obs, factors=missing + ) + for factor in missing: + mean_col, _ = labels.missing_observed_factor_moments[factor] + df[factor] = df[factor].fillna(df[mean_col]) out["observed_factors"] = _generate_observed_factor_array( df=df, labels=labels, n_obs=n_obs ) @@ -119,18 +139,27 @@ def _get_period_data_for_endogenous_factors( meas = _get_period_measurements(update_info=update_info, aug_period=aug_period) controls = labels.controls observed = labels.observed_factors - - out = df.query(f"period == {period}")[ - [ - "id", - *meas, - *controls, - *observed, - "period", - "__old_id__", - "__old_period__", - ] + moment_cols = [ + col for cols in labels.missing_observed_factor_moments.values() for col in cols ] + + # Several factor mappings may share a physical moment column, or reuse a + # column already selected above. Preserve its first position, not duplicates. + columns = list( + dict.fromkeys( + [ + "id", + *meas, + *controls, + *observed, + *moment_cols, + "period", + "__old_id__", + "__old_period__", + ] + ) + ) + out = df.query(f"period == {period}")[columns] out["aug_period"] = aug_period return out @@ -209,12 +238,14 @@ def _check_data( # noqa: C901 ) for factor in labels.observed_factors: - if factor not in period_data.columns: - var_report.loc[(aug_period, factor), "problem"] = "Variable is missing" - elif period_data[factor].isna().any(): - var_report.loc[(aug_period, factor), "problem"] = ( - "Variable has missings" - ) + moments = ( + labels.missing_observed_factor_moments.get(factor) + if purpose == "estimation" + else None + ) + problems = _observed_factor_problems(period_data, factor, moments) + for var, problem in problems.items(): + var_report.loc[(aug_period, var), "problem"] = problem var_report = var_report.to_string() if len(var_report) > 0 else "" @@ -222,6 +253,32 @@ def _check_data( # noqa: C901 raise ValueError(var_report) +def _observed_factor_problems( + period_data: pd.DataFrame, factor: str, moments: tuple[str, str] | None +) -> dict[str, str]: + """Map variables to problems with an observed factor and its fill moments. + + Without `moments`, any missing value is a problem. With `moments`, missing + values need a non-missing fill mean and a non-negative fill variance. + """ + if factor not in period_data.columns: + return {factor: "Variable is missing"} + missing = period_data[factor].isna() + if moments is None: + return {factor: "Variable has missings"} if missing.any() else {} + absent = [col for col in moments if col not in period_data.columns] + if absent: + return dict.fromkeys(absent, "Variable is missing") + mean, var = (period_data.loc[missing, col] for col in moments) + if mean.isna().any() or var.isna().any(): + return {factor: f"Variable has missings without fill moments {moments}"} + if (var < 0).any(): + return { + factor: f"Variable has missings with negative fill variance in {moments[1]}" + } + return {} + + def _handle_controls_with_missings( df: pd.DataFrame, controls: tuple[str, ...], @@ -282,6 +339,23 @@ def _generate_controls_array( return jnp.array(arr, dtype="float32") +def _generate_observed_factor_vars_array( + df: pd.DataFrame, + labels: Labels, + n_obs: int, + factors: tuple[str, ...], +) -> Array: + arr = np.zeros((len(labels.aug_periods), n_obs, len(factors))) + for aug_period in labels.aug_periods: + period_data = df.query(f"aug_period == {aug_period}") + for k, factor in enumerate(factors): + var_col = labels.missing_observed_factor_moments[factor][1] + arr[aug_period, :, k] = np.where( + period_data[factor].isna(), period_data[var_col], 0.0 + ) + return jnp.array(arr, dtype="float32") + + def _generate_observed_factor_array( df: pd.DataFrame, labels: Labels, diff --git a/src/skillmodels/process_model.py b/src/skillmodels/common/process_model.py similarity index 62% rename from src/skillmodels/process_model.py rename to src/skillmodels/common/process_model.py index 43b5aedc..a4349317 100644 --- a/src/skillmodels/process_model.py +++ b/src/skillmodels/common/process_model.py @@ -1,6 +1,7 @@ """Functions to process model specifications from user-friendly to internal form.""" -from collections.abc import KeysView, Mapping +import inspect +from collections.abc import Callable, KeysView, Mapping from dataclasses import replace from functools import partial from types import MappingProxyType @@ -12,15 +13,22 @@ from jax import Array, vmap from pandas import DataFrame -import skillmodels.transition_functions as t_f_module -from skillmodels.check_model import check_model, check_stagemap -from skillmodels.decorators import extract_params, jax_array_output -from skillmodels.model_spec import FactorSpec, ModelSpec -from skillmodels.types import ( +import skillmodels.common.transition_functions as t_f_module +from skillmodels.common.check_model import check_model, check_stagemap +from skillmodels.common.control_function import ( + build_cf_node, + build_kappa_addition_node, + build_kappa_term_evaluators, + build_prediction_node, + generate_kappa_terms, +) +from skillmodels.common.decorators import extract_params, jax_array_output +from skillmodels.common.model_spec import FactorSpec, ModelSpec +from skillmodels.common.types import ( Anchoring, + ControlFunctionInfo, Dimensions, EndogenousFactorsInfo, - EstimationOptions, FactorInfo, Labels, MeasurementType, @@ -72,12 +80,10 @@ def process_model(model_spec: ModelSpec) -> ProcessedModel: ) else: _model_spec_aug = model_spec - estimation_options = _model_spec_aug.estimation_options or EstimationOptions() endogenous_factors_info = _get_endogenous_factors_info( has_endogenous_factors=has_endogenous_factors, model_spec=_model_spec_aug, labels=labels, - bounds_distance=estimation_options.bounds_distance, ) check_model( model_spec=_model_spec_aug, @@ -86,7 +92,11 @@ def process_model(model_spec: ModelSpec) -> ProcessedModel: anchoring=anchoring, has_endogenous_factors=has_endogenous_factors, ) - transition_info = _get_transition_info(model_spec=_model_spec_aug, labels=labels) + transition_info = _get_transition_info( + model_spec=_model_spec_aug, + labels=labels, + control_function=endogenous_factors_info.control_function, + ) labels = replace( labels, transition_names=tuple(transition_info.function_names.values()) ) @@ -95,7 +105,6 @@ def process_model(model_spec: ModelSpec) -> ProcessedModel: dimensions=dims, labels=labels, anchoring=anchoring, - estimation_options=estimation_options, transition_info=transition_info, update_info=_get_update_info( model_spec=_model_spec_aug, @@ -112,29 +121,14 @@ def process_model(model_spec: ModelSpec) -> ProcessedModel: def get_has_endogenous_factors(factors: Mapping[str, FactorSpec]) -> bool: """Return True if any endogenous factors are present.""" - endogenous_factors = pd.DataFrame( - [ - { - "factor": f, - "is_endogenous": v.is_endogenous, - "is_correction": v.is_correction, - } - for f, v in factors.items() - ] - ).set_index("factor") - if (endogenous_factors.dtypes != bool).any(): # noqa: E721 - raise ValueError( - "If specified, 'is_endogenous' and 'is_correction' both need to be of type" - f"'bool', got:\n{endogenous_factors}" - ) - if ( - ~endogenous_factors["is_endogenous"] & endogenous_factors["is_correction"] - ).any(): - raise ValueError( - "A factor cannot be a correction and not endogenous, got:\n" - f"{endogenous_factors}" - ) - return endogenous_factors["is_endogenous"].any() # ty: ignore[invalid-return-type] + for factor, fspec in factors.items(): + if not isinstance(fspec.is_endogenous, bool): + msg = ( + f"'is_endogenous' must be a bool, got {fspec.is_endogenous!r} " + f"for {factor}." + ) + raise TypeError(msg) + return any(fspec.is_endogenous for fspec in factors.values()) def get_dimensions( @@ -153,13 +147,12 @@ def get_dimensions( all_n_periods = [len(fspec.measurements) for fspec in model_spec.factors.values()] n_periods = max(all_n_periods) n_aug_periods = 2 * n_periods if has_endogenous_factors else n_periods - est_opts = model_spec.estimation_options return Dimensions( n_latent_factors=len(model_spec.factors), n_observed_factors=len(model_spec.observed_factors), n_controls=len(model_spec.controls) + 1, # plus 1: constant - n_mixtures=est_opts.n_mixtures if est_opts else 1, + n_mixtures=model_spec.n_mixtures, n_aug_periods=n_aug_periods, n_periods=n_periods, ) @@ -178,7 +171,7 @@ def _get_aug_periods_to_periods( def _aug_periods_from_period( - period: int, aug_periods_to_periods: dict[int, int] + period: int, aug_periods_to_periods: Mapping[int, int] ) -> list[int]: """The inverse of the the aug_periods_to_periods mapper.""" return [ap for ap, p in aug_periods_to_periods.items() if p == period] @@ -244,6 +237,7 @@ def _get_labels( aug_stagemap=tuple(aug_stagemap), aug_stages=tuple(sorted(int(v) for v in np.unique(aug_stagemap))), aug_stages_to_stages=MappingProxyType(aug_stages_to_stages), + missing_observed_factor_moments=model_spec.missing_observed_factor_moments, ) @@ -286,6 +280,12 @@ def _augment_periods_for_endogenous_factors( """ new_factors: dict[str, FactorSpec] = {} for fac, fspec in model_spec.factors.items(): + # insert_at_modulo decides measurement parity: endogenous (investment) + # factors are measured at ODD aug_periods (the endogenous half), ordinary + # state factors at EVEN aug_periods (the states half). This co-placement + # produces the investment level and the first-class control-function + # prediction at the same odd aug_period, so the residual cf = level - + # prediction is a genuine same-period residual. insert_at_modulo = 0 if fspec.is_endogenous else 1 # Insert empty elements into measurements when we do not have those. @@ -323,23 +323,101 @@ def _augment_periods_for_endogenous_factors( measurements=aug_measurements, normalizations=aug_normalizations, is_endogenous=fspec.is_endogenous, - is_correction=fspec.is_correction, + correction=fspec.correction, transition_function=fspec.transition_function, + has_production_shock=fspec.has_production_shock, + has_initial_distribution=fspec.has_initial_distribution, ) return model_spec._replace(factors=new_factors) -def _get_transition_info(model_spec: ModelSpec, labels: Labels) -> TransitionInfo: - """Collect information about transition functions.""" - func_list, param_names = [], [] - latent_factors = labels.latent_factors - all_factors = labels.all_factors +def _inject_control_function_nodes( + *, + functions: dict, + control_function: ControlFunctionInfo, + all_factors: tuple[str, ...], +) -> None: + """Graft the control-function nodes into the transition DAG in place. + + Adds a contemporaneous first-stage prediction node and a residual `cf` + node, and rewrites each target factor's `__next___` node to add + `kappa * cf` on top of the (untouched) base production node. The base node + is preserved under `__base_next___`, so its arguments, positional + parameter layout, and DAG dependencies are unchanged. + + Args: + functions: The DAG node mapping built by `_get_transition_info`. + control_function: The resolved control-function configuration. + all_factors: Factor order of the `states` vector (latent then observed). + + """ + inv = control_function.investment_factor + inv_pos = all_factors.index(inv) + predictor_positions = tuple( + all_factors.index(factor) + for factor in ( + *control_function.state_predictors, + *control_function.instruments, + ) + ) + factor_positions = {factor: i for i, factor in enumerate(all_factors)} + prediction_node = f"__prediction_{inv}__" + functions[prediction_node] = build_prediction_node( + beta_key=f"__first_stage_{inv}__", + predictor_positions=predictor_positions, + ) + functions["cf"] = rename_arguments( + build_cf_node(inv_pos=inv_pos), + mapper={"prediction": prediction_node}, + ) + + for target in control_function.targets: + base_node = f"__base_next_{target}__" + functions[base_node] = functions.pop(f"__next_{target}__") + evaluators = build_kappa_term_evaluators( + kappa_terms=control_function.kappa_terms[target], + factor_positions=factor_positions, + ) + functions[f"__next_{target}__"] = rename_arguments( + build_kappa_addition_node( + kappa_key=f"__kappa_{target}__", + kappa_evaluators=evaluators, + ), + mapper={"base_value": base_node}, + ) + + +def _hide_keyword_only_config(func: Callable) -> Callable: + """Bind keyword-only configuration (e.g. `scale` of stable_translog) at defaults. + + dags would otherwise expose such arguments as inputs of the transition DAG. + + """ + params = inspect.signature(func).parameters.values() + if not any(p.kind is p.KEYWORD_ONLY for p in params): + return func + + def bound(states: Array, params: Array) -> Array: + return func(states, params) + + bound.__name__ = func.__name__ # ty: ignore[unresolved-attribute] + return bound + + +def _build_base_transition_funcs( + model_spec: ModelSpec, + latent_factors: tuple[str, ...], + all_factors: tuple[str, ...], +) -> tuple[list[Callable], list[list[str]]]: + """Build the per-factor base transition callables and their parameter names.""" + func_list: list[Callable] = [] + param_names: list[list[str]] = [] for factor in latent_factors: spec = model_spec.factors[factor].transition_function if isinstance(spec, str): - func = getattr(t_f_module, spec) + func = _hide_keyword_only_config(getattr(t_f_module, spec)) if spec == "constant": func = rename_arguments(func, mapper={"state": factor}) func_list.append(extract_params(func, key=factor)) @@ -349,17 +427,35 @@ def _get_transition_info(model_spec: ModelSpec, labels: Labels) -> TransitionInf raise AttributeError( "Custom transition functions must have a __name__ attribute.", ) - if hasattr(spec, "__registered_params__"): - names: list[str] = spec.__registered_params__ # ty: ignore[invalid-assignment] - param_names.append(names) - else: + if not hasattr(spec, "__registered_params__"): raise AttributeError( "Custom transition_functions must have a __registered_params__ " "attribute. You can set it via the register_params decorator.", ) + names: list[str] = spec.__registered_params__ # ty: ignore[invalid-assignment] + param_names.append(names) func_list.append(extract_params(spec, key=factor, names=names)) + return func_list, param_names + + +def _get_transition_info( + model_spec: ModelSpec, + labels: Labels, + control_function: ControlFunctionInfo | None = None, +) -> TransitionInfo: + """Collect information about transition functions.""" + latent_factors = labels.latent_factors + all_factors = labels.all_factors - function_names = [f.__name__ for f in func_list] + func_list, param_names = _build_base_transition_funcs( + model_spec=model_spec, + latent_factors=latent_factors, + all_factors=all_factors, + ) + + # `extract_params` preserves `__name__` via `functools.wraps`, but `ty` only + # sees the `Callable` return type, which does not expose it. + function_names = [f.__name__ for f in func_list] # ty: ignore[unresolved-attribute] functions = { f"__next_{fac}__": func @@ -374,6 +470,13 @@ def _extract_factor(states: Array, pos: int) -> Array: for i, factor in enumerate(labels.all_factors): functions[factor] = partial(_extract_factor, pos=i) + if control_function is not None: + _inject_control_function_nodes( + functions=functions, + control_function=control_function, + all_factors=all_factors, + ) + transition_function = concatenate_functions( functions=functions, targets=[f"__next_{fac}__" for fac in latent_factors], @@ -392,7 +495,7 @@ def _extract_factor(states: Array, pos: int) -> Array: return TransitionInfo( func=transition_function, param_names=MappingProxyType( - dict(zip(latent_factors, param_names, strict=False)) + dict(zip(latent_factors, (tuple(p) for p in param_names), strict=False)) ), individual_functions=MappingProxyType(individual_functions), function_names=MappingProxyType( @@ -401,20 +504,117 @@ def _extract_factor(states: Array, pos: int) -> Array: ) +def _resolve_control_function(model_spec: ModelSpec) -> ControlFunctionInfo | None: + """Resolve the `CorrectionSpec` declared on the investment factor. + + Expand the user-facing `CorrectionSpec` (which may leave fields empty as + "all state factors" / "the default `cf` regressor") into a fully resolved + `ControlFunctionInfo` read by both estimators. Return `None` when no factor + declares a `correction`. + + Args: + model_spec: The model specification. + + Returns: + Resolved `ControlFunctionInfo`, or `None` if there is no correction. + + Raises: + ValueError: If a non-endogenous factor declares a `correction`. + NotImplementedError: If more than one factor declares a `correction`. + + """ + with_correction = [ + (fac, fspec.correction) + for fac, fspec in model_spec.factors.items() + if fspec.correction is not None + ] + if not with_correction: + return None + if len(with_correction) > 1: + names = ", ".join(fac for fac, _ in with_correction) + msg = ( + "The control function supports exactly one investment factor, but " + f"a correction was declared on multiple factors: {names}." + ) + raise NotImplementedError(msg) + + investment_factor, spec = with_correction[0] + if not model_spec.factors[investment_factor].is_endogenous: + msg = ( + f"Factor {investment_factor!r} declares a correction but is not " + "endogenous. A control function requires an endogenous investment " + "factor." + ) + raise ValueError(msg) + + not_observed = tuple( + i for i in spec.instruments if i not in model_spec.observed_factors + ) + if not_observed: + msg = ( + f"The correction on {investment_factor!r} lists instruments " + f"{not_observed} that are not declared observed factors. Control-" + "function instruments must be observed factors of the model." + ) + raise ValueError(msg) + + state_factors = tuple( + fac for fac, fspec in model_spec.factors.items() if not fspec.is_endogenous + ) + state_predictors = spec.state_predictors or state_factors + targets = spec.targets or state_factors + if not targets: + msg = ( + f"Factor {investment_factor!r} declares a correction but the model " + "has no state factors to apply it to. A control function needs at " + "least one non-endogenous state factor as a target." + ) + raise ValueError(msg) + + # Built-in production transitions enumerate (and the constraint machinery pins + # to 0) an instrument coefficient, but a custom transition could consume an + # instrument as an input with no pinnable coefficient. Instruments are + # first-stage-only, so reject that loudly. + instruments = set(spec.instruments) + for fac, fspec in model_spec.factors.items(): + tfunc = fspec.transition_function + if fac == investment_factor or not callable(tfunc): + continue + consumed = set(inspect.signature(tfunc).parameters) - {"params"} + if leaked := sorted(consumed & instruments): + msg = ( + f"The custom transition for {fac!r} consumes control-function " + f"instrument(s) {leaked}. Instruments are first-stage-only and must " + "not enter a production transition." + ) + raise ValueError(msg) + + if spec.kappa_terms is not None: + kappa_terms = {t: spec.kappa_terms.get(t, ("cf",)) for t in targets} + else: + degree = spec.kappa_degree if spec.kappa_degree is not None else 1 + basis = generate_kappa_terms(state_factors, max_degree=degree) + kappa_terms = dict.fromkeys(targets, basis) + + return ControlFunctionInfo( + investment_factor=investment_factor, + state_predictors=tuple(state_predictors), + instruments=tuple(spec.instruments), + targets=tuple(targets), + kappa_terms=MappingProxyType(kappa_terms), + ) + + def _get_endogenous_factors_info( *, has_endogenous_factors: bool, model_spec: ModelSpec, labels: Labels, - bounds_distance: float, ) -> EndogenousFactorsInfo: """Collect information about endogenous factors.""" factor_info = {} for fac, fspec in model_spec.factors.items(): - factor_info[fac] = FactorInfo.from_flags( - is_endogenous=fspec.is_endogenous, - is_correction=fspec.is_correction, - ) + factor_info[fac] = FactorInfo.from_flags(is_endogenous=fspec.is_endogenous) return EndogenousFactorsInfo( has_endogenous_factors=has_endogenous_factors, @@ -422,12 +622,12 @@ def _get_endogenous_factors_info( aug_periods=labels.aug_periods_to_periods.keys(), has_endogenous_factors=has_endogenous_factors, ), - bounds_distance=bounds_distance, aug_periods_from_period=partial( _aug_periods_from_period, aug_periods_to_periods=labels.aug_periods_to_periods, ), factor_info=MappingProxyType(factor_info), + control_function=_resolve_control_function(model_spec), ) diff --git a/src/skillmodels/common/selector.py b/src/skillmodels/common/selector.py new file mode 100644 index 00000000..5f753461 --- /dev/null +++ b/src/skillmodels/common/selector.py @@ -0,0 +1,63 @@ +"""Selector helpers for optimagic constraint plumbing. + +Both `skillmodels.common.constraints` and +`skillmodels.common.transition_functions` build optimagic constraint +selectors of the form `functools.partial(select_by_loc, loc=...)`. +Hosting `select_by_loc` here breaks the previous circular-import +workaround (`constraints` -> `transition_functions` -> a hand-copy +of `select_by_loc`) by giving both call sites a single dependency +that pulls nothing else from `skillmodels`. + +`align_index_names` lives here because it is also a selector-side +concern: users supply `fixed_params` / `start_params` keyed by the +public-facing `period` level name, while internal frames are keyed +by `aug_period`. The two-line rename lets downstream `MultiIndex` +set operations keep their level names. +""" + +from collections.abc import Hashable, Sequence +from typing import Any + +import pandas as pd + + +def select_by_loc(params: Any, loc: Any) -> Any: # noqa: ANN401 + """Select parameters by location, restricted to the `value` column. + + optimagic's pytree machinery flattens whatever the selector + returns. A bare `params.loc[single_tuple]` is a row `Series` + whose index is the column names (`value`, `lower_bound`, + `upper_bound`); flattening that yields all three values, and the + bounds' `±inf` collapse to int64 sentinels inside + `_fail_if_duplicates`. Project down to the `value` column so the + selector returns exactly the parameter values regardless of + whether bounds columns are present. + """ + selected = params.loc[loc] + if isinstance(selected, pd.Series) and "value" in selected.index: + return selected["value"] + if isinstance(selected, pd.DataFrame) and "value" in selected.columns: + return selected["value"] + return selected + + +def align_index_names( + overrides: pd.DataFrame, target_names: Sequence[Hashable] +) -> pd.DataFrame: + """Return `overrides` with its MultiIndex level names matched to `target_names`. + + `MultiIndex.union` silently strips any level whose name differs + across the two operands, collapsing the result to anonymous + levels and breaking `params.loc[...]` for callers downstream. + Re-stamping the overrides' level names keeps the underlying + tuples bit-identical (`set_names` is metadata-only) while making + the union name-preserving. Used wherever user-supplied + `fixed_params` / `start_params` (typically keyed by `period`) + meet an internal params frame keyed by `aug_period`. + """ + if list(overrides.index.names) == list(target_names): + return overrides + new_index = overrides.index.set_names(list(target_names)) + out = overrides.copy() + out.index = new_index + return out diff --git a/src/skillmodels/simulate_data.py b/src/skillmodels/common/simulate_data.py similarity index 78% rename from src/skillmodels/simulate_data.py rename to src/skillmodels/common/simulate_data.py index 13b9c005..5890ccbb 100644 --- a/src/skillmodels/simulate_data.py +++ b/src/skillmodels/common/simulate_data.py @@ -6,18 +6,24 @@ import jax.numpy as jnp import numpy as np import pandas as pd +from beartype import beartype from jax import Array from numpy.typing import NDArray -from skillmodels.filtered_states import anchor_states_df -from skillmodels.kalman_filters import transform_sigma_points -from skillmodels.model_spec import ModelSpec -from skillmodels.params_index import get_params_index -from skillmodels.parse_params import create_parsing_info, parse_params -from skillmodels.process_data import process_data -from skillmodels.process_debug_data import create_state_ranges -from skillmodels.process_model import process_model -from skillmodels.types import ( +from skillmodels._beartype_conf import SIMULATION_CONF +from skillmodels.common.anchoring import anchor_states_df +from skillmodels.common.measurement_models import ( + MeasurementFamily, + resolve_measurement_family, +) +from skillmodels.common.model_spec import ModelSpec +from skillmodels.common.params_index import get_params_index +from skillmodels.common.parse_params import create_parsing_info, parse_params +from skillmodels.common.process_data import process_data +from skillmodels.common.process_model import process_model +from skillmodels.common.state_ranges import create_state_ranges +from skillmodels.common.transitions import apply_anchored_transition +from skillmodels.common.types import ( Dimensions, EndogenousFactorsInfo, Labels, @@ -27,6 +33,7 @@ ) +@beartype(conf=SIMULATION_CONF) def simulate_dataset( model_spec: ModelSpec, params: pd.DataFrame, @@ -108,7 +115,7 @@ def simulate_dataset( params = params.reindex(params_index) parsing_info = create_parsing_info( - params_index=params.index, # ty: ignore[invalid-argument-type] + params_index=params_index, update_info=processed_model.update_info, labels=processed_model.labels, anchoring=processed_model.anchoring, @@ -144,9 +151,13 @@ def simulate_dataset( update_info=processed_model.update_info, control_data=control_data, observed_factors=observed_factors, - policies=policies, # ty: ignore[invalid-argument-type] + policies=policies, transition_info=processed_model.transition_info, rng=rng, + measurement_families={ + name: resolve_measurement_family(model) + for name, model in model_spec.measurement_models.items() + }, ) # Create collapsed versions with user-facing periods @@ -203,9 +214,10 @@ def _simulate_dataset( update_info: pd.DataFrame, control_data: Array, observed_factors: Array, - policies: list[dict], + policies: list[dict] | None, transition_info: TransitionInfo, rng: np.random.Generator, + measurement_families: Mapping[str, tuple[int, float, float]] | None = None, ) -> tuple[pd.DataFrame, pd.DataFrame]: """Simulate datasets generated by a latent factor model. @@ -226,6 +238,9 @@ def _simulate_dataset( policies: List of policy dictionaries specifying stochastic shocks. transition_info: Information about transition functions. rng: NumPy random number generator. + measurement_families: Optional `name -> (family_code, lower, upper)` map for + non-Gaussian measures. Omitted or all-Gaussian periods draw exactly as + before; listed probit/Tobit measures are drawn by their family. Returns: observed_data: DataFrame with simulated measurements. @@ -292,29 +307,27 @@ def _simulate_dataset( # get combined states and observed factors as jax array to_concat = [latent_states[t], observed_factors[t]] states = jnp.array(np.concatenate(to_concat, axis=-1)) - # reshaping is just needed for transform sigma points - states = states.reshape(1, 1, *states.shape) # extract trans coeffs for the period trans_coeffs = {k: arr[t] for k, arr in transition_params.items()} - # get anchoring_scaling_factors for the period + # get anchoring scaling factors and constants for periods t, t+1 anchoring_scaling_factors = parsed_params.anchoring_scaling_factors[ jnp.array([t, t + 1]) ] - # get anchoring constants for the period anchoring_constants = parsed_params.anchoring_constants[jnp.array([t, t + 1])] - # call transform_sigma_points and convert result to numpy + # apply the period-t transition; the common helper takes flat + # `(N, n_fac)` states directly so no sigma-points reshape is needed. next_states = np.array( - transform_sigma_points( - sigma_points=states, + apply_anchored_transition( + states=states, transition_func=transition_info.func, trans_coeffs=trans_coeffs, anchoring_scaling_factors=anchoring_scaling_factors, anchoring_constants=anchoring_constants, ), - ).reshape(n_obs, -1) + ) errors = rng.multivariate_normal( mean=np.zeros(n_states), @@ -328,14 +341,21 @@ def _simulate_dataset( observed_data_by_period = [] for t in range(n_aug_periods): + measure_names = list(loadings_df.loc[t].index) + families, lowers, uppers = _period_family_arrays( + measure_names, measurement_families + ) meas = pd.DataFrame( data=measurements_from_states( rng=rng, - states=latent_states[t], # ty: ignore[invalid-argument-type] - controls=control_data[t], # ty: ignore[invalid-argument-type] + states=latent_states[t], + controls=control_data[t], loadings=loadings_df.loc[t].to_numpy(), control_params=control_params_df.loc[t].to_numpy(), sds=meas_sds.loc[t].to_numpy().flatten(), + families=families, + lowers=lowers, + uppers=uppers, ), columns=loadings_df.loc[t].index, ) @@ -432,7 +452,7 @@ def _get_shock( mean: float, sd: float, size: int, -) -> NDArray[np.floating]: +) -> NDArray[np.floating] | Array: """Add stochastic effect to a factor of length n_obs. Args: @@ -459,8 +479,8 @@ def generate_start_states( n_obs: int, dimensions: Dimensions, dist_args: list[dict], - weights: NDArray[np.floating], -) -> NDArray[np.floating]: + weights: NDArray[np.floating] | Array, +) -> NDArray[np.floating] | Array: """Draw initial states and control variables from a (mixture of) normals. Args: @@ -491,12 +511,15 @@ def generate_start_states( def measurements_from_states( rng: np.random.Generator, - states: NDArray[np.floating], - controls: NDArray[np.floating], - loadings: NDArray[np.floating], - control_params: NDArray[np.floating], - sds: NDArray[np.floating], -) -> NDArray[np.floating]: + states: NDArray[np.floating] | Array, + controls: NDArray[np.floating] | Array, + loadings: NDArray[np.floating] | Array, + control_params: NDArray[np.floating] | Array, + sds: NDArray[np.floating] | Array, + families: NDArray[np.integer] | None = None, + lowers: NDArray[np.floating] | None = None, + uppers: NDArray[np.floating] | None = None, +) -> NDArray[np.floating] | Array: """Generate the variables that would be observed in practice. This generates the data for only one period. Let n_meas be the number @@ -512,6 +535,13 @@ def measurements_from_states( sds: numpy array of size (n_meas) with the standard deviations of the measurements. Measurement error is assumed to be independent across measurements. + families: optional `(n_meas,)` `MeasurementFamily` codes. `None` (the + default) draws every measurement as Gaussian, byte-identical to the + original simulation. When given, each measurement is drawn by its + family: Gaussian adds normal noise, probit returns + `1{eta + N(0,1) >= 0}`, Tobit clips `eta + N(0, sigma^2)` to its bounds. + lowers: optional `(n_meas,)` Tobit lower bounds (`-inf` to disable). + uppers: optional `(n_meas,)` Tobit upper bounds (`+inf` to disable). Returns: measurements: array of shape (n_obs, n_meas) with measurements. @@ -519,12 +549,68 @@ def measurements_from_states( """ n_meas = loadings.shape[0] n_obs = len(states) - epsilon = rng.multivariate_normal([0] * n_meas, np.diag(sds**2), n_obs) - states_part = np.dot(states, loadings.T) - control_part = np.dot(controls, control_params.T) - return states_part + control_part + epsilon + eta = np.dot(states, loadings.T) + np.dot(controls, control_params.T) + if families is None: + epsilon = rng.multivariate_normal([0] * n_meas, np.diag(sds**2), n_obs) + return eta + epsilon + return _draw_by_family(rng, eta, np.asarray(sds), families, lowers, uppers) + + +def _period_family_arrays( + measure_names: list[str], + measurement_families: Mapping[str, tuple[int, float, float]] | None, +) -> tuple[ + NDArray[np.integer] | None, + NDArray[np.floating] | None, + NDArray[np.floating] | None, +]: + """Build aligned family/bound arrays for a period, or `None` if all Gaussian. + + Returning `None` for an all-Gaussian period keeps `measurements_from_states` on + its original byte-identical Gaussian path. + """ + if not measurement_families: + return None, None, None + gaussian = int(MeasurementFamily.GAUSSIAN) + resolved = [ + measurement_families.get(name, (gaussian, -np.inf, np.inf)) + for name in measure_names + ] + if all(code == gaussian for code, _lo, _hi in resolved): + return None, None, None + families = np.array([code for code, _lo, _hi in resolved], dtype=int) + lowers = np.array([lo for _code, lo, _hi in resolved], dtype=float) + uppers = np.array([hi for _code, _lo, hi in resolved], dtype=float) + return families, lowers, uppers + + +def _draw_by_family( + rng: np.random.Generator, + eta: NDArray[np.floating], + sds: NDArray[np.floating], + families: NDArray[np.integer], + lowers: NDArray[np.floating] | None, + uppers: NDArray[np.floating] | None, +) -> NDArray[np.floating]: + """Draw each measurement column according to its `MeasurementFamily`.""" + n_obs, n_meas = eta.shape + out = np.empty_like(eta) + for j in range(n_meas): + family = int(families[j]) + if family == int(MeasurementFamily.PROBIT): + latent = eta[:, j] + rng.standard_normal(n_obs) + out[:, j] = (latent >= 0.0).astype(float) + elif family == int(MeasurementFamily.TOBIT): + latent = eta[:, j] + sds[j] * rng.standard_normal(n_obs) + lower = -np.inf if lowers is None else lowers[j] + upper = np.inf if uppers is None else uppers[j] + out[:, j] = np.clip(latent, lower, upper) + else: + out[:, j] = eta[:, j] + sds[j] * rng.standard_normal(n_obs) + return out +@beartype(conf=SIMULATION_CONF) def simulate_policy_effect( model_spec: ModelSpec, params: pd.DataFrame, diff --git a/src/skillmodels/common/state_ranges.py b/src/skillmodels/common/state_ranges.py new file mode 100644 index 00000000..af7b88fc --- /dev/null +++ b/src/skillmodels/common/state_ranges.py @@ -0,0 +1,61 @@ +"""Generic posterior-state range utilities, estimator-agnostic. + +`create_state_ranges` reduces a `(obs x period x factor)` DataFrame of +filtered or simulated latent-factor values to a per-factor, per-period +range (min/max or symmetric quantile bounds). The function is purely +DataFrame-level and does not depend on which estimator produced the +input — any caller that can hand it a DataFrame with a "period" (or +"aug_period") column and one column per factor can use it. + +Historically this lived under `skillmodels.chs.process_debug_data` but +the implementation never depended on CHS-specific machinery; AF and +AMN consumers (`posterior_states.py` in both subpackages) already +imported it across the subpackage boundary, which motivated the move. +""" + +import pandas as pd +from beartype import beartype + +from skillmodels._beartype_conf import DIAGNOSTICS_CONF + + +@beartype(conf=DIAGNOSTICS_CONF) +def create_state_ranges( + filtered_states: pd.DataFrame, + factors: tuple[str, ...] | list[str], + quantile_cutoff: float | None = None, +) -> dict[str, pd.DataFrame]: + """Compute minimum and maximum state values for each factor by period. + + Args: + filtered_states: DataFrame with filtered states. Must have a "period" + column (or "aug_period" — that one wins if both are present). + factors: List of factor names to compute ranges for. + quantile_cutoff: If provided, use quantiles instead of min/max. The + cutoff is applied symmetrically: the minimum is the + `quantile_cutoff` quantile and the maximum is the + `1 - quantile_cutoff` quantile. For example, + `quantile_cutoff=0.01` uses the 1st and 99th percentiles. + + Return: + Dictionary mapping factor names to DataFrames with "minimum" and + "maximum" columns, indexed by period. + + """ + ranges: dict[str, pd.DataFrame] = {} + period_col = "aug_period" if "aug_period" in filtered_states.columns else "period" + + if quantile_cutoff is not None: + if not 0 < quantile_cutoff < 0.5: + raise ValueError("quantile_cutoff must be between 0 and 0.5 (exclusive)") + minima = filtered_states.groupby(period_col).quantile(quantile_cutoff) + maxima = filtered_states.groupby(period_col).quantile(1 - quantile_cutoff) + else: + minima = filtered_states.groupby(period_col).min() + maxima = filtered_states.groupby(period_col).max() + + for factor in factors: + df = pd.concat([minima[factor], maxima[factor]], axis=1) + df.columns = pd.Index(["minimum", "maximum"]) + ranges[factor] = df + return ranges diff --git a/src/skillmodels/common/transition_functions.py b/src/skillmodels/common/transition_functions.py new file mode 100644 index 00000000..5f9ff48e --- /dev/null +++ b/src/skillmodels/common/transition_functions.py @@ -0,0 +1,538 @@ +"""Contains transition functions and corresponding helper functions. + +Below the signature and purpose of a transition function and its helper +functions is explained with a transition function called example_func: +> + +**example_func(** *states, params**)**: + + The actual transition function. + +Args: + * states: 1d numpy array of length n_all_factors + * params: 1d numpy array with coefficients specific to this transition function + +Return: + * float +**names_example_func(** *factors* **)**: + + Generate a list of names for the params of the transition function. + + The names will be used to construct index tuples in the following way: + + ('transition', period, factor, NAME) + +The transition functions have to be JAX jittable and differentiable. However, they +should not be jitted yet. + +""" + +import functools +import math +from itertools import combinations + +import jax +import jax.numpy as jnp +import optimagic as om +from jax import Array + +from skillmodels.common.fixed_constraint import FixedConstraintWithValue +from skillmodels.common.selector import select_by_loc + + +def linear(states: Array, params: Array) -> Array: + """Linear production function where the constant is the last parameter.""" + constant = params[-1] + betas = params[:-1] + return jnp.dot(states, betas) + constant + + +def params_linear(factors: tuple[str, ...]) -> list[str]: + """Index tuples for linear transition function.""" + return [*factors, "constant"] + + +def identity_constraints_linear( + factor: str, + aug_period: int, + all_factors: tuple[str, ...], +) -> list[FixedConstraintWithValue]: + """Identity constraints for linear transition function.""" + constraints: list[FixedConstraintWithValue] = [] + for regressor in params_linear(all_factors): + val = 1.0 if factor == regressor else 0.0 + loc = ("transition", aug_period, factor, regressor) + constraints.append(FixedConstraintWithValue(loc=loc, value=val)) + return constraints + + +def translog(states: Array, params: Array) -> Array: + """Translog transition function. + + The name is a convention in the skill formation literature even though the function + is better described as a linear in parameters transition function with squares and + interaction terms of the states. + + This is the general-library specification: parameters are enumerated over ALL + factors in `all_factors` (latent AND observed). Observed factors (e.g. income) + therefore enter the production function with their own free linear, square and + interaction coefficients. This is by design for the CHS estimator. For an AF + production function that matches the paper's equation (6) (skill + investment + only, NO squares), use `translog_af` and pass only the production factors. + + """ + nfac = len(states) + constant = params[-1] + lin_beta = params[:nfac] + square_beta = params[nfac : 2 * nfac] + inter_beta = params[2 * nfac : -1] + + res = jnp.dot(states, lin_beta) + res += jnp.dot(states**2, square_beta) + for p, (a, b) in zip(inter_beta, combinations(range(nfac), 2), strict=False): + res += p * states[a] * states[b] + res += constant + return res + + +def params_translog(factors: tuple[str, ...]) -> list[str]: + """Index tuples for the translog production function.""" + return ( + list(factors) + + [f"{factor} ** 2" for factor in factors] + + [f"{a} * {b}" for a, b in combinations(factors, 2)] + + ["constant"] + ) + + +def identity_constraints_translog( + factor: str, + aug_period: int, + all_factors: tuple[str, ...], +) -> list[FixedConstraintWithValue]: + """Identity constraints for translog transition function.""" + constraints: list[FixedConstraintWithValue] = [] + for regressor in params_translog(all_factors): + val = 1.0 if factor == regressor else 0.0 + loc = ("transition", aug_period, factor, regressor) + constraints.append(FixedConstraintWithValue(loc=loc, value=val)) + return constraints + + +def translog_af(states: Array, params: Array) -> Array: + """AF (2020) production translog, equation (6): NO square terms. + + Implements `a_t + sum_i beta_i * states_i + sum_{i list[str]: + """Index tuples for `translog_af` (linear + interactions + constant).""" + return ( + list(factors) + + [f"{a} * {b}" for a, b in combinations(factors, 2)] + + ["constant"] + ) + + +def identity_constraints_translog_af( + factor: str, + aug_period: int, + all_factors: tuple[str, ...], +) -> list[FixedConstraintWithValue]: + """Identity constraints for `translog_af` (carry-forward aug periods).""" + constraints: list[FixedConstraintWithValue] = [] + for regressor in params_translog_af(all_factors): + val = 1.0 if factor == regressor else 0.0 + loc = ("transition", aug_period, factor, regressor) + constraints.append(FixedConstraintWithValue(loc=loc, value=val)) + return constraints + + +def log_ces(states: Array, params: Array) -> Array: + """Log CES production function (KLS version). + + Computed as ``log(sum_i gamma_i * exp(states_i * phi)) / phi`` via a + numerically stable weighted logsumexp. The weighted form keeps both the + forward pass and the gradient finite when some ``gamma_i = 0``; the + naive ``logsumexp(log(gamma) + states * phi)`` has a 1 / gamma term in + the gradient that produces NaN at ``gamma_i = 0``. + + This is the general-library specification: the CES weights `gamma_i` are + enumerated over ALL factors in `all_factors` (latent AND observed), so + observed factors (e.g. income) receive a share of the probability simplex + and enter the production aggregate. This is by design for the CHS + estimator. For an AF production CES over the production factors only + (skill + investment, matching the paper's equation (7)), use `log_ces_af` + and pass only the production factors. + + Location restriction (Freyberger 2025): the simplex `sum_i gamma_i = 1` + (with no free additive level) supplies the *cross-period* skills-location + alternative (Assumption a:ageinvariant_technology_skills_ces(b)) -- i.e. it + substitutes for age-invariance of the later skill measurement intercepts. It + does NOT supply the absolute INITIAL location anchor mu_theta,0,1=0, which is + still required separately: plain log_ces obeys f(x+c,i+c)=f(x,i)+c, so a + common shift of all latent inputs would otherwise leave observables unchanged. + So a `log_ces` model still pins a period-0 intercept, but need not also pin + the later skill intercepts to be equal across periods. + """ + phi = params[-1] + gammas = params[:-1] + scaling_factor = 1 / phi + + exponents = states * phi + max_exp = jnp.max(exponents) + shifted = jnp.exp(exponents - max_exp) + unscaled = max_exp + jnp.log(jnp.sum(gammas * shifted)) + return unscaled * scaling_factor + + +def params_log_ces(factors: tuple[str, ...]) -> list[str]: + """Index tuples for the log_ces production function.""" + return [*factors, "phi"] + + +def constraints_log_ces( + factor: str, + factors: tuple[str, ...], + aug_period: int, +) -> om.constraints.Constraint: + """Constraints for log_ces production function.""" + names = params_log_ces(factors) + loc = [("transition", aug_period, factor, name) for name in names[:-1]] + return om.ProbabilityConstraint(selector=functools.partial(select_by_loc, loc=loc)) + + +def identity_constraints_log_ces( + factor: str, # noqa: ARG001 + aug_period: int, # noqa: ARG001 + all_factors: tuple[str, ...], # noqa: ARG001 +) -> list[om.constraints.Constraint]: + """Identity constraints for log_ces in carry-forward aug periods. + + Returns an empty list. `log_ces` factors carry their own + `ProbabilityConstraint` on the gammas (`constraints_log_ces`), + which already pins the simplex. The carry-forward identity + constraints used for `linear` / `translog` would conflict with + that probability fold, so we no-op here -- the natural carry- + forward in aug periods comes from the upstream model setup + (e.g. `has_production_shock=False` for time-invariant factors). + + The signature matches `identity_constraints_linear` so callers + can dispatch by name without case-splitting. + """ + return [] + + +def log_ces_af(states: Array, params: Array) -> Array: + """AF (2020) production CES, equation (7): CES over production factors only. + + Identical math to `log_ces`; named separately so AF models can declare a + production-only CES (skill + investment) without observed factors leaking + in. Pass ONLY the production factors as `states`. + """ + return log_ces(states, params) + + +def params_log_ces_af(factors: tuple[str, ...]) -> list[str]: + """Index tuples for the `log_ces_af` production function.""" + return params_log_ces(factors) + + +def constraints_log_ces_af( + factor: str, + factors: tuple[str, ...], + aug_period: int, +) -> om.constraints.Constraint: + """Constraints for `log_ces_af` production function (gammas on simplex).""" + return constraints_log_ces(factor=factor, factors=factors, aug_period=aug_period) + + +def identity_constraints_log_ces_af( + factor: str, + aug_period: int, + all_factors: tuple[str, ...], +) -> list[om.constraints.Constraint]: + """Identity constraints for `log_ces_af` -- no-op. + + See :func:`identity_constraints_log_ces` for the rationale. + """ + return identity_constraints_log_ces( + factor=factor, aug_period=aug_period, all_factors=all_factors + ) + + +def log_ces_with_constant(states: Array, params: Array) -> Array: + """Log CES production function with an additive level constant. + + Computed as ``A + (1/phi) * log(sum_i gamma_i * exp(states_i * phi))``, + matching MATLAB's AF reference parametrisation + ``log_skills_{t+1} = log(A_t) + (1/sigma) log(sum gamma_i theta_i^sigma)``. + + The plain ``log_ces`` lacks the constant ``A``, which forces models with + a non-trivial ``A`` (e.g. AF Sec. 5.1's CES sims with ``A = e``) to + absorb the level shift into the next-period skills measurement + intercepts. When matching the MATLAB sim parametrisation exactly + (all skill intercepts pinned to 0, ``A_t`` free per period), use + this variant instead. + + Location (Freyberger 2025): unlike plain ``log_ces``, the free additive + constant ``A`` adds a level degree of freedom, so the simplex on the weights + is only a redundant parameterisation here and supplies no location + restriction at all. Both the absolute initial location anchor and any + cross-period location restriction must be imposed via measurement-intercept + normalizations (the AF validator requires the initial intercept anchor). + """ + constant_term = params[-1] + phi = params[-2] + gammas = params[:-2] + scaling_factor = 1 / phi + + exponents = states * phi + max_exp = jnp.max(exponents) + shifted = jnp.exp(exponents - max_exp) + unscaled = max_exp + jnp.log(jnp.sum(gammas * shifted)) + return constant_term + unscaled * scaling_factor + + +def params_log_ces_with_constant(factors: tuple[str, ...]) -> list[str]: + """Index tuples for ``log_ces_with_constant``.""" + return [*factors, "phi", "constant"] + + +def constraints_log_ces_with_constant( + factor: str, + factors: tuple[str, ...], + aug_period: int, +) -> om.constraints.Constraint: + """Constraints for ``log_ces_with_constant`` (gammas on the simplex).""" + names = params_log_ces_with_constant(factors) + # Gammas are everything except the last two entries (phi and constant). + loc = [("transition", aug_period, factor, name) for name in names[:-2]] + return om.ProbabilityConstraint(selector=functools.partial(select_by_loc, loc=loc)) + + +def identity_constraints_log_ces_with_constant( + factor: str, # noqa: ARG001 + aug_period: int, # noqa: ARG001 + all_factors: tuple[str, ...], # noqa: ARG001 +) -> list[om.constraints.Constraint]: + """Identity constraints for ``log_ces_with_constant`` -- no-op. + + See :func:`identity_constraints_log_ces` for the rationale. + """ + return [] + + +def constant(state: Array, params: Array) -> Array: # noqa: ARG001 + """Constant production function.""" + return state + + +def params_constant(factors: tuple[str, ...]) -> list[str]: # noqa: ARG001 + """Index tuples for the constant production function.""" + return [] + + +def robust_translog(states: Array, params: Array) -> Array: + """Numerically robust version of the translog transition function. + + This function does a clipping of the state vector at +- 1e12 before calling + the standard translog function. It has a no effect on the results if the + states do not get close to the clipping values and prevents overflows otherwise. + + The name is a convention in the skill formation literature even though the function + is better described as a linear in parameters transition function with squares and + interaction terms of the states. + + """ + clipped_states = jnp.clip(states, -1e12, 1e12) + return translog(states=clipped_states, params=params) + + +def params_robust_translog(factors: tuple[str, ...]) -> list[str]: + """Return parameter names for robust translog transition function.""" + return params_translog(factors) + + +def identity_constraints_robust_translog( + factor: str, + aug_period: int, + all_factors: tuple[str, ...], +) -> list[FixedConstraintWithValue]: + """Identity constraints for robust_translog.""" + return identity_constraints_translog( + factor=factor, aug_period=aug_period, all_factors=all_factors + ) + + +def _soft_clip(x: Array, scale: float, power: int) -> Array: + """Smooth odd map; in real arithmetic |g(x)| < scale for finite x. + + Floating-point results may round to +/-scale. + + g(x) = x / (1 + |x / scale| ** power) ** (1 / power). The helper maps +/-infinity + to +/-scale and preserves NaN. + The full transition does not repair nonfinite linear inputs. + """ + # Validate configuration in stable_translog; every evaluated branch is safe. + safe_x = jnp.where(jnp.isfinite(x), x, 0.0) + magnitude = jnp.abs(safe_x) + inside = magnitude <= scale + # Match this tie branch to the numerator branch for the correct derivative at + # |x| = scale. + m = jnp.where(inside, scale, magnitude) + unit_x = safe_x / m + unit_s = scale / m + denominator = (unit_s**power + unit_x**power) ** (1.0 / power) + # Keeping x itself in the small branch avoids losing subnormals in x / scale. + numerator = jnp.where(inside, safe_x, scale * unit_x) + clipped = numerator / denominator + return jnp.where(jnp.isfinite(x), clipped, scale * jnp.sign(x)) + + +def stable_translog( + states: Array, + params: Array, + *, + scale: float = 3.0, + power: int = 4, +) -> Array: + """Translog whose squares and interactions are evaluated on soft-clipped states. + + f = c + Σ_j β_j s_j + Σ_j γ_j g(s_j)² + Σ_{a= 2, got {power}." + raise ValueError(msg) + if not math.isfinite(scale) or scale <= 0: + msg = f"scale must be positive and finite, got {scale}." + raise ValueError(msg) + nfac = len(states) + constant = params[-1] + lin_beta = params[:nfac] + square_beta = params[nfac : 2 * nfac] + inter_beta = params[2 * nfac : -1] + + g = _soft_clip(states, scale=scale, power=power) + res = jnp.dot(states, lin_beta) + res += jnp.dot(g**2, square_beta) + for p, (a, b) in zip(inter_beta, combinations(range(nfac), 2), strict=False): + res += p * g[a] * g[b] + res += constant + return res + + +def params_stable_translog(factors: tuple[str, ...]) -> list[str]: + """Parameter names for stable_translog (same as translog).""" + return params_translog(factors) + + +def identity_constraints_stable_translog( + factor: str, + aug_period: int, + all_factors: tuple[str, ...], +) -> list[FixedConstraintWithValue]: + """Identity constraints for stable_translog (same as translog).""" + return identity_constraints_translog( + factor=factor, aug_period=aug_period, all_factors=all_factors + ) + + +def linear_and_squares(states: Array, params: Array) -> Array: + """linear_and_squares transition function.""" + nfac = len(states) + constant = params[-1] + lin_beta = params[:nfac] + square_beta = params[nfac : 2 * nfac] + + res = jnp.dot(states, lin_beta) + res += jnp.dot(states**2, square_beta) + res += constant + return res + + +def params_linear_and_squares(factors: tuple[str, ...]) -> list[str]: + """Index tuples for the linear_and_squares production function.""" + return list(factors) + [f"{factor} ** 2" for factor in factors] + ["constant"] + + +def identity_constraints_linear_and_squares( + factor: str, + aug_period: int, + all_factors: tuple[str, ...], +) -> list[FixedConstraintWithValue]: + """Identity constraints for linear_and_squares transition function.""" + constraints: list[FixedConstraintWithValue] = [] + for regressor in params_linear_and_squares(all_factors): + val = 1.0 if factor == regressor else 0.0 + loc = ("transition", aug_period, factor, regressor) + constraints.append(FixedConstraintWithValue(loc=loc, value=val)) + return constraints + + +def log_ces_general(states: Array, params: Array) -> Array: + """Generalized log_ces production function without known location and scale.""" + n = states.shape[-1] + tfp = params[-1] + gammas = params[:n] + sigmas = params[n : 2 * n] + + # note: once the b argument is supported in jax.scipy.special.logsumexp, we can set + # b = gammas instead of adding the log of gammas to sigma_points * phi + + # the log step for gammas underflows for gamma = 0, but this is handled correctly + # by logsumexp and does not raise a warning. + unscaled = jax.scipy.special.logsumexp(jnp.log(gammas) + states * sigmas) + return unscaled * tfp + + +def params_log_ces_general(factors: tuple[str, ...]) -> list[str]: + """Index tuples for the generalized log_ces production function.""" + return list(factors) + [f"sigma_{fac}" for fac in factors] + ["tfp"] + + +def identity_constraints_log_ces_general( + factor: str, # noqa: ARG001 + aug_period: int, # noqa: ARG001 + all_factors: tuple[str, ...], # noqa: ARG001 +) -> list[om.constraints.Constraint]: + """Identity constraints for log_ces_general -- no-op. + + See :func:`identity_constraints_log_ces` for the rationale. + """ + return [] diff --git a/src/skillmodels/common/transitions.py b/src/skillmodels/common/transitions.py new file mode 100644 index 00000000..0fabbe89 --- /dev/null +++ b/src/skillmodels/common/transitions.py @@ -0,0 +1,58 @@ +"""Estimator-agnostic transition-function helpers. + +The core operation in any latent-factor model is + + state_next = (transition_function · anchor) (state_current) + +with the per-period anchoring rescaling the latent factor onto the unit +of its anchor measurement before the transition runs and back to the +factor's own unit after. The CHS UKF, the AF Halton integrator, and the +AMN simulate-and-regress stage all need this composition; only the +CHS UKF additionally reshapes the inputs into sigma points. + +`apply_anchored_transition` is the shared core. CHS's +`transform_sigma_points` wraps it with a `(n_obs, n_mixtures, n_sigma, +n_fac)`-aware reshape. Code that just needs to push a flat +`(N, n_fac)` panel of states through one period's transition (e.g. +`simulate_dataset`) can call this helper directly. +""" + +from collections.abc import Callable + +from jax import Array + + +def apply_anchored_transition( + states: Array, + transition_func: Callable[[dict[str, Array], Array], Array], + trans_coeffs: dict[str, Array], + anchoring_scaling_factors: Array, + anchoring_constants: Array, +) -> Array: + """Anchor states, apply the transition, then unanchor the result. + + Args: + states: Shape `(N, n_fac)`. Each row is one (obs x mixture x + sigma-point) packed into a flat sample. + transition_func: Vectorised transition `(trans_coeffs, anchored) + -> anchored_next`. Must broadcast over the leading axis. + trans_coeffs: Per-factor transition parameters dict for the + current period. + anchoring_scaling_factors: Shape `(2, n_fac)`. Row 0 is the + input period's scaling, row 1 is the output period's. + anchoring_constants: Shape `(2, n_fac)`. Same layout. + + Return: + Shape `(N, n_observed)` where `n_observed` is the leading + latent-factor block of `n_fac` (observed factors at the tail + of the input are passed through to the transition but the + unanchoring slice trims them off — same convention as the + former `transform_sigma_points`). + """ + anchored = states * anchoring_scaling_factors[0] + anchoring_constants[0] + transformed_anchored = transition_func(trans_coeffs, anchored) + + n_observed = transformed_anchored.shape[-1] + return ( + transformed_anchored - anchoring_constants[1][:n_observed] + ) / anchoring_scaling_factors[1][:n_observed] diff --git a/src/skillmodels/types.py b/src/skillmodels/common/types.py similarity index 80% rename from src/skillmodels/types.py rename to src/skillmodels/common/types.py index 05c8a795..ded3f768 100644 --- a/src/skillmodels/types.py +++ b/src/skillmodels/common/types.py @@ -10,6 +10,8 @@ import pandas as pd from jax import Array +from skillmodels._beartype_conf import MODEL_SPEC_CONF, beartype_init + def _make_immutable(value: Any) -> Any: # noqa: ANN401 """Recursively convert a value to its immutable equivalent.""" @@ -48,6 +50,29 @@ def ensure_containers_are_immutable[K, V]( return cast("MappingProxyType[K, V]", _make_immutable(value)) +def _to_plain(value: Any) -> Any: # noqa: ANN401 + """Inverse of `_make_immutable`: recursively unwrap to mutable Python. + + Used at boundaries where a downstream library (e.g. optimagic's + `om.minimize(algo_options=...)`) does a strict `isinstance(..., dict)` + check that rejects `MappingProxyType`. + """ + if isinstance(value, MappingProxyType | Mapping): + return {k: _to_plain(v) for k, v in value.items()} + if isinstance(value, (tuple, list)): + return [_to_plain(v) for v in value] + if isinstance(value, frozenset | set): + return {_to_plain(v) for v in value} + return value + + +def to_plain_dict[K, V]( + mp: Mapping[K, V], +) -> dict[K, V]: + """Recursively unwrap a `MappingProxyType` tree into plain `dict`.""" + return cast("dict[K, V]", _to_plain(mp)) + + def _reduce_mapping_proxy(mp: MappingProxyType) -> tuple: return ensure_containers_are_immutable, (dict(mp),) @@ -67,8 +92,7 @@ class FactorType(Enum): """Type of a latent factor in the model.""" STATE = auto() # Regular state factor - ENDOGENOUS = auto() # Endogenous factor (not a correction) - CORRECTION = auto() # Correction factor (is_endogenous=True, is_correction=True) + ENDOGENOUS = auto() # Endogenous (investment) factor class MeasurementType(Enum): @@ -129,6 +153,11 @@ class Labels: """Map each augmented stage to its original stage.""" transition_names: tuple[str, ...] = () """Names of the transition functions per factor.""" + missing_observed_factor_moments: MappingProxyType[str, tuple[str, str]] = field( + default_factory=lambda: MappingProxyType({}) + ) + """Map an observed factor that may be missing to its `(mean, variance)` data + columns, see `ModelSpec.missing_observed_factor_moments`.""" @property def all_factors(self) -> tuple[str, ...]: @@ -196,32 +225,6 @@ def from_config( ) -@dataclass(frozen=True) -class EstimationOptions: - """Options for model estimation.""" - - robust_bounds: bool = True - """Whether to use robust bounds.""" - bounds_distance: float = 1e-3 - """Distance for bounds. Zeroed out if `robust_bounds` is False.""" - n_mixtures: int = 1 - """Number of mixture components.""" - sigma_points_scale: float = 2 - """Scaling factor for sigma points in unscented transform.""" - clipping_lower_bound: float = -1e30 - """Lower bound for soft clipping.""" - clipping_upper_bound: float | None = None - """Upper bound for soft clipping (None for no upper bound).""" - clipping_lower_hardness: float = 1 - """Hardness of lower clipping.""" - clipping_upper_hardness: float = 1 - """Hardness of upper clipping.""" - - def __post_init__(self) -> None: # noqa: D105 - if not self.robust_bounds: - object.__setattr__(self, "bounds_distance", 0.0) - - @dataclass(frozen=True) class TransitionInfo: """Information about transition functions.""" @@ -250,39 +253,45 @@ def is_state(self) -> bool: @property def is_endogenous(self) -> bool: - """Whether the factor is endogenous (ENDOGENOUS or CORRECTION).""" - return self.factor_type in (FactorType.ENDOGENOUS, FactorType.CORRECTION) - - @property - def is_correction(self) -> bool: - """Whether the factor is a correction factor.""" - return self.factor_type == FactorType.CORRECTION + """Whether the factor is endogenous.""" + return self.factor_type == FactorType.ENDOGENOUS @classmethod - def from_flags( - cls, *, is_endogenous: bool = False, is_correction: bool = False - ) -> FactorInfo: + def from_flags(cls, *, is_endogenous: bool = False) -> FactorInfo: """Create FactorInfo from boolean flags. Args: is_endogenous: Whether the factor is endogenous. - is_correction: Whether the factor is a correction (must be endogenous). Returns: FactorInfo with the appropriate FactorType. - Raises: - ValueError: If is_correction is True but is_endogenous is False. - """ - if is_correction and not is_endogenous: - msg = "A correction factor must also be endogenous" - raise ValueError(msg) - if is_correction: - return cls(factor_type=FactorType.CORRECTION) - if is_endogenous: - return cls(factor_type=FactorType.ENDOGENOUS) - return cls(factor_type=FactorType.STATE) + factor_type = FactorType.ENDOGENOUS if is_endogenous else FactorType.STATE + return cls(factor_type=factor_type) + + +@dataclass(frozen=True) +class ControlFunctionInfo: + """Resolved control-function configuration for the endogenous investment. + + Single source of truth shared by the CHS (Kalman-MLE) and AMN + (simulate-and-regress) estimators. Built by resolving the `CorrectionSpec` + declared on the endogenous investment `FactorSpec`: empty `state_predictors` + and `targets` expand to all state factors, and each target's `kappa_terms` + default to `("cf",)`. + """ + + investment_factor: str + """The endogenous factor whose control-function residual `cf` is formed.""" + state_predictors: tuple[str, ...] + """State factors entering the contemporaneous first-stage equation.""" + instruments: tuple[str, ...] + """Excluded observed factors entering the first stage only.""" + targets: tuple[str, ...] + """State factors whose production equation receives the `kappa * cf` term.""" + kappa_terms: MappingProxyType[str, tuple[str, ...]] + """Per-target `cf` regressor names (e.g. `("cf",)`).""" @dataclass(frozen=True) @@ -294,14 +303,16 @@ class EndogenousFactorsInfo: aug_periods_to_aug_period_meas_types: MappingProxyType[int, MeasurementType] """Map each augmented period to whether it measures states or endogenous factors.""" - bounds_distance: float - """Small value used as shock sd in carry-forward periods.""" aug_periods_from_period: Callable[[int], list[int]] """Return the augmented period indices for a given original period.""" factor_info: MappingProxyType[str, FactorInfo] """Mapping from factor name to its `FactorInfo`.""" + control_function: ControlFunctionInfo | None = None + """Resolved control-function configuration, or `None` if no factor declares + a `correction`.""" +@beartype_init(MODEL_SPEC_CONF) @dataclass(frozen=True) class Normalizations: """Normalizations for factor identification.""" @@ -339,8 +350,6 @@ class ProcessedModel: """String identifiers for factors, periods, controls, and stages.""" anchoring: Anchoring """Anchoring configuration.""" - estimation_options: EstimationOptions - """Numerical estimation settings.""" transition_info: TransitionInfo """Transition function details.""" update_info: pd.DataFrame @@ -398,6 +407,15 @@ class ParsingInfo: """Whether to ignore constant when anchoring.""" has_endogenous_factors: bool """Whether the model has endogenous factors.""" + investment_eq: Array | slice = slice(0, 0) + """Slice for the first-stage investment-equation coefficients (empty unless + a control function is present).""" + investment_factor: str | None = None + """The investment factor carrying the control function, or `None`.""" + kappa: MappingProxyType[str, Array | slice] = field( + default_factory=lambda: MappingProxyType({}) + ) + """Mapping from target factor to its control-function-loading (kappa) slice.""" @dataclass(frozen=True) diff --git a/src/skillmodels/utilities.py b/src/skillmodels/common/utilities.py similarity index 98% rename from src/skillmodels/utilities.py rename to src/skillmodels/common/utilities.py index 9b69945f..9fcb9894 100644 --- a/src/skillmodels/utilities.py +++ b/src/skillmodels/common/utilities.py @@ -6,13 +6,13 @@ import numpy as np import pandas as pd -from skillmodels.model_spec import ( +from skillmodels.common.model_spec import ( FactorSpec, ModelSpec, Normalizations, ) -from skillmodels.params_index import get_params_index -from skillmodels.process_model import ( +from skillmodels.common.params_index import get_params_index +from skillmodels.common.process_model import ( get_dimensions, get_has_endogenous_factors, process_model, diff --git a/src/skillmodels/utils_plotting.py b/src/skillmodels/common/utils_plotting.py similarity index 100% rename from src/skillmodels/utils_plotting.py rename to src/skillmodels/common/utils_plotting.py diff --git a/src/skillmodels/variance_decomposition.py b/src/skillmodels/common/variance_decomposition.py similarity index 82% rename from src/skillmodels/variance_decomposition.py rename to src/skillmodels/common/variance_decomposition.py index e92d055e..480859dc 100644 --- a/src/skillmodels/variance_decomposition.py +++ b/src/skillmodels/common/variance_decomposition.py @@ -8,16 +8,19 @@ from collections.abc import Mapping import pandas as pd +from beartype import beartype -from skillmodels.filtered_states import get_filtered_states -from skillmodels.model_spec import ModelSpec -from skillmodels.process_model import process_model +from skillmodels._beartype_conf import DIAGNOSTICS_CONF +from skillmodels.common.model_spec import ModelSpec +from skillmodels.common.process_model import process_model +@beartype(conf=DIAGNOSTICS_CONF) def decompose_measurement_variance( model_spec: ModelSpec, params: pd.DataFrame, - data: pd.DataFrame, + *, + filtered_states: pd.DataFrame, ) -> pd.DataFrame: """Decompose measurement variance into signal and noise components. @@ -34,9 +37,16 @@ def decompose_measurement_variance( Args: model_spec: The model specification. params: DataFrame with estimated model parameters. - data: Empirical dataset used to estimate the model. - - Returns: + filtered_states: DataFrame with one column per latent factor plus a + "period" column. The caller is responsible for producing this + via the estimator they used (CHS: + ``get_individual_states(...)["anchored_states"]["states"]``; + AF: ``get_af_posterior_states(...)``; AMN: + ``get_amn_posterior_states(...)``). Anchored states are + preferable when available; if not, unanchored states still + give a valid decomposition of the latent variance. + + Return: DataFrame indexed by (period, measurement, factor) with columns: - loading: The factor loading (L) - factor_variance: Var(F) for that period @@ -51,12 +61,6 @@ def decompose_measurement_variance( 78(3), 883-931. https://doi.org/10.3982/ECTA6551 """ - # Get filtered states to compute factor variances - filtered_result = get_filtered_states( - model_spec=model_spec, data=data, params=params - ) - filtered_states = filtered_result["anchored_states"]["states"] - processed_model = process_model(model_spec) return _compute_variance_decomposition( filtered_states=filtered_states, @@ -113,11 +117,19 @@ def _compute_variance_decomposition( var_name="factor", value_name="factor_variance", ignore_index=False ).reset_index(names="aug_period") - # Extract loadings (non-zero only) + # Extract loadings (non-zero only). The params index uses either + # `aug_period` (CHS, internal) or `period` (AF / AMN, public) as the + # second level name; normalize both to `aug_period` so the merge + # below is symmetric across estimators. loadings_df = params.loc["loadings"].reset_index() loadings_df = loadings_df[loadings_df["value"] != 0].copy() loadings_df = loadings_df.rename( - columns={"name1": "measurement", "name2": "factor", "value": "loading"} + columns={ + "name1": "measurement", + "name2": "factor", + "value": "loading", + "period": "aug_period", + } ) # Merge loadings with factor variances @@ -129,7 +141,7 @@ def _compute_variance_decomposition( # Extract measurement standard deviations meas_sds_df = params.loc["meas_sds"].reset_index() meas_sds_df = meas_sds_df.rename( - columns={"name1": "measurement", "value": "meas_sd"} + columns={"name1": "measurement", "value": "meas_sd", "period": "aug_period"} ) meas_sds_df = meas_sds_df[["aug_period", "measurement", "meas_sd"]] @@ -170,6 +182,7 @@ def _compute_variance_decomposition( ] +@beartype(conf=DIAGNOSTICS_CONF) def summarize_measurement_reliability( variance_decomposition: pd.DataFrame, ) -> pd.DataFrame: diff --git a/src/skillmodels/visualize_factor_distributions.py b/src/skillmodels/common/visualize_factor_distributions.py similarity index 91% rename from src/skillmodels/visualize_factor_distributions.py rename to src/skillmodels/common/visualize_factor_distributions.py index c6ca7a9b..8f77f9e5 100644 --- a/src/skillmodels/visualize_factor_distributions.py +++ b/src/skillmodels/common/visualize_factor_distributions.py @@ -10,17 +10,19 @@ import plotly.express as px import plotly.figure_factory as ff import plotly.graph_objects as go +from beartype import beartype from numpy.typing import NDArray from plotly.subplots import make_subplots from scipy.stats import gaussian_kde -from skillmodels.filtered_states import get_filtered_states -from skillmodels.model_spec import ModelSpec -from skillmodels.process_model import process_model -from skillmodels.types import ProcessedModel -from skillmodels.utils_plotting import get_layout_kwargs, get_make_subplot_kwargs +from skillmodels._beartype_conf import DIAGNOSTICS_CONF +from skillmodels.common.model_spec import ModelSpec +from skillmodels.common.process_model import process_model +from skillmodels.common.types import ProcessedModel +from skillmodels.common.utils_plotting import get_layout_kwargs, get_make_subplot_kwargs +@beartype(conf=DIAGNOSTICS_CONF) def combine_distribution_plots( kde_plots: dict[str, go.Figure], contour_plots: dict[tuple[str, str], go.Figure], @@ -159,15 +161,15 @@ def combine_distribution_plots( return fig +@beartype(conf=DIAGNOSTICS_CONF) def univariate_densities( data: pd.DataFrame, model_spec: ModelSpec, - params: pd.DataFrame, period: int, - factors: list[str] | tuple[str, ...] | None = None, *, + filtered_states: pd.DataFrame | dict[str, pd.DataFrame] | list[pd.DataFrame], + factors: list[str] | tuple[str, ...] | None = None, observed_factors: bool = False, - states: pd.DataFrame | dict[str, pd.DataFrame] | list[pd.DataFrame] | None = None, show_curve: bool = True, show_hist: bool = False, show_rug: bool = False, @@ -183,16 +185,19 @@ def univariate_densities( with factor names as keys. Args: - data: Model estimation input data. + data: Model estimation input data (used for observed-factor columns). model_spec: The model specification. See: :ref:`model_specs` - params: Estimated parameter values. period: Model period for which to plot the distributions for. + filtered_states: Pre-computed filtered or simulated factor draws. + Can be a single DataFrame, a list (one per scenario), or a + dict mapping scenario label to DataFrame. Produce it via + the estimator you used (CHS: + ``get_individual_states(...)["anchored_states"]["states"]``; + AF: ``get_af_posterior_states(...)``; AMN: + ``get_amn_posterior_states(...)``). factors: Factors for which to plot the densities. - If None, plot pairwise distributions for all latent factors. + If None, plot densities for all latent factors. observed_factors: If True, plot densities of observed factors too. - states: Filtered or simulated states. Can be a single DataFrame, a list, - or a dictionary of DataFrames. If None, retrieve filtered states using - model and data. Used to estimate state ranges and factor distributions. show_hist: Add histogram to the distplot. show_curve: Add density curve to the distplot. show_rug: Add rug to the distplot. @@ -215,10 +220,7 @@ def univariate_densities( plots_dict: Density plots keyed by factor name. """ - if states is None: - states = get_filtered_states(model_spec=model_spec, data=data, params=params)[ - "anchored_states" - ]["states"] + states = filtered_states processed_model = process_model(model_spec) factors = _get_factors( model=processed_model, @@ -266,15 +268,15 @@ def univariate_densities( return plots_dict +@beartype(conf=DIAGNOSTICS_CONF) def bivariate_density_contours( data: pd.DataFrame, model_spec: ModelSpec, - params: pd.DataFrame, period: int, - factors: list[str] | tuple[str, ...] | None = None, *, + filtered_states: pd.DataFrame | dict[str, pd.DataFrame] | list[pd.DataFrame], + factors: list[str] | tuple[str, ...] | None = None, observed_factors: bool = False, - states: pd.DataFrame | dict[str, pd.DataFrame] | list[pd.DataFrame] | None = None, n_points: int = 50, contour_kwargs: dict[str, Any] | None = None, layout_kwargs: dict[str, Any] | None = None, @@ -284,22 +286,20 @@ def bivariate_density_contours( lines_colorscale: str = "D3", showcolorbar: bool = False, ) -> dict[tuple[str, str], go.Figure]: - """Get dictionary with pariwise density contour plots. + """Get dictionary with pairwise density contour plots. Plots pairwise bivariate density contours for latent factors and collects them in a dictionary with factor combinations as keys. Args: - data: Model estimation input data. + data: Model estimation input data (used for observed-factor columns). model_spec: The model specification. See: :ref:`model_specs` - params: Estimated parameter values. period: Model period for which to plot the distributions for. + filtered_states: Pre-computed filtered or simulated factor draws + (see :func:`univariate_densities` for shape requirements). factors: Factors for which to plot the densities. If None, plot pairwise distributions for all latent factors. observed_factors: If True, plot densities of observed factors too. - states: Filtered or simulated states. Can be a single DataFrame, a list, - or a dictionary of DataFrames. If None, retrieve filtered states using - model and data. Used to estimate state ranges and factor distributions. n_points: Number of grid points used to create the mesh for calculation of kernel densities. contour_kwargs: Keyword arguments to set contour line properties @@ -326,10 +326,7 @@ def bivariate_density_contours( plots_dict: Pairwise density contour plots keyed by factor combinations. """ - if states is None: - states = get_filtered_states(model_spec=model_spec, data=data, params=params)[ - "anchored_states" - ]["states"] + states = filtered_states processed_model = process_model(model_spec) factors = _get_factors( model=processed_model, @@ -392,15 +389,15 @@ def bivariate_density_contours( return plots_dict +@beartype(conf=DIAGNOSTICS_CONF) def bivariate_density_surfaces( data: pd.DataFrame, model_spec: ModelSpec, - params: pd.DataFrame, period: int, - factors: list[str] | tuple[str, ...] | None = None, *, + filtered_states: pd.DataFrame, + factors: list[str] | tuple[str, ...] | None = None, observed_factors: bool = False, - states: pd.DataFrame | None = None, n_points: int = 50, layout_kwargs: dict[str, Any] | None = None, colorscale: str = "RdBu_r", @@ -410,22 +407,22 @@ def bivariate_density_surfaces( showaxlines: bool = True, showlabels: bool = True, ) -> dict[tuple[str, str], go.Figure]: - """Get dictionary with pariwise 3d density surface plots. + """Get dictionary with pairwise 3d density surface plots. Plots pairwise 3d density surfaces for latent factors and collects them in a dictionary with factor name combinations keys. Args: - data: Model estimation input data. + data: Model estimation input data (used for observed-factor columns). model_spec: The model specification. See: :ref:`model_specs` - params: Estimated parameter values. period: Model period for which to plot the distributions for. + filtered_states: Pre-computed filtered or simulated factor draws + as a single DataFrame (see :func:`univariate_densities` for + production guidance). 3d plots do not support multi-scenario + inputs (dict or list) -- pass one DataFrame at a time. factors: Factors for which to plot the densities. If None, plot pairwise distributions for all latent factors. observed_factors: If True, plot densities of observed factors too. - states: Filtered or simulated states as a single DataFrame. - If None, retrieve filtered states using model and data. Used to estimate - state ranges and factor distributions. n_points: Number of grid points used to create the mesh for calculation of kernel densities. @@ -448,12 +445,9 @@ def bivariate_density_surfaces( plots_dict: Pairwise 3d density surface plots keyed by factor combinations. """ - if states is None: - states = get_filtered_states(model_spec=model_spec, data=data, params=params)[ - "anchored_states" - ]["states"] - elif not isinstance(states, pd.DataFrame): - raise ValueError("3d plots are only supported if states is a DataFrame") + if not isinstance(filtered_states, pd.DataFrame): + raise TypeError("3d plots are only supported if filtered_states is a DataFrame") + states = filtered_states processed_model = process_model(model_spec) factors = _get_factors( model=processed_model, @@ -587,7 +581,7 @@ def _process_distplot_kwargs( show_rug: bool, curve_type: str, bin_size: float, - scenarios: NDArray[Any], + scenarios: NDArray[Any] | pd.api.extensions.ExtensionArray, colorscale: str, distplot_kwargs: dict[str, Any] | None, ) -> dict[str, Any]: @@ -610,9 +604,7 @@ def _calculate_kde_for_3d( data: pd.DataFrame, factors: tuple[str, str], n_points: int, -) -> tuple[ - NDArray[np.floating[Any]], NDArray[np.floating[Any]], NDArray[np.floating[Any]] -]: +) -> tuple[NDArray[np.float64], NDArray[np.float64], NDArray[np.float64]]: """Create grid mesh and calculate Gaussian kernel over the grid.""" x = data[factors[0]] y = data[factors[1]] diff --git a/src/skillmodels/visualize_transition_equations.py b/src/skillmodels/common/visualize_transition_equations.py similarity index 91% rename from src/skillmodels/visualize_transition_equations.py rename to src/skillmodels/common/visualize_transition_equations.py index e74e51b0..6095d002 100644 --- a/src/skillmodels/visualize_transition_equations.py +++ b/src/skillmodels/common/visualize_transition_equations.py @@ -8,22 +8,24 @@ import jax.numpy as jnp import numpy as np import pandas as pd +from beartype import beartype from jax import Array from plotly import express as px from plotly import graph_objects as go from plotly.subplots import make_subplots -from skillmodels.filtered_states import get_filtered_states -from skillmodels.model_spec import ModelSpec -from skillmodels.params_index import get_params_index -from skillmodels.parse_params import create_parsing_info, parse_params -from skillmodels.process_data import process_data -from skillmodels.process_debug_data import create_state_ranges -from skillmodels.process_model import process_model -from skillmodels.types import ParsedParams, ProcessedModel -from skillmodels.utils_plotting import get_layout_kwargs, get_make_subplot_kwargs +from skillmodels._beartype_conf import DIAGNOSTICS_CONF +from skillmodels.common.model_spec import ModelSpec +from skillmodels.common.params_index import get_params_index +from skillmodels.common.parse_params import create_parsing_info, parse_params +from skillmodels.common.process_data import process_data +from skillmodels.common.process_model import process_model +from skillmodels.common.state_ranges import create_state_ranges +from skillmodels.common.types import ParsedParams, ProcessedModel +from skillmodels.common.utils_plotting import get_layout_kwargs, get_make_subplot_kwargs +@beartype(conf=DIAGNOSTICS_CONF) def combine_transition_plots( plots_dict: dict[tuple[str, str], go.Figure], column_order: list[str] | tuple[str, ...] | str | None = None, @@ -140,12 +142,15 @@ def combine_transition_plots( return fig -def get_transition_plots( # noqa: C901, PLR0912 +@beartype(conf=DIAGNOSTICS_CONF) +def get_transition_plots( model_spec: ModelSpec, params: pd.DataFrame, + *, + filtered_states: pd.DataFrame, data: pd.DataFrame | None = None, period: int | None = None, - periods: Sequence[int] | None = None, + periods: Sequence[int] | np.ndarray | None = None, state_ranges: dict[str, pd.DataFrame] | None = None, quantiles_of_other_factors: tuple[float, ...] | list[float] | float | None = ( 0.25, @@ -158,8 +163,6 @@ def get_transition_plots( # noqa: C901, PLR0912 colorscale: str | list[str] = "Magenta_r", state_range_quantile_cutoff: float | None = None, layout_kwargs: dict[str, Any] | None = None, - *, - states: pd.DataFrame | None = None, include_correction_factors: bool = False, ) -> dict[tuple[str, str], go.Figure]: """Get dictionary with individual plots of transition equations for each factor. @@ -167,8 +170,15 @@ def get_transition_plots( # noqa: C901, PLR0912 Args: model_spec: The model specification. See: :ref:`model_specs` params: Model parameters. - data: Empirical dataset used to estimate the model. Required when `states` - is not provided or when the model has observed factors. + filtered_states: Pre-computed filtered states DataFrame (with a + ``period`` column and one column per latent factor). Produce + it via the estimator you used (CHS: + ``get_individual_states(...)["anchored_states"]["states"]``; + AF: ``get_af_posterior_states(...)``; AMN: + ``get_amn_posterior_states(...)``). + data: Empirical dataset used to estimate the model. Required when + the model has observed factors (their realised values appear + in the plotted transitions). period: The start period of the transition equations that are plotted. Deprecated in favor of `periods`. If both are provided, `periods` is used. periods: List of periods to overlay on each plot. Each period gets a different @@ -196,8 +206,6 @@ def get_transition_plots( # noqa: C901, PLR0912 layout_kwargs: Dictionary of key word arguments used to update layout of plotly image object. If None, the default kwargs defined in the function will be used. - states: Pre-computed filtered states DataFrame (with a `period` - column). If provided, skip the internal `get_filtered_states` call. include_correction_factors: Whether to include correction factors in the plots. Default False. @@ -206,9 +214,13 @@ def get_transition_plots( # noqa: C901, PLR0912 for each combination of input and output factors. """ + states = filtered_states # Handle period/periods arguments if periods is not None: - periods_list = list(periods) + # Coerce to plain Python ints so downstream `list[int]`-typed helpers + # accept the values (a numpy array yields `np.int64`, which beartype + # rejects against `int`). + periods_list = [int(p) for p in periods] elif period is not None: periods_list = [period] else: @@ -239,25 +251,12 @@ def get_transition_plots( # noqa: C901, PLR0912 "(the last period has no transition).", ) - if ( - include_correction_factors - or not processed_model.endogenous_factors_info.has_endogenous_factors - ): - latent_factors = processed_model.labels.latent_factors - else: - latent_factors = [ - lf - for lf in processed_model.labels.latent_factors - if not processed_model.endogenous_factors_info.factor_info[lf].is_correction - ] + # `include_correction_factors` is a deprecated no-op: correction factors are + # no longer separate measured latent twins (the control function is a + # deterministic DAG node), so there is nothing to filter out. + _ = include_correction_factors + latent_factors = processed_model.labels.latent_factors all_factors = processed_model.labels.all_factors - if states is None: - if data is None: - msg = "Either 'data' or 'states' must be provided." - raise TypeError(msg) - states = get_filtered_states(model_spec=model_spec, data=data, params=params)[ - "anchored_states" - ]["states"] states = _normalize_states_columns( states, @@ -270,7 +269,7 @@ def get_transition_plots( # noqa: C901, PLR0912 params=params, states=states, state_ranges=state_ranges, - latent_factors=latent_factors, # ty: ignore[invalid-argument-type] + latent_factors=latent_factors, all_factors=all_factors, quantiles_of_other_factors=quantiles_of_other_factors, periods=periods_list, @@ -437,8 +436,15 @@ def _prepare_plot_data_for_factor_pair( has_endogenous_factors=has_endogenous_factors, ) + # Forward every transition-coeffs key sliced at this period, not just the + # output factor's: a correction target's grafted DAG also reads the + # reserved first-stage (`__first_stage___`) and kappa + # (`__kappa___`) keys. All keys share the same per-period axis, so + # `[aug_period]` indexes them uniformly; the DAG ignores keys it does not + # need (e.g. other factors' coefficients). transition_params = { - output_factor: parsed_params.transition[output_factor][aug_period] + key: per_period[aug_period] + for key, per_period in parsed_params.transition.items() } period_states = states_data[states_data["aug_period"] == aug_period] @@ -540,14 +546,19 @@ def _get_state_ranges( all_factors: tuple[str, ...], quantile_cutoff: float | None = None, ) -> dict[str, pd.DataFrame]: - """Create state ranges if none is given.""" - if state_ranges is None: - state_ranges = create_state_ranges( + """Complete the given state ranges with those of the other factors in the data.""" + given = state_ranges or {} + missing = [factor for factor in all_factors if factor not in given] + if not missing: + return given + return { + **given, + **create_state_ranges( filtered_states=states_data, - factors=list(all_factors), + factors=missing, quantile_cutoff=quantile_cutoff, - ) - return state_ranges + ), + } def _get_parsed_params( diff --git a/src/skillmodels/config.py b/src/skillmodels/config.py deleted file mode 100644 index cd7eb32b..00000000 --- a/src/skillmodels/config.py +++ /dev/null @@ -1,8 +0,0 @@ -"""Configuration constants and paths for skillmodels.""" - -from pathlib import Path - -TEST_DATA_DIR = Path(__file__).resolve().parent / "test_data" -REGRESSION_VAULT = ( - Path(__file__).resolve().parent.parent.parent / "tests" / "regression_vault" -) diff --git a/src/skillmodels/constraints.py b/src/skillmodels/constraints.py deleted file mode 100644 index 4285ac0e..00000000 --- a/src/skillmodels/constraints.py +++ /dev/null @@ -1,478 +0,0 @@ -"""Constraint objects for a model specification.""" - -import functools -import warnings -from collections.abc import Mapping -from dataclasses import dataclass -from typing import Any - -import numpy as np -import optimagic as om -import pandas as pd - -import skillmodels.transition_functions as t_f_module -from skillmodels.types import ( - Anchoring, - Dimensions, - EndogenousFactorsInfo, - Labels, - MeasurementType, - Normalizations, -) - - -def select_by_loc(params: pd.DataFrame, loc: Any) -> pd.DataFrame: # noqa: ANN401 - """Select parameters by location.""" - return params.loc[loc] - - -@dataclass(frozen=True) -class FixedConstraintWithValue(om.FixedConstraint): - """Fixed constraint that carries the target value and parameter location. - - `om.FixedConstraint` fixes parameters at their start values but does not carry a - target value. This wrapper adds `loc` (the parameter location in the params - DataFrame) and `value` (the value to set before optimization). - """ - - loc: pd.MultiIndex | tuple | str | None = None - """Parameter location in the params DataFrame.""" - value: float | None = None - """Value to enforce on the parameter.""" - - def __post_init__(self) -> None: - """Validate that `loc` and `value` are not None and derive `selector`.""" - if self.loc is None: - msg = "loc must not be None" - raise TypeError(msg) - if self.value is None: - msg = "value must not be None" - raise TypeError(msg) - object.__setattr__( - self, - "selector", - functools.partial(select_by_loc, loc=self.loc), - ) - - -def get_constraints( - dimensions: Dimensions, - labels: Labels, - anchoring_info: Anchoring, - update_info: pd.DataFrame, - normalizations: Mapping[str, Normalizations], - endogenous_factors_info: EndogenousFactorsInfo, -) -> list[om.constraints.Constraint]: - """Generate constraints implied by the model specification. - - Args: - dimensions: Dimensional information like n_states, n_periods, n_controls, - n_mixtures. See :ref:`dimensions`. - labels: Dict of lists with labels for the model quantities like - factors, periods, controls, stagemap and stages. See :ref:`labels` - anchoring_info: Information about anchoring. See :ref:`anchoring` - update_info: DataFrame with one row per Kalman update needed - in the likelihood function. See :ref:`update_info`. - normalizations: Nested dictionary with information on normalized factor - loadings and intercepts for each factor. See :ref:`normalizations`. - endogenous_factors_info: Information about endogenous factors in the model. - - Returns: - List of optimagic constraint objects. - - """ - constraints: list[om.constraints.Constraint] = [] - - constraints += _get_normalization_constraints( - normalizations=normalizations, factors=labels.latent_factors - ) - constraints += _get_mixture_weights_constraints(dimensions.n_mixtures) - constraints += _get_stage_constraints( - stagemap=labels.aug_stagemap, - stages=labels.aug_stages, - ) - constraints += _get_constant_factors_constraints(labels=labels) - constraints += _get_initial_states_constraints( - n_mixtures=dimensions.n_mixtures, - factors=labels.latent_factors, - ) - constraints += _get_transition_constraints(labels=labels) - constraints += _get_anchoring_constraints( - update_info=update_info, - controls=labels.controls, - anchoring_info=anchoring_info, - periods=labels.aug_periods, - ) - if endogenous_factors_info.has_endogenous_factors: - constraints += _get_constraints_for_augmented_periods( - labels=labels, - endogenous_factors_info=endogenous_factors_info, - ) - - return constraints - - -def add_bounds(params: pd.DataFrame, bounds_distance: float) -> pd.DataFrame: - """Add bounds for standard deviations to params. - - Lower and upper bounds are set to (minus) infinity; lower bounds for standard - deviation-like parameters are set to *bounds_distance*. Note that the latter will be - overridden for parameters where fixed constraints are imposed. - - Args: - params: see :ref:`params`. - bounds_distance: set standard deviation-like to this amount. - - Returns: - Modified copy of params - - """ - df = params.copy() - with warnings.catch_warnings(): - warnings.filterwarnings( - "ignore", - message="indexing past lexsort depth may impact performance.", - ) - if "lower_bound" not in df.columns: - df["lower_bound"] = -np.inf - if "upper_bound" not in df.columns: - df["upper_bound"] = np.inf - - df.loc["meas_sds", "lower_bound"] = bounds_distance - df.loc["shock_sds", "lower_bound"] = bounds_distance - - cholcov_index = df.query("category == 'initial_cholcovs'").index.tolist() - ind_tups = [tup for tup in cholcov_index if _is_diagonal_entry(tup)] - df.loc[ind_tups, "lower_bound"] = bounds_distance - - return df - - -def _is_diagonal_entry(ind_tup: tuple[str, ...]) -> bool: - name2 = ind_tup[-1] - middle_pos = int(len(name2) // 2) - if ( - len(name2) % 2 == 0 - or name2[middle_pos] != "-" - or name2[:middle_pos] != name2[middle_pos + 1 :] - ): - is_diag = False - else: - is_diag = True - return is_diag - - -def _get_normalization_constraints( - normalizations: Mapping[str, Normalizations], - factors: tuple[str, ...], -) -> list[om.constraints.Constraint]: - """List of constraints to enforce normalizations. - - Args: - normalizations: Mapping from factor name to Normalizations instance. - factors: Tuple of factor names to process. - - Returns: - List of constraint objects. - - """ - periods = range(len(normalizations[factors[0]].loadings)) - - constraints: list[om.constraints.Constraint] = [] - for factor in factors: - for period in periods: - for meas, normval in normalizations[factor].loadings[period].items(): - loc = ("loadings", period, meas, factor) - constraints.append(FixedConstraintWithValue(loc=loc, value=normval)) - for meas, normval in normalizations[factor].intercepts[period].items(): - loc = ("controls", period, meas, "constant") - constraints.append(FixedConstraintWithValue(loc=loc, value=normval)) - - return constraints - - -def _get_mixture_weights_constraints( - n_mixtures: int, -) -> list[om.constraints.Constraint]: - """Constrain mixture weights to be between 0 and 1 and sum to 1.""" - loc = "mixture_weights" - if n_mixtures == 1: - return [ - FixedConstraintWithValue(loc=loc, value=1.0), - ] - return [ - om.ProbabilityConstraint(selector=functools.partial(select_by_loc, loc=loc)) - ] - - -def _get_stage_constraints( - stagemap: tuple[int, ...], - stages: tuple[int, ...], -) -> list[om.constraints.Constraint]: - """Equality constraints for transition and shock parameters within stages. - - Args: - stagemap: map aug_periods to aug_stages - stages: aug_stages - - Returns: - List of constraint objects. - - """ - constraints: list[om.constraints.Constraint] = [] - - stages_to_periods: dict[int, list[int]] = {stage: [] for stage in stages} - for aug_period, stage in enumerate(stagemap): - stages_to_periods[stage].append(aug_period) - - for stage_periods in stages_to_periods.values(): - if len(stage_periods) > 1: - loc_trans = [("transition", p) for p in stage_periods] - loc_q = [("shock_sds", p) for p in stage_periods] - constraints.append( - om.PairwiseEqualityConstraint( - selectors=[ - functools.partial(select_by_loc, loc=loc) for loc in loc_trans - ], - ), - ) - constraints.append( - om.PairwiseEqualityConstraint( - selectors=[ - functools.partial(select_by_loc, loc=loc) for loc in loc_q - ], - ), - ) - - return constraints - - -def _get_constant_factors_constraints( - labels: Labels, -) -> list[om.constraints.Constraint]: - """Fix shock variances of constant factors to zero. - - Args: - labels: Dict of lists with labels for the model quantities like - factors, periods, controls, stagemap and stages. See :ref:`labels` - - Returns: - List of constraint objects. - - """ - constraints: list[om.constraints.Constraint] = [] - for f, factor in enumerate(labels.latent_factors): - if labels.transition_names[f] == "constant": - for aug_period in labels.aug_periods[:-1]: - loc = ("shock_sds", aug_period, factor, "-") - constraints.append( - FixedConstraintWithValue(loc=loc, value=0.0), - ) - return constraints - - -def _get_initial_states_constraints( - n_mixtures: int, - factors: tuple[str, ...], -) -> list[om.constraints.Constraint]: - """Enforce that the x values of the first factor are increasing. - - Otherwise the model would only be identified up to the order of the start factors. - - Args: - n_mixtures: number of elements in the mixture of normal of the factors. - factors: the latent factors of the model - - Returns: - List of constraint objects. - - """ - if n_mixtures > 1: - locs = [ - ("initial_states", 0, f"mixture_{emf}", factors[0]) - for emf in range(n_mixtures) - ] - return [ - om.IncreasingConstraint(selector=functools.partial(select_by_loc, loc=locs)) - ] - return [] - - -def _get_transition_constraints( - labels: Labels, -) -> list[om.constraints.Constraint]: - """Collect possible constraints on transition parameters. - - Args: - labels: Dict of lists with labels for the model quantities like - factors, periods, controls, stagemap and stages. See :ref:`labels` - - Returns: - List of constraint objects. - - """ - constraints: list[om.constraints.Constraint] = [] - for f, factor in enumerate(labels.latent_factors): - tname = labels.transition_names[f] - for aug_period in labels.aug_periods[:-1]: - funcname = f"constraints_{tname}" - if func := getattr(t_f_module, funcname, False): - constraints.append( - func( # ty: ignore[call-non-callable] - factor=factor, - factors=labels.all_factors, - aug_period=aug_period, - ) - ) - return constraints - - -def _get_anchoring_constraints( # noqa: C901 - update_info: pd.DataFrame, - controls: tuple[str, ...], - anchoring_info: Anchoring, - periods: tuple[int, ...], -) -> list[om.constraints.Constraint]: - """Constraints on anchoring parameters. - - Args: - update_info: DataFrame with one row per Kalman update needed - in the likelihood function. See :ref:`update_info`. - controls: List of control variables - anchoring_info: Information about anchoring. See :ref:`anchoring` - periods: Period of the model - - Returns: - List of constraint objects. - - """ - anchoring_updates = update_info[update_info["purpose"] == "anchoring"].index - - constraints: list[om.constraints.Constraint] = [] - if not anchoring_info.free_constant: - locs = [] - for period, meas in anchoring_updates: - locs.append(("controls", period, meas, "constant")) - if locs: - loc = tuple(locs) - constraints.append( - FixedConstraintWithValue(loc=loc, value=0), - ) - - if not anchoring_info.free_controls: - ind_tups = [] - for period, meas in anchoring_updates: - for cont in [c for c in controls if c != "constant"]: - ind_tups.append(("controls", period, meas, cont)) - if ind_tups: - loc = tuple(ind_tups) - constraints.append( - FixedConstraintWithValue(loc=loc, value=0), - ) - - if not anchoring_info.free_loadings: - ind_tups = [] - for period in periods: - for factor in anchoring_info.factors: - outcome = anchoring_info.outcomes[factor] - meas = f"{outcome}_{factor}" - ind_tups.append(("loadings", period, meas, factor)) - - if ind_tups: - loc = tuple(ind_tups) - constraints.append( - FixedConstraintWithValue(loc=loc, value=1), - ) - - return constraints - - -def _get_constraints_for_augmented_periods( - labels: Labels, - endogenous_factors_info: EndogenousFactorsInfo, -) -> list[om.constraints.Constraint]: - """Constraints for augmented periods. - - - Carry forward states from uneven periods to even periods - - Carry forward endogenous factors even periods to uneven periods - - Set shock_sds to 0 when carrying anything forward - - Both depend on the transition function. - - Args: - labels: Dict of lists with labels for the model quantities like - factors, periods, controls, stagemap and stages. See :ref:`labels` - endogenous_factors_info: Information about endogenous factors and their - relationship to augmented periods. - - Returns: - List of constraint objects. - - """ - constraints: list[om.constraints.Constraint] = [] - for f, factor in enumerate(labels.latent_factors): - tname = labels.transition_names[f] - if tname == "constant": - continue - # We are restricting transitions and shocks, not measurements. So this might - # look counterintuitive... - aug_period_meas_type_to_constrain = ( - MeasurementType.STATES - if endogenous_factors_info.factor_info[factor].is_state - else MeasurementType.ENDOGENOUS_FACTORS - ) - aug_period_meas_types = ( - endogenous_factors_info.aug_periods_to_aug_period_meas_types - ) - aug_periods_to_constrain = [ - k - for k, v in aug_period_meas_types.items() - if v == aug_period_meas_type_to_constrain - ] - for aug_period in aug_periods_to_constrain: - if func := getattr(t_f_module, f"identity_constraints_{tname}", False): - constraints += func( # ty: ignore[call-non-callable] - factor=factor, - aug_period=aug_period, - all_factors=labels.all_factors, - ) - for aug_period in aug_periods_to_constrain[:-1]: - loc = ("shock_sds", aug_period, factor, "-") - constraints.append( - FixedConstraintWithValue( - loc=loc, - value=endogenous_factors_info.bounds_distance, - ) - ) - - return constraints - - -def enforce_fixed_constraints( - params_template: pd.DataFrame, - constraints: list[om.constraints.Constraint], -) -> pd.DataFrame: - """Enforce fixed constraints on params_template. - - For fixed constraints, we also set the lower and upper bounds to the fixed value. - This means that any robust bounds will be overridden for fixed parameters. - - Args: - params_template: see :ref:`params_df`. - constraints: list of optimagic constraint objects. - - Returns: - pd.DataFrame: modified copy of params_template - """ - params = params_template.copy() - with warnings.catch_warnings(): - warnings.filterwarnings( - "ignore", - message="indexing past lexsort depth may impact performance.", - ) - for constraint in constraints: - if isinstance(constraint, FixedConstraintWithValue): - params.loc[constraint.loc, "value"] = constraint.value - - # Setting via loc may expand the index, so reduce to the original index - return params.loc[params_template.index].astype(float) diff --git a/src/skillmodels/exceptions.py b/src/skillmodels/exceptions.py new file mode 100644 index 00000000..551c3329 --- /dev/null +++ b/src/skillmodels/exceptions.py @@ -0,0 +1,66 @@ +"""Project-specific exception types raised by skillmodels' user-facing API. + +The beartype decorators applied at the public entry points +(`skillmodels._beartype_conf`) route parameter-type violations through +one of the classes defined here, so callers can write narrowly-scoped +`except` clauses against a stable skillmodels-specific hierarchy +instead of catching the framework-supplied `BeartypeCallHintParamViolation`. + +All classes inherit from `TypeError` so existing `except TypeError` +handlers continue to fire; the subclasses are additive. +""" + + +class SkillmodelsInputError(TypeError): + """Base class for all skillmodels parameter-validation errors.""" + + +class ModelSpecInitializationError(SkillmodelsInputError): + """Bad argument to a model-spec dataclass. + + Raised on construction of `ModelSpec`, `FactorSpec`, + `AnchoringSpec`, or `Normalizations`. + """ + + +class OptionsInitializationError(SkillmodelsInputError): + """Bad argument to an estimation-options dataclass. + + Raised on construction of `CHSEstimationOptions`, + `AFEstimationOptions`, or `AMNEstimationOptions`. + """ + + +class EstimationCallError(SkillmodelsInputError): + """Bad argument to an estimation entry point. + + Raised by `get_maximization_inputs`, `get_individual_states`, + `estimate_af`, `estimate_amn`, `get_af_posterior_states`, or + `get_amn_posterior_states` when arguments don't match the + declared types. + """ + + +class InferenceCallError(SkillmodelsInputError): + """Bad argument to a standard-error / bootstrap helper. + + Raised by `compute_af_standard_errors` and + `compute_amn_standard_errors`. + """ + + +class SimulationCallError(SkillmodelsInputError): + """Bad argument to a simulation helper. + + Raised by `simulate_dataset` and `simulate_policy_effect`. + """ + + +class DiagnosticsCallError(SkillmodelsInputError): + """Bad argument to a diagnostics / visualisation helper. + + Raised by `decompose_measurement_variance`, + `summarize_measurement_reliability`, `plot_residual_boxplots`, + `plot_likelihood_contributions`, `create_state_ranges`, and the + factor-distribution / transition-equation plotting helpers. + """ diff --git a/src/skillmodels/maximization_inputs.py b/src/skillmodels/maximization_inputs.py deleted file mode 100644 index a01c55cd..00000000 --- a/src/skillmodels/maximization_inputs.py +++ /dev/null @@ -1,295 +0,0 @@ -"""Functions to create inputs for optimization of the log-likelihood.""" - -import functools -from collections.abc import Callable -from typing import Any - -import jax -import jax.numpy as jnp -import numpy as np -import pandas as pd -from jax import Array -from numpy.typing import NDArray - -import skillmodels.likelihood_function as lf -import skillmodels.likelihood_function_debug as lfd -from skillmodels.constraints import ( - add_bounds, - enforce_fixed_constraints, - get_constraints, -) -from skillmodels.kalman_filters import ( - calculate_sigma_scaling_factor_and_weights, - is_all_linear, - kalman_predict, - linear_kalman_predict, -) -from skillmodels.model_spec import ModelSpec -from skillmodels.params_index import get_params_index -from skillmodels.parse_params import create_parsing_info -from skillmodels.process_data import process_data -from skillmodels.process_debug_data import process_debug_data -from skillmodels.process_model import process_model -from skillmodels.types import ParsingInfo, ProcessedModel - -jax.config.update("jax_enable_x64", True) # noqa: FBT003 - - -def get_maximization_inputs( - model_spec: ModelSpec, - data: pd.DataFrame, - split_dataset: int = 1, -) -> dict[str, Any]: - """Create inputs for optimagic's maximize function. - - Args: - model_spec: The model specification. See: :ref:`model_specs` - data: Dataset in long format. - split_dataset: Controls into how many slices to split the dataset - during the gradient computation. - - Returns a dictionary with keys: - loglike: A jax jitted function that takes an optimagic-style - params dataframe as only input and returns a dict with entries: - - "value": The scalar log likelihood - - "contributions": An array with the log likelihood per observation - debug_loglike: Similar to loglike, with the following differences: - - It is not jitted and thus faster on the first call and debuggable - - It will add intermediate results as additional entries in the returned - dictionary. Those can be used for debugging and plotting. - gradient: The gradient of the scalar log likelihood - function with respect to the parameters. - loglike_and_gradient: Combination of loglike and - loglike_gradient that is faster than calling the two functions separately. - constraints: List of optimagic constraints that are implied by the - model specification. - params_template: Parameter DataFrame with correct index and - bounds. The value column is empty except for the fixed constraints, which - are set including the bounds. - data_aug: DataFrame with augmented data. If model contains - endogenous factors, we double up the number of periods in order to add - - """ - processed_model = process_model(model_spec) - p_index = get_params_index( - update_info=processed_model.update_info, - labels=processed_model.labels, - dimensions=processed_model.dimensions, - transition_info=processed_model.transition_info, - endogenous_factors_info=processed_model.endogenous_factors_info, - ) - - parsing_info = create_parsing_info( - params_index=p_index, - update_info=processed_model.update_info, - labels=processed_model.labels, - anchoring=processed_model.anchoring, - has_endogenous_factors=processed_model.endogenous_factors_info.has_endogenous_factors, - ) - processed_data = process_data( - df=data, - has_endogenous_factors=processed_model.endogenous_factors_info.has_endogenous_factors, - labels=processed_model.labels, - update_info=processed_model.update_info, - anchoring_info=processed_model.anchoring, - purpose="estimation", - ) - - sigma_scaling_factor, sigma_weights = calculate_sigma_scaling_factor_and_weights( - n_states=processed_model.dimensions.n_latent_factors, - kappa=processed_model.estimation_options.sigma_points_scale, - ) - - partialed_get_jnp_params_vec = functools.partial( - _get_jnp_params_vec, - target_index=p_index, - ) - - partialed_loglikes = {} - for n, fun in { - "ll": lf.log_likelihood, - "llo": lf.log_likelihood_obs, - "debug_ll": lfd.log_likelihood, - }.items(): - partialed_loglikes[n] = _partial_some_log_likelihood( - fun=fun, - parsing_info=parsing_info, - measurements=processed_data["measurements"], - controls=processed_data["controls"], - observed_factors=processed_data["observed_factors"], - model=processed_model, - sigma_weights=sigma_weights, - sigma_scaling_factor=sigma_scaling_factor, - ) - - _jitted_loglike = jax.jit(partialed_loglikes["ll"]) - _jitted_loglikeobs = jax.jit(partialed_loglikes["llo"]) - _gradient = jax.jit(jax.grad(partialed_loglikes["ll"])) - - def loglike(params: pd.DataFrame) -> float: - params_vec = partialed_get_jnp_params_vec(params) - return float(_jitted_loglike(params_vec)) - - def loglikeobs(params: pd.DataFrame) -> NDArray[np.floating]: - params_vec = partialed_get_jnp_params_vec(params) - return _to_numpy(_jitted_loglikeobs(params_vec)) - - def loglike_and_gradient( - params: pd.DataFrame, - ) -> tuple[float, NDArray[np.floating]]: - params_vec = partialed_get_jnp_params_vec(params) - crit = float(_jitted_loglike(params_vec)) - n_obs = processed_data["measurements"].shape[1] - _grad = jnp.zeros_like(params_vec) - start = 0 - stop = int(n_obs / split_dataset) - step = int(n_obs / split_dataset) - for i in range(split_dataset): - stop = n_obs if i == split_dataset - 1 else stop - measurements_slice = processed_data["measurements"][:, start:stop] - controls_slice = processed_data["controls"][:, start:stop, :] - observed_factors_slice = processed_data["observed_factors"][ - :, start:stop, : - ] - _grad += _gradient( - params_vec, - measurements=measurements_slice, - controls=controls_slice, - observed_factors=observed_factors_slice, - ) - start += step - stop += step - grad = _to_numpy(_grad) - return crit, grad - - def debug_loglike(params: pd.DataFrame) -> dict[str, Any]: - params_vec = partialed_get_jnp_params_vec(params) - jax_output = partialed_loglikes["debug_ll"](params_vec) - tmp = _to_numpy(jax_output) - tmp["value"] = float(tmp["value"]) - return process_debug_data(debug_data=tmp, model=processed_model) - - constraints = get_constraints( - dimensions=processed_model.dimensions, - labels=processed_model.labels, - anchoring_info=processed_model.anchoring, - update_info=processed_model.update_info, - normalizations=processed_model.normalizations, - endogenous_factors_info=processed_model.endogenous_factors_info, - ) - - params_template = pd.DataFrame(columns=["value"], index=p_index) - params_template = add_bounds( - params=params_template, - bounds_distance=processed_model.estimation_options.bounds_distance, - ) - params_template = enforce_fixed_constraints( - params_template=params_template, - constraints=constraints, - ) - if not params_template.index.equals(p_index): - raise ValueError("params_template index is not equal to p_index") - return { - "loglike": loglike, - "loglikeobs": loglikeobs, - "debug_loglike": debug_loglike, - "loglike_and_gradient": loglike_and_gradient, - "constraints": constraints, - "params_template": params_template, - } - - -def _partial_some_log_likelihood( - fun: Callable, - parsing_info: ParsingInfo, - measurements: Array, - controls: Array, - observed_factors: Array, - model: ProcessedModel, - sigma_weights: Array, - sigma_scaling_factor: Array, -) -> Callable: - update_info = model.update_info - is_measurement_iteration = (update_info["purpose"] == "measurement").to_numpy() - _aug_periods = pd.Series( - update_info.index.get_level_values("aug_period").to_numpy() - ) - is_predict_iteration = ((_aug_periods - _aug_periods.shift(-1)) == -1).to_numpy() - # iteration_to_period is used as an indexer to loop over arrays of different lengths - # in a jax.lax.scan. It needs to work for arrays of length n_aug_periods and not - # raise IndexErrors on tracer arrays of length n_aug_periods - 1 (i.e. - # n_transitions). To achieve that, we replace the last aug_period by -1. If there - # are endogenous factors, the last aug_period is found at index -2 (there should not - # be measurements for endogenous factors in the "second half" of the last period). - last_aug_period = ( - model.labels.aug_periods[-2] - if parsing_info.has_endogenous_factors - else model.labels.aug_periods[-1] - ) - iteration_to_period = _aug_periods.replace(last_aug_period, -1).to_numpy() - if max(iteration_to_period) != last_aug_period - 1: - raise ValueError("Unexpected iteration_to_period configuration") - - if is_all_linear(model.transition_info.function_names): - constant_factor_indices = frozenset( - i - for i, f in enumerate(model.labels.latent_factors) - if model.transition_info.function_names[f] == "constant" - ) - predict_func = functools.partial( - linear_kalman_predict, - model.transition_info.func, - latent_factors=model.labels.latent_factors, - constant_factor_indices=constant_factor_indices, - n_all_factors=model.dimensions.n_all_factors, - ) - else: - predict_func = functools.partial(kalman_predict, model.transition_info.func) - - return functools.partial( - fun, - parsing_info=parsing_info, - measurements=measurements, - controls=controls, - predict_func=predict_func, - sigma_scaling_factor=sigma_scaling_factor, - sigma_weights=sigma_weights, - dimensions=model.dimensions, - labels=model.labels, - estimation_options=model.estimation_options, - is_measurement_iteration=is_measurement_iteration, - is_predict_iteration=is_predict_iteration, - iteration_to_period=iteration_to_period, - observed_factors=observed_factors, - ) - - -def _to_numpy(obj: Any) -> Any: # noqa: ANN401 - if isinstance(obj, dict): - res = {} - for key, value in obj.items(): - if np.isscalar(value): - res[key] = value - else: - res[key] = np.array(value) - - elif np.isscalar(obj): - res = obj - else: - res = np.array(obj) - - return res - - -def _get_jnp_params_vec(params: pd.DataFrame, target_index: pd.MultiIndex) -> Array: - if set(params.index) != set(target_index): - additional_entries = params.index.difference(target_index).tolist() - missing_entries = target_index.difference(params.index).tolist() - msg = "Invalid params DataFrame. " - if additional_entries: - msg += f"Your params have additional entries: {additional_entries}. " - if missing_entries: - msg += f"Your params have missing entries: {missing_entries}. " - raise ValueError(msg) - - return jnp.array(params.reindex(target_index)["value"].to_numpy()) diff --git a/src/skillmodels/model_spec.py b/src/skillmodels/model_spec.py deleted file mode 100644 index 9959c2cd..00000000 --- a/src/skillmodels/model_spec.py +++ /dev/null @@ -1,295 +0,0 @@ -"""Strongly-typed model specification dataclasses. - -This module provides frozen dataclasses for defining model specifications -in a type-safe, immutable manner. All collections use immutable types -(tuples, MappingProxyType) to ensure the specification cannot be accidentally -modified. -""" - -from collections.abc import Callable, Mapping -from dataclasses import dataclass, field, replace -from types import MappingProxyType -from typing import Any, Self - -from skillmodels.types import ( - EstimationOptions, - Normalizations, - ensure_containers_are_immutable, -) - - -@dataclass(frozen=True) -class FactorSpec: - """Specification for a single latent factor.""" - - measurements: tuple[tuple[str, ...], ...] - """Per-period measurement variables. Each element is a tuple of variable names.""" - normalizations: Normalizations | None = None - """Identification normalizations for this factor.""" - is_endogenous: bool = False - """Whether this factor is endogenous.""" - is_correction: bool = False - """Whether this factor is a correction factor.""" - transition_function: str | Callable | None = None - """Transition function name (e.g. `"linear"`, `"log_ces"`) or a callable.""" - - def with_transition_function(self, func: str | Callable) -> Self: - """Return a new FactorSpec with the given transition function.""" - return replace(self, transition_function=func) - - def with_normalizations(self, normalizations: Normalizations) -> Self: - """Return a new FactorSpec with the given normalizations.""" - return replace(self, normalizations=normalizations) - - -@dataclass(frozen=True) -class AnchoringSpec: - """Specification for anchoring latent factors to outcomes.""" - - outcomes: Mapping[str, str] = field(default_factory=dict) - """Mapping from factor names to outcome variable names.""" - free_controls: bool = False - """Whether control coefficients are free in anchoring equations.""" - free_constant: bool = False - """Whether the constant is free in anchoring equations.""" - free_loadings: bool = False - """Whether loadings are free in anchoring equations.""" - ignore_constant_when_anchoring: bool = False - """Whether to ignore constant when anchoring.""" - - def __post_init__(self) -> None: # noqa: D105 - object.__setattr__( - self, "outcomes", ensure_containers_are_immutable(self.outcomes) - ) - - -@dataclass(frozen=True, init=False) -class ModelSpec: - """Complete model specification. - - All fields are immutable to prevent accidental modifications. - """ - - _factors: MappingProxyType[str, FactorSpec] - observed_factors: tuple[str, ...] = () - """Observed factor variable names.""" - controls: tuple[str, ...] = () - """Control variable names.""" - stagemap: tuple[int, ...] | None = None - """Stage mapping for transition functions.""" - anchoring: AnchoringSpec | None = None - """Anchoring specification.""" - estimation_options: EstimationOptions | None = None - """Estimation tuning parameters.""" - - def __init__( - self, - factors: Mapping[str, FactorSpec], - observed_factors: tuple[str, ...] = (), - controls: tuple[str, ...] = (), - stagemap: tuple[int, ...] | None = None, - anchoring: AnchoringSpec | None = None, - estimation_options: EstimationOptions | None = None, - ) -> None: - """Create ModelSpec, wrapping factors dict in MappingProxyType.""" - object.__setattr__(self, "_factors", ensure_containers_are_immutable(factors)) - object.__setattr__(self, "observed_factors", observed_factors) - object.__setattr__(self, "controls", controls) - object.__setattr__(self, "stagemap", stagemap) - object.__setattr__(self, "anchoring", anchoring) - object.__setattr__(self, "estimation_options", estimation_options) - - @classmethod - def from_dict(cls, d: dict[str, Any]) -> Self: - """Create a ModelSpec from a dictionary (e.g. loaded from YAML). - - Args: - d: A dictionary with keys like "factors", "observed_factors", - "controls", "stagemap", "anchoring", "estimation_options". - - Returns: - A ModelSpec instance. - - """ - factors = {} - for name, spec in d["factors"].items(): - normalizations = None - if "normalizations" in spec: - nd = spec["normalizations"] - if "intercepts" not in nd: - n_periods = len(nd.get("loadings", [])) - nd["intercepts"] = [{} for _ in range(n_periods)] - normalizations = Normalizations( - loadings=tuple(nd["loadings"]), - intercepts=tuple(nd["intercepts"]), - ) - factors[name] = FactorSpec( - measurements=tuple(tuple(m) for m in spec["measurements"]), - normalizations=normalizations, - is_endogenous=spec.get("is_endogenous", False), - is_correction=spec.get("is_correction", False), - transition_function=spec.get("transition_function"), - ) - - anchoring = None - if "anchoring" in d: - anchoring = AnchoringSpec(**d["anchoring"]) - - estimation = None - if "estimation_options" in d: - estimation = EstimationOptions(**d["estimation_options"]) - - stagemap = d.get("stagemap") - - return cls( - factors=factors, - observed_factors=tuple(d.get("observed_factors", [])), - controls=tuple(d.get("controls", [])), - stagemap=tuple(stagemap) if stagemap is not None else None, - anchoring=anchoring, - estimation_options=estimation, - ) - - @property - def factors(self) -> MappingProxyType[str, FactorSpec]: - """Immutable mapping of factor names to specifications.""" - return self._factors - - def _replace(self, **changes: Any) -> Self: # noqa: ANN401 - """Return a new ModelSpec with the specified fields replaced.""" - return type(self)( - factors=changes.get("factors", self.factors), - observed_factors=changes.get("observed_factors", self.observed_factors), - controls=changes.get("controls", self.controls), - stagemap=changes.get("stagemap", self.stagemap), - anchoring=changes.get("anchoring", self.anchoring), - estimation_options=changes.get( - "estimation_options", self.estimation_options - ), - ) - - def with_transition_functions( - self, - transition_functions: dict[str, str | Callable], - ) -> Self: - """Return a new ModelSpec with transition functions added to factors. - - Args: - transition_functions: Mapping from factor name to transition function. - Can be strings (referencing built-in functions) or callables. - - Returns: - New ModelSpec with transition functions set on factors. - - Raises: - ValueError: If transition_functions keys don't match factor names. - - """ - if set(transition_functions.keys()) != set(self.factors.keys()): - msg = ( - f"Transition function keys {set(transition_functions.keys())} " - f"do not match factor keys {set(self.factors.keys())}" - ) - raise ValueError(msg) - - new_factors = { - name: spec.with_transition_function(transition_functions[name]) - for name, spec in self.factors.items() - } - return self._replace(factors=new_factors) - - def with_added_factor( - self, - name: str, - spec: FactorSpec, - ) -> Self: - """Return a new ModelSpec with an additional factor. - - Args: - name: Name of the new factor. - spec: Specification for the new factor. - - Returns: - New ModelSpec with the additional factor. - - """ - new_factors = dict(self.factors) - new_factors[name] = spec - return self._replace(factors=new_factors) - - def with_added_observed_factors( - self, - *names: str, - ) -> Self: - """Return a new ModelSpec with additional observed factors. - - Args: - *names: Names of additional observed factors. - - Returns: - New ModelSpec with the additional observed factors. - - """ - return self._replace( - observed_factors=self.observed_factors + names, - ) - - def with_estimation_options( - self, - estimation_options: EstimationOptions, - ) -> Self: - """Return a new ModelSpec with the given estimation options. - - Args: - estimation_options: New estimation options. - - Returns: - New ModelSpec with the updated estimation options. - - """ - return self._replace(estimation_options=estimation_options) - - def with_anchoring( - self, - anchoring: AnchoringSpec, - ) -> Self: - """Return a new ModelSpec with the given anchoring specification. - - Args: - anchoring: New anchoring specification. - - Returns: - New ModelSpec with the updated anchoring. - - """ - return self._replace(anchoring=anchoring) - - def with_controls( - self, - controls: tuple[str, ...], - ) -> Self: - """Return a new ModelSpec with the given controls. - - Args: - controls: New control variable names. - - Returns: - New ModelSpec with the updated controls. - - """ - return self._replace(controls=controls) - - def with_stagemap( - self, - stagemap: tuple[int, ...], - ) -> Self: - """Return a new ModelSpec with the given stagemap. - - Args: - stagemap: New stage mapping. - - Returns: - New ModelSpec with the updated stagemap. - - """ - return self._replace(stagemap=stagemap) diff --git a/src/skillmodels/test_data/cnlsy_7_9_11.NOTICE.md b/src/skillmodels/test_data/cnlsy_7_9_11.NOTICE.md new file mode 100644 index 00000000..d21675f3 --- /dev/null +++ b/src/skillmodels/test_data/cnlsy_7_9_11.NOTICE.md @@ -0,0 +1,24 @@ +# cnlsy_7_9_11.csv + +Long-format measurements derived from the CNLSY (Children of the National +Longitudinal Survey of Youth) public-use sample, ages 7 / 9 / 11. Produced +by `matlab_ces_repro/load_cnlsy.py` from the bundled +`complete_7_9_11.xls`, which itself is the input file used in the +Attanasio & Freyberger (2025) application. + +The CSV is a tidy, period-indexed view of the same dataset: + +- `(caseid, period)` MultiIndex (period ∈ {0, 1, 2}, mapping to ages 7 / 9 / 11). +- Skill measurements (`skill_math`, `skill_recog`, `skill_comp`) standardised + within each period. +- Time-invariant cognitive (`mc_*`, 6 ASVAB sub-tests) and non-cognitive + (`mn_neg`, `mn_pos`, `mn_rotter`) blocks standardised across the whole + sample; written only in period 0, NaN elsewhere. +- Investment measurements (`inv_*`, parental involvement) standardised + within each period and present in periods 0 and 1 only. +- `log_income_observed`: log family income (already in logs in the source); + the period-2 value is held forward from period 1 to keep the CHS observed- + factor column NaN-free (period 2 isn't used by the AF transition). + +CNLSY is a U.S. Bureau of Labor Statistics public-use dataset. Redistribution +of a processed subset for documentation purposes is permitted under BLS terms. diff --git a/src/skillmodels/test_data/cnlsy_7_9_11.csv b/src/skillmodels/test_data/cnlsy_7_9_11.csv new file mode 100644 index 00000000..414fb727 --- /dev/null +++ b/src/skillmodels/test_data/cnlsy_7_9_11.csv @@ -0,0 +1,4210 @@ +caseid,period,skill_math,skill_recog,skill_comp,mc_1,mc_2,mc_3,mc_4,mc_5,mc_6,mn_neg,mn_pos,mn_rotter,inv_reads,inv_museum,inv_praised,log_income_observed +1602,0,-0.8255845489855216,-1.460901963714797,-1.3289780031076046,0.2108641118148177,0.7727681057484966,0.457405498335207,1.3969449327761334,0.6982958042700221,0.7596854921540671,0.36043714080320877,1.0113786285352542,-0.13173296267509654,-0.27221658086938805,-0.2910724881500066,-0.9106055385131593,2.4150469303131104 +1602,1,0.048094632541727786,0.5285571507320932,0.6567159465227176,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.5613893220144716,2.4160003662109375 +1602,2,-0.4729569847285068,-0.10626094735465771,0.008082907292302316,,,,,,,,,,,,,2.4160003662109375 +2502,0,-1.164432463825118,0.6101443027976923,0.893230199930166,0.6533003264850905,0.39561354207787724,0.17294631652479245,1.3057140180675306,0.9393511068205153,0.9242937926161762,-0.23730908679360116,-0.9544903321671111,-0.5517814777504622,0.49778314283978853,-0.2910724881500066,-0.9106055385131593,2.995732307434082 +2502,1,0.33645689517439314,2.577573332492533,0.14609054585137357,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.310551991190808,2.995732307434082 +2502,2,-0.07938720443544948,0.6722461499747677,-0.981944935899015,,,,,,,,,,,,,2.995732307434082 +5001,0,0.19095919553326762,0.4950861768803317,1.016686211210042,1.2432152793787876,1.0242044815289095,1.3107830437664505,1.4881758474847362,0.9996149324581385,0.9242937926161762,-1.432801541987221,0.22503104425430823,-0.5517814777504622,-1.0422163045785646,0.806708965813594,0.42764121833107505,2.3797354698181152 +5001,1,-0.04802612166916067,0.7067324708851749,0.8609661067912552,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.5613893220144716,2.0266363620758057 +5001,2,0.11739768571107917,0.5165447305088826,-0.17192215510611902,,,,,,,,,,,,,2.0266363620758057 +6101,0,0.4168578054263319,0.14991179912825014,-0.4647859241484716,1.833130232272485,1.401359045199529,1.3107830437664505,1.3969449327761334,1.4214617119215014,2.07655189585094,-0.835055314390411,-0.16814274788616518,0.7083640674756347,0.49778314283978853,-0.2910724881500066,0.8737234706124865,2.771721839904785 +6101,1,1.77826820833772,0.2612941705024705,0.8609661067912552,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.059714660367144415,2.974954605102539 +6101,2,0.41257502093087217,-0.41766378628642786,0.18808796969072364,,,,,,,,,,,,,2.974954605102539 +6203,0,0.6427564153193962,0.2649699250456107,0.029038120971032973,-0.5265295793023037,0.1441771662974643,-0.1115128652856221,-0.1539806172701155,-1.2904104417715454,-0.3925726110806964,0.36043714080320877,-0.5613165400266386,-0.13173296267509654,-2.5822157519969178,-0.2910724881500066,0.20460009219036931,1.4210286140441895 +6203,1,0.7209399120179469,0.5285571507320932,0.45246578625417994,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-1.3139013144854623,1.594625473022461 +6203,2,0.11739768571107917,0.43869402077594005,0.45809556328835566,,,,,,,,,,,,,1.594625473022461 +6801,0,0.07800989058673549,1.7607255619712974,0.2759501435307853,2.1280877087193333,1.401359045199529,1.3107830437664505,1.1232521886503248,1.9035723170224874,2.07655189585094,1.5559295959968287,1.4045524206757267,0.7083640674756347,1.267782866548965,-0.2910724881500066,-0.24148216009104212,2.995732307434082 +6801,1,1.2976644372832777,0.9739954511147976,0.963091186925524,,,,,,,,,,0.9503768127628092,1.8141914255436393,1.1944719937511734,2.995732307434082 +6801,2,1.1997145815169867,1.8400067959689057,0.5480980944875663,,,,,,,,,,,,,2.995732307434082 +9701,0,0.529807110372864,-0.42537883045855246,-0.5882419354283478,0.2108641118148177,1.149922669419116,1.026323861956036,0.028481212147090252,0.15592137353141286,0.430468891229849,0.36043714080320877,-1.3476641243075844,0.28831555240026907,1.267782866548965,0.806708965813594,0.8737234706124865,2.4017746448516846 +9701,1,-1.2975959264107106,-0.6295824302629383,-0.568785015088508,,,,,,,,,,1.663413533782179,0.7456311526478686,1.1944719937511734,2.4193592071533203 +9701,2,0.7077523561506651,0.43869402077594005,0.638100625686777,,,,,,,,,,,,,2.4193592071533203 +9702,0,-0.03493941435979663,-0.8856113341279945,-0.4647859241484716,0.2108641118148177,1.149922669419116,1.026323861956036,0.028481212147090252,0.15592137353141286,0.430468891229849,0.36043714080320877,-1.3476641243075844,0.28831555240026907,1.267782866548965,0.806708965813594,0.8737234706124865,2.4193592071533203 +9702,1,-0.14414687588004912,-0.00596880972715211,-0.26240977468570165,,,,,,,,,,1.663413533782179,-0.3229291202479022,0.9436346629275099,2.4286715984344482 +9702,2,1.1997145815169867,-0.41766378628642786,-0.6219348111021723,,,,,,,,,,,,,2.4286715984344482 +9801,0,0.7557057202659283,1.0703768064671344,1.3870542450496706,1.0957365411553635,1.0242044815289095,0.7418646801456215,0.3934048709815018,0.6380319786323989,0.595077191691958,0.9581833684000187,-0.16814274788616518,-1.3918785079011935,0.49778314283978853,-0.2910724881500066,-0.6875644123724536,0.36564069986343384 +9801,1,1.2015436830723893,1.0630831111913384,1.6779667478654055,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.5613893220144716,0.9098517298698425 +9801,2,1.298107026590251,0.20514189157711243,1.8981360624757264,,,,,,,,,,,,,0.9098517298698425 +13702,0,1.320452244998589,0.3800280509629712,1.016686211210042,1.833130232272485,0.8984862936387031,0.7418646801456215,1.3057140180675306,1.6625170144719943,1.9119435953888306,1.5559295959968287,1.0113786285352542,-0.5517814777504622,0.49778314283978853,0.806708965813594,-0.24148216009104212,2.995732307434082 +13702,1,1.2976644372832777,1.0630831111913384,0.6567159465227176,,,,,,,,,,-0.47569662927593015,1.8141914255436393,-0.059714660367144415,2.995732307434082 +13702,2,1.3964994716635155,1.450753247304193,0.5480980944875663,,,,,,,,,,,,,2.995732307434082 +13802,0,1.4334015499451211,1.875783687888658,0.6463181773704137,1.2432152793787876,0.7727681057484966,1.026323861956036,1.0320212739417218,2.265155270848227,1.7473352949267216,-0.835055314390411,1.4045524206757267,0.28831555240026907,0.49778314283978853,-0.2910724881500066,1.7658879751753094,2.158076763153076 +13802,1,1.4899059457050545,1.8648720518802064,1.371591507462599,,,,,,,,,,0.2373400917434395,-0.3229291202479022,2.699495978693155,2.092273473739624 +13802,2,0.5109674660041365,1.0614996986394805,-0.35192721750454037,,,,,,,,,,,,,2.092273473739624 +14301,0,0.6427564153193962,-0.3103207045411919,0.029038120971032973,0.6533003264850905,1.149922669419116,0.17294631652479245,0.5758667003987075,-0.26592540593194997,0.430468891229849,-0.835055314390411,0.6182048363947807,-0.13173296267509654,-1.0422163045785646,0.806708965813594,0.8737234706124865,2.489999532699585 +14301,1,1.0093021746506123,-0.2732317899567748,0.24821562598564237,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.5613893220144716,2.5049023628234863 +14301,2,1.1013221364437225,0.1272911818441699,0.2780905008899343,,,,,,,,,,,,,2.5049023628234863 +14901,0,0.3039085004797998,0.2649699250456107,-0.2178739015887193,-0.23157210285545515,-0.2329773973731551,-0.1115128652856221,-0.06274970256151263,0.2161851991690361,-0.3925726110806964,-0.835055314390411,1.0113786285352542,-0.5517814777504622,0.49778314283978853,0.806708965813594,-0.6875644123724536,2.6352858543395996 +14901,1,0.33645689517439314,-0.09505646980369299,-0.05815961441716403,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.310551991190808,2.729461908340454 +14901,2,0.5109674660041365,0.1272911818441699,-0.17192215510611902,,,,,,,,,,,,,2.729461908340454 +14902,0,0.6427564153193962,0.8402605546324132,0.3994061548106614,-0.23157210285545515,-0.2329773973731551,-0.1115128652856221,-0.06274970256151263,0.2161851991690361,-0.3925726110806964,-0.835055314390411,1.0113786285352542,-0.5517814777504622,0.49778314283978853,0.806708965813594,-0.24148216009104212,2.729461908340454 +14902,1,1.1054229288615007,0.7958201309617158,1.2694664273283303,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.8122266528381351,2.4286515712738037 +14902,2,0.41257502093087217,1.0614996986394805,0.368093032089145,,,,,,,,,,,,,2.4286515712738037 +15801,0,-0.37378732919939306,1.0703768064671344,1.8808782901691752,0.9482578029319392,1.401359045199529,1.026323861956036,1.1232521886503248,-0.14539775465670343,1.5827269944646125,0.9581833684000187,1.4045524206757267,0.28831555240026907,-0.27221658086938805,0.806708965813594,-0.4645232862317478,1.9572726488113403 +15801,1,-0.14414687588004912,1.0630831111913384,0.24821562598564237,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.8122266528381351,2.031648874282837 +15801,2,-0.6697418748750354,0.43869402077594005,0.008082907292302316,,,,,,,,,,,,,2.031648874282837 +16702,0,0.19095919553326762,0.2649699250456107,0.2759501435307853,-0.9689657939725767,-0.10725920948294862,1.026323861956036,0.028481212147090252,0.8188234555452687,-0.8863975124670236,0.9581833684000187,1.0113786285352542,-0.13173296267509654,1.267782866548965,0.806708965813594,3.104134732019544,1.1936686038970947 +16702,1,0.7209399120179469,0.4394694906555523,-0.6709100952227768,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.310551991190808,1.259954810142517 +16702,2,-0.4729569847285068,-0.18411165708760024,0.638100625686777,,,,,,,,,,,,,1.259954810142517 +17901,0,-0.7126352440389895,-0.3103207045411919,-0.8351539579881,0.06338537359139342,0.5213317299680837,-0.1115128652856221,0.11971212685569313,-1.9533125237854012,-0.22796431061858732,0.36043714080320877,1.4045524206757267,-0.13173296267509654,-0.27221658086938805,-1.388853942113607,-0.24148216009104212,2.1410915851593018 +17901,1,-0.14414687588004912,-0.4514071101098565,0.963091186925524,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.310551991190808,2.0792863368988037 +17901,2,-0.6697418748750354,-0.729066625218198,-0.35192721750454037,,,,,,,,,,,,,2.0792863368988037 +17902,0,-0.14788871930632877,-0.5404369563759129,-0.2178739015887193,0.06338537359139342,0.5213317299680837,-0.1115128652856221,0.11971212685569313,-1.9533125237854012,-0.22796431061858732,0.36043714080320877,1.4045524206757267,-0.13173296267509654,0.49778314283978853,-0.2910724881500066,-0.6875644123724536,2.0792863368988037 +17902,1,-0.33638838430182605,-0.18414412988023388,-0.26240977468570165,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.5613893220144716,2.31561279296875 +17902,2,-0.1777796495087138,-0.10626094735465771,0.2780905008899343,,,,,,,,,,,,,2.31561279296875 +18401,0,1.0945536351055247,1.3004930583018552,2.004334301449051,0.8007790647085149,0.5213317299680837,0.7418646801456215,0.4846357856901046,-0.5069807084824429,0.595077191691958,0.9581833684000187,-0.16814274788616518,0.28831555240026907,1.267782866548965,1.9044904197771946,1.9889291013160153,2.41306734085083 +18401,1,0.9131814204397238,0.5285571507320932,0.8609661067912552,,,,,,,,,,1.663413533782179,0.7456311526478686,1.1944719937511734,2.370971202850342 +18401,2,0.2157901307843435,0.36084331104299755,0.2780905008899343,,,,,,,,,,,,,2.370971202850342 +18801,0,-1.164432463825118,-2.266308845136321,-2.1931700820667377,-1.2639232704194252,-0.2329773973731551,0.17294631652479245,-0.9750588496475414,-0.6275083597576895,-1.3802224138533508,-0.23730908679360116,-0.5613165400266386,-1.3918785079011935,0.49778314283978853,-0.2910724881500066,-0.6875644123724536,1.2435826063156128 +18801,1,-0.8169921553562683,-1.2531960507987243,-1.2836605760283897,,,,,,,,,,0.9503768127628092,1.8141914255436393,-0.5613893220144716,1.1617645025253296 +18801,2,-0.6697418748750354,0.1272911818441699,-0.26192468630532967,,,,,,,,,,,,,1.1617645025253296 +19001,0,0.529807110372864,1.1854349323844948,1.757422278889299,0.6533003264850905,0.8984862936387031,0.7418646801456215,-0.06274970256151263,1.4214617119215014,1.4181186940025035,0.36043714080320877,1.7977262128162,0.7083640674756347,-1.0422163045785646,-0.2910724881500066,-0.9106055385131593,2.639143943786621 +19001,1,0.33645689517439314,1.7757843918036655,0.963091186925524,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.8122266528381351,2.6101396083831787 +19001,2,1.4948919167367798,2.2292603446336186,0.368093032089145,,,,,,,,,,,,,2.6101396083831787 +20001,0,1.9981480746777818,2.105899939723379,1.8808782901691752,-0.5265295793023037,-0.8615683368241874,0.7418646801456215,-0.06274970256151263,1.843308491384864,-0.3925726110806964,-2.030547769584031,-0.9544903321671111,-2.2319755380519246,-0.27221658086938805,0.806708965813594,0.8737234706124865,2.225468873977661 +20001,1,0.4325776493852816,0.5285571507320932,0.7588410266569864,,,,,,,,,,-0.47569662927593015,1.8141914255436393,-1.3139013144854623,-0.6931471824645996 +20001,2,0.2157901307843435,0.20514189157711243,0.008082907292302316,,,,,,,,,,,,,-0.6931471824645996 +21102,0,1.9981480746777818,1.3004930583018552,0.029038120971032973,1.0957365411553635,-0.10725920948294862,0.7418646801456215,0.940790359233119,0.7585596299076455,1.5827269944646125,0.9581833684000187,0.22503104425430823,-0.13173296267509654,0.49778314283978853,-0.2910724881500066,-0.24148216009104212,2.373138904571533 +21102,1,1.3937851914941661,0.9739954511147976,0.7588410266569864,,,,,,,,,,-1.9017700713146695,-0.3229291202479022,-0.059714660367144415,2.361774206161499 +21102,2,1.6916768068833083,0.8279475694406527,0.18808796969072364,,,,,,,,,,,,,2.361774206161499 +21103,0,-0.03493941435979663,-0.1952625786238314,-0.3413299128685955,1.0957365411553635,-0.10725920948294862,0.7418646801456215,0.940790359233119,0.7585596299076455,1.5827269944646125,0.9581833684000187,0.22503104425430823,-0.13173296267509654,0.49778314283978853,-1.388853942113607,-0.24148216009104212,2.361774206161499 +21103,1,0.2403361409635047,0.3503818305790114,0.7588410266569864,,,,,,,,,,-1.9017700713146695,-1.3914893931436731,0.4419600012801827,2.414478302001953 +21103,2,-0.8665267650215641,-0.18411165708760024,0.5480980944875663,,,,,,,,,,,,,2.414478302001953 +22104,0,-0.2608380242528609,-0.770553208210634,-0.4647859241484716,-0.5265295793023037,-2.4959047793968714,-2.102727137958524,-2.708446229110996,-2.4956869545240106,-1.2156141133912417,-1.432801541987221,-0.9544903321671111,-0.13173296267509654,0.49778314283978853,-0.2910724881500066,-1.3566877907945707,0.7634837031364441 +22104,1,-1.585958189043376,-1.2531960507987243,-1.079410415759852,,,,,,,,,,0.9503768127628092,1.8141914255436393,-1.3139013144854623,0.6528940796852112 +22104,2,-0.8665267650215641,-1.040469464149968,-1.251952529496647,,,,,,,,,,,,,0.6528940796852112 +22703,0,-0.03493941435979663,0.2649699250456107,-0.8351539579881,-1.1164445321960008,-1.7415956520556326,-0.9648904107168657,-0.9750588496475414,-2.073840175060648,-0.8863975124670236,-0.835055314390411,-1.3476641243075844,-0.5517814777504622,-2.5822157519969178,-1.388853942113607,0.20460009219036931,0.28899428248405457 +22703,1,-1.0092336637780452,-0.80775775041602,0.24821562598564237,,,,,,,,,,-1.9017700713146695,-0.3229291202479022,-1.0630639836617988,0.3237709701061249 +22703,2,-0.4729569847285068,-0.4955144960193704,-0.8019398735005937,,,,,,,,,,,,,0.3237709701061249 +23102,0,1.5463508548916531,0.7252024287150527,0.6463181773704137,-0.23157210285545515,0.1441771662974643,-0.1115128652856221,1.0320212739417218,0.9996149324581385,0.595077191691958,0.36043714080320877,0.22503104425430823,-0.13173296267509654,1.267782866548965,-1.388853942113607,0.20460009219036931,2.4122843742370605 +23102,1,1.1054229288615007,0.2612941705024705,0.6567159465227176,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.8122266528381351,1.9769929647445679 +23102,2,0.5109674660041365,0.43869402077594005,0.2780905008899343,,,,,,,,,,,,,1.9769929647445679 +24503,0,1.6593001598381854,0.2649699250456107,-0.7116979467082238,1.9806089704959091,0.7727681057484966,0.7418646801456215,1.4881758474847362,1.1804064093710083,1.7473352949267216,-0.835055314390411,-0.5613165400266386,-0.9718299928258278,1.267782866548965,-0.2910724881500066,-0.9106055385131593,2.177345037460327 +24503,1,1.3937851914941661,-0.2732317899567748,-0.46665993495423924,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.8122266528381351,2.024730682373047 +24503,2,1.4948919167367798,-0.028410237621715174,-0.5319322799029617,,,,,,,,,,,,,2.024730682373047 +24903,0,0.19095919553326762,0.3800280509629712,-0.7116979467082238,1.2432152793787876,-0.8615683368241874,-0.1115128652856221,1.2144831033589276,-0.08513392901908017,0.595077191691958,-0.835055314390411,-0.9544903321671111,0.7083640674756347,0.49778314283978853,-0.2910724881500066,-1.133646664653865,2.068176031112671 +24903,1,-0.04802612166916067,-0.3623194500333156,-0.26240977468570165,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-1.3139013144854623,2.093778133392334 +24903,2,1.8884616970298371,0.282992601310055,-0.08191962390690835,,,,,,,,,,,,,2.093778133392334 +25401,0,-1.27738176877165,-1.000669460045355,-0.8351539579881,2.1280877087193333,1.149922669419116,1.026323861956036,1.3969449327761334,1.4214617119215014,1.7473352949267216,1.5559295959968287,1.0113786285352542,-0.5517814777504622,-1.0422163045785646,0.806708965813594,0.8737234706124865,1.100927472114563 +25401,1,-1.2975959264107106,-0.6295824302629383,-0.8751602554913144,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.059714660367144415,0.901209831237793 +25401,2,-0.37456453965524245,-0.573365205752313,-0.08191962390690835,,,,,,,,,,,,,0.901209831237793 +25403,0,2.1110973796243138,1.4155511842192159,2.004334301449051,2.1280877087193333,1.149922669419116,1.026323861956036,1.3969449327761334,1.4214617119215014,1.7473352949267216,1.5559295959968287,1.0113786285352542,-0.5517814777504622,-1.812216028287741,-0.2910724881500066,-0.018441033950336395,1.326094627380371 +25403,1,1.5860266999159431,1.7757843918036655,0.7588410266569864,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.5613893220144716,1.8396230936050415 +25403,2,0.9045372462971938,0.7500968597077102,1.8081335312765157,,,,,,,,,,,,,1.8396230936050415 +25405,0,0.4168578054263319,1.0703768064671344,1.2635982337697944,2.1280877087193333,1.149922669419116,1.026323861956036,1.3969449327761334,1.4214617119215014,1.7473352949267216,1.5559295959968287,1.0113786285352542,-0.5517814777504622,-0.27221658086938805,-0.2910724881500066,-0.4645232862317478,1.3260313272476196 +25405,1,0.6248191578070585,0.4394694906555523,0.5545908663884488,,,,,,,,,,0.2373400917434395,-1.3914893931436731,3.7028453019878094,1.263806700706482 +25405,2,2.478816367469423,0.7500968597077102,0.7281031568859877,,,,,,,,,,,,,1.263806700706482 +25501,0,0.4168578054263319,1.7607255619712974,1.5105102563295467,1.390694017602212,-0.6101319610437744,-0.1115128652856221,1.4881758474847362,1.120142583733385,0.430468891229849,-0.835055314390411,-0.5613165400266386,1.1284125825510003,-1.0422163045785646,-0.2910724881500066,0.20460009219036931,2.2385826110839844 +25501,1,0.7209399120179469,1.1521707712678793,0.7588410266569864,,,,,,,,,,-1.9017700713146695,-0.3229291202479022,-1.0630639836617988,2.189894914627075 +25501,2,1.0029296913704582,0.5943954402418251,0.368093032089145,,,,,,,,,,,,,2.189894914627075 +25503,0,0.8686550252124604,1.5306093101365763,1.6339662676094229,1.390694017602212,-0.6101319610437744,-0.1115128652856221,1.4881758474847362,1.120142583733385,0.430468891229849,-0.835055314390411,-0.5613165400266386,1.1284125825510003,0.49778314283978853,-0.2910724881500066,-0.9106055385131593,2.2875821590423584 +25503,1,0.7209399120179469,1.5085214115740428,0.963091186925524,,,,,,,,,,-1.9017700713146695,-0.3229291202479022,-0.8122266528381351,2.4085776805877686 +25503,2,0.7077523561506651,0.8279475694406527,1.8981360624757264,,,,,,,,,,,,,2.4085776805877686 +25504,0,1.4334015499451211,2.6811905693101816,3.1154384029679365,1.390694017602212,-0.6101319610437744,-0.1115128652856221,1.4881758474847362,1.120142583733385,0.430468891229849,-0.835055314390411,-0.5613165400266386,1.1284125825510003,0.49778314283978853,-0.2910724881500066,-0.9106055385131593,2.3985893726348877 +25504,1,2.4511134878139393,1.9539597119567473,2.392842308805287,,,,,,,,,,-1.9017700713146695,-0.3229291202479022,-0.5613893220144716,2.5223758220672607 +25504,2,1.4948919167367798,1.3729025375712505,0.18808796969072364,,,,,,,,,,,,,2.5223758220672607 +25505,0,0.6427564153193962,-0.6554950822932735,-0.3413299128685955,1.390694017602212,-0.6101319610437744,-0.1115128652856221,1.4881758474847362,1.120142583733385,0.430468891229849,-0.835055314390411,-0.5613165400266386,1.1284125825510003,1.267782866548965,-0.2910724881500066,-0.4645232862317478,2.619271993637085 +25505,1,1.6821474541268315,-0.00596880972715211,1.1673413471940615,,,,,,,,,,-1.9017700713146695,-0.3229291202479022,-0.059714660367144415,2.3917901515960693 +25505,2,1.3964994716635155,0.5943954402418251,0.368093032089145,,,,,,,,,,,,,2.3917901515960693 +25802,0,0.07800989058673549,-0.42537883045855246,-0.3413299128685955,1.9806089704959091,1.2756408573093225,1.026323861956036,1.3057140180675306,1.361197886283878,0.2658605907677399,0.36043714080320877,1.0113786285352542,-0.9718299928258278,1.267782866548965,-0.2910724881500066,0.20460009219036931,1.9708583354949951 +25802,1,-0.14414687588004912,-0.09505646980369299,0.04396546571710477,,,,,,,,,,-1.1887333502953,-1.3914893931436731,0.9436346629275099,0.31627628207206726 +25802,2,-0.4729569847285068,-0.41766378628642786,-0.441929748703751,,,,,,,,,,,,,0.31627628207206726 +26201,0,1.6593001598381854,1.5306093101365763,2.4981583465685557,0.06338537359139342,0.5213317299680837,0.457405498335207,0.3021739562728989,0.9393511068205153,-0.22796431061858732,1.5559295959968287,1.4045524206757267,-2.2319755380519246,1.267782866548965,0.806708965813594,0.8737234706124865,2.3139476776123047 +26201,1,0.4325776493852816,2.0430473720332882,1.1673413471940615,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.059714660367144415,2.0420117378234863 +26201,2,1.7900692519565728,2.462812473832446,0.8181056880851983,,,,,,,,,,,,,2.0420117378234863 +26503,0,0.07800989058673549,-0.770553208210634,-0.7116979467082238,2.1280877087193333,0.8984862936387031,1.3107830437664505,0.8495594445245161,0.8188234555452687,2.07655189585094,0.9581833684000187,0.22503104425430823,1.1284125825510003,1.267782866548965,0.806708965813594,0.8737234706124865,2.673995018005371 +26503,1,0.33645689517439314,-0.3623194500333156,0.963091186925524,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.8122266528381351,2.7813186645507812 +26503,2,1.298107026590251,-0.573365205752313,1.0881132816828303,,,,,,,,,,,,,2.7813186645507812 +27501,0,0.4168578054263319,0.3800280509629712,0.3994061548106614,0.8007790647085149,0.7727681057484966,0.7418646801456215,-0.518904276104527,0.6982958042700221,0.430468891229849,1.5559295959968287,1.7977262128162,1.548461097626366,0.49778314283978853,0.806708965813594,-0.6875644123724536,2.7522709369659424 +27501,1,0.4325776493852816,-0.4514071101098565,0.6567159465227176,,,,,,,,,,0.2373400917434395,1.8141914255436393,0.19112267045651915,2.6391751766204834 +27501,2,1.1997145815169867,0.20514189157711243,0.18808796969072364,,,,,,,,,,,,,2.6391751766204834 +27502,0,1.207502940052057,1.5306093101365763,2.4981583465685557,0.8007790647085149,0.7727681057484966,0.7418646801456215,-0.518904276104527,0.6982958042700221,0.430468891229849,1.5559295959968287,1.7977262128162,1.548461097626366,-0.27221658086938805,1.9044904197771946,-0.24148216009104212,2.6391751766204834 +27502,1,0.9131814204397238,0.7067324708851749,1.0652162670597927,,,,,,,,,,-1.1887333502953,0.7456311526478686,0.19112267045651915,2.7031962871551514 +27502,2,0.5109674660041365,0.8279475694406527,1.3581208752804623,,,,,,,,,,,,,2.7031962871551514 +27801,0,0.8686550252124604,1.645667436053937,-0.09441789030884316,0.5058215882616662,-0.10725920948294862,0.7418646801456215,0.5758667003987075,1.0598787580957618,0.10125229030563083,-0.23730908679360116,1.0113786285352542,-0.5517814777504622,-1.0422163045785646,-0.2910724881500066,-1.133646664653865,1.7522656917572021 +27801,1,0.52869840359617,1.0630831111913384,0.35034070611991114,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-1.0630639836617988,1.5666850805282593 +27801,2,0.8061448012239295,0.9836489889065378,0.008082907292302316,,,,,,,,,,,,,1.5666850805282593 +28201,0,0.8686550252124604,0.4950861768803317,-0.2178739015887193,1.390694017602212,0.39561354207787724,1.026323861956036,1.3969449327761334,0.3367128504442826,1.9119435953888306,-0.23730908679360116,-0.5613165400266386,-1.8119270229765592,1.267782866548965,-0.2910724881500066,-0.6875644123724536,2.2481138706207275 +28201,1,1.0093021746506123,0.3503818305790114,0.5545908663884488,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.5613893220144716,2.2666268348693848 +28201,2,1.1013221364437225,0.20514189157711243,0.008082907292302316,,,,,,,,,,,,,2.2666268348693848 +28803,0,-1.0514831588785858,-1.000669460045355,-0.8351539579881,-0.8214870557491524,-0.8615683368241874,-0.3959720470960366,-0.1539806172701155,-0.024870103381456905,-1.2156141133912417,-0.23730908679360116,-0.16814274788616518,0.28831555240026907,-1.812216028287741,-0.2910724881500066,-0.9106055385131593,0.8890940546989441 +28803,1,0.14421538675261625,-0.18414412988023388,1.1673413471940615,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.8122266528381351,0.9996287226676941 +28803,2,-0.9649192100948284,0.5165447305088826,-0.7119373423013831,,,,,,,,,,,,,0.9996287226676941 +28804,0,-0.03493941435979663,-0.42537883045855246,-0.7116979467082238,-0.8214870557491524,-0.8615683368241874,-0.3959720470960366,-0.1539806172701155,-0.024870103381456905,-1.2156141133912417,-0.23730908679360116,-0.16814274788616518,0.28831555240026907,0.49778314283978853,-0.2910724881500066,-0.9106055385131593,0.8192956447601318 +28804,1,0.6248191578070585,-0.09505646980369299,-1.3857856561626585,,,,,,,,,,0.9503768127628092,-1.3914893931436731,-0.8122266528381351,1.0727218389511108 +28804,2,0.11739768571107917,-0.18411165708760024,-0.08191962390690835,,,,,,,,,,,,,1.0727218389511108 +28902,0,-0.8255845489855216,0.9553186805497738,0.6463181773704137,-1.4114020086428494,-0.10725920948294862,0.457405498335207,-0.1539806172701155,0.7585596299076455,-0.8863975124670236,-0.23730908679360116,1.7977262128162,0.28831555240026907,0.49778314283978853,0.806708965813594,-0.24148216009104212,0.4081231951713562 +28902,1,-0.528629892723603,0.17220651042592966,0.5545908663884488,,,,,,,,,,-1.9017700713146695,1.8141914255436393,-0.059714660367144415,0.6007058024406433 +28902,2,-0.4729569847285068,0.282992601310055,0.18808796969072364,,,,,,,,,,,,,0.6007058024406433 +33901,0,-2.7457227330765677,-1.1157275859627156,-0.9586099692679761,-0.9689657939725767,-1.4901592762752198,-0.6804312289064511,-1.4312134231905558,-1.5917295699596616,-0.7217892120049145,0.36043714080320877,0.6182048363947807,-0.9718299928258278,-1.812216028287741,1.9044904197771946,-0.24148216009104212,-0.0007813644479028881 +33901,1,-3.3161317648393682,-1.609546691104888,-2.10066121710254,,,,,,,,,,0.2373400917434395,1.8141914255436393,-0.5613893220144716,0.24786165356636047 +33901,2,-2.735983221413586,-1.8189765614793936,-2.151977841488754,,,,,,,,,,,,,0.24786165356636047 +34002,0,-1.27738176877165,0.8402605546324132,-0.4647859241484716,-0.37905084107887943,-1.3644410883850133,-0.1115128652856221,-0.2452115319787184,0.4572405017195292,-1.2156141133912417,-0.835055314390411,1.0113786285352542,-3.072072568202656,-0.27221658086938805,0.806708965813594,0.20460009219036931,0.8774716854095459 +34002,1,0.33645689517439314,0.6176448108086341,0.5545908663884488,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.310551991190808,0.3478347361087799 +34002,2,-0.5713494298017712,0.04944047211122737,0.18808796969072364,,,,,,,,,,,,,0.3478347361087799 +34402,0,1.7722494647847176,2.796248695227542,1.016686211210042,1.9806089704959091,1.401359045199529,1.026323861956036,0.028481212147090252,-0.989091313583429,1.5827269944646125,-0.835055314390411,-0.9544903321671111,0.28831555240026907,-0.27221658086938805,1.9044904197771946,-0.9106055385131593,2.386824369430542 +34402,1,2.1627512251812737,1.6866967317271246,2.1885921485367494,,,,,,,,,,-1.9017700713146695,0.7456311526478686,-0.8122266528381351,2.517941474914551 +34402,2,1.298107026590251,1.8400067959689057,2.798161374467833,,,,,,,,,,,,,2.517941474914551 +34701,0,0.7557057202659283,1.1854349323844948,1.5105102563295467,0.8007790647085149,0.7727681057484966,0.17294631652479245,1.4881758474847362,0.8790872811828919,0.595077191691958,0.36043714080320877,0.6182048363947807,0.7083640674756347,1.267782866548965,0.806708965813594,3.104134732019544,1.9784197807312012 +34701,1,1.3937851914941661,0.5285571507320932,1.7800918279996742,,,,,,,,,,0.2373400917434395,0.7456311526478686,1.1944719937511734,1.8620959520339966 +34701,2,0.31418257585760784,1.450753247304193,1.988138593674937,,,,,,,,,,,,,1.8620959520339966 +35402,0,0.529807110372864,0.14991179912825014,0.2759501435307853,1.0957365411553635,1.2756408573093225,0.457405498335207,0.7583285298159133,0.8188234555452687,0.430468891229849,0.36043714080320877,-0.5613165400266386,0.28831555240026907,0.49778314283978853,-0.2910724881500066,-0.24148216009104212,2.237837076187134 +35402,1,1.2015436830723893,0.9739954511147976,1.371591507462599,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.5613893220144716,2.341696262359619 +35402,2,-0.4729569847285068,0.04944047211122737,-0.35192721750454037,,,,,,,,,,,,,2.341696262359619 +36901,0,1.320452244998589,0.7252024287150527,0.6463181773704137,1.9806089704959091,1.149922669419116,1.026323861956036,1.2144831033589276,-0.4467168828448197,1.9119435953888306,-0.835055314390411,1.0113786285352542,-0.5517814777504622,1.267782866548965,-0.2910724881500066,-0.4645232862317478,2.231358051300049 +36901,1,2.0666304709703853,1.419433751497502,0.45246578625417994,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.8122266528381351,2.269479990005493 +36901,2,1.4948919167367798,0.282992601310055,1.8081335312765157,,,,,,,,,,,,,2.269479990005493 +37402,0,0.19095919553326762,-0.1952625786238314,-0.7116979467082238,-0.9689657939725767,-0.9872865247143939,-0.3959720470960366,-0.06274970256151263,0.5777681529947757,-0.5571809115428055,-0.835055314390411,1.0113786285352542,-1.8119270229765592,-0.27221658086938805,0.806708965813594,-0.6875644123724536,1.536313772201538 +37402,1,0.048094632541727786,-0.18414412988023388,0.14609054585137357,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.5613893220144716,2.3939902782440186 +37402,2,-0.8665267650215641,-0.6512159154852555,0.09808543849151298,,,,,,,,,,,,,2.3939902782440186 +38502,0,-1.9550775984508428,1.0703768064671344,-0.09441789030884316,-0.5265295793023037,0.5213317299680837,-0.1115128652856221,-0.8838279349389385,-0.08513392901908017,-0.3925726110806964,1.5559295959968287,0.6182048363947807,-0.13173296267509654,0.49778314283978853,-1.388853942113607,-0.4645232862317478,2.0105955600738525 +38502,1,-2.835527993784926,-0.5404947701863974,-1.590035816431196,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.8122266528381351,2.1145520210266113 +38502,2,-3.7199076721462294,-0.8847680446840831,0.09808543849151298,,,,,,,,,,,,,2.1145520210266113 +38803,0,0.07800989058673549,-0.3103207045411919,-0.2178739015887193,0.6533003264850905,1.401359045199529,0.7418646801456215,0.4846357856901046,0.035393722256166354,0.430468891229849,0.9581833684000187,-0.16814274788616518,-0.5517814777504622,-0.27221658086938805,-0.2910724881500066,-0.9106055385131593,2.0931787490844727 +38803,1,0.14421538675261625,-0.09505646980369299,0.35034070611991114,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.5613893220144716,2.1076858043670654 +38803,2,0.019005240637814846,0.6722461499747677,0.008082907292302316,,,,,,,,,,,,,2.1076858043670654 +40202,0,-1.0514831588785858,-1.000669460045355,-0.8351539579881,-0.674008317525728,-0.2329773973731551,0.17294631652479245,0.210943041564296,1.120142583733385,-0.06335601015647824,0.36043714080320877,-0.9544903321671111,-1.3918785079011935,0.49778314283978853,-0.2910724881500066,-0.018441033950336395,1.4746179580688477 +40202,1,-0.9131129095671567,-1.520459031028347,-1.1815354958941209,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.059714660367144415,1.8001633882522583 +40202,2,-0.5713494298017712,-0.9626187544170256,-0.26192468630532967,,,,,,,,,,,,,1.8001633882522583 +40203,0,-1.27738176877165,-2.266308845136321,-2.1931700820667377,-0.674008317525728,-0.2329773973731551,0.17294631652479245,0.210943041564296,1.120142583733385,-0.06335601015647824,0.36043714080320877,-0.9544903321671111,-1.3918785079011935,-1.0422163045785646,-1.388853942113607,0.8737234706124865,1.1878172159194946 +40203,1,-2.0665619600978182,-2.322247971717215,-2.3049113773710777,,,,,,,,,,0.2373400917434395,-1.3914893931436731,-0.8122266528381351,1.1838568449020386 +40203,2,-3.227945446779908,-2.286080819877049,-2.2419803726879644,,,,,,,,,,,,,1.1838568449020386 +40501,0,-1.3903310737181822,-0.770553208210634,-0.7116979467082238,-0.9689657939725767,-0.10725920948294862,-0.1115128652856221,-0.2452115319787184,0.3969766760819059,-1.0510058129291326,-0.835055314390411,-0.9544903321671111,-0.5517814777504622,1.267782866548965,-0.2910724881500066,0.20460009219036931,1.666351318359375 +40501,1,0.14421538675261625,-0.9859330705691017,-0.9772853356255832,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.5613893220144716,1.6557177305221558 +40501,2,0.2157901307843435,-0.4955144960193704,-0.26192468630532967,,,,,,,,,,,,,1.6557177305221558 +40502,0,0.529807110372864,-0.6554950822932735,-0.7116979467082238,-0.9689657939725767,-0.10725920948294862,-0.1115128652856221,-0.2452115319787184,0.3969766760819059,-1.0510058129291326,-0.835055314390411,-0.9544903321671111,-0.5517814777504622,0.49778314283978853,-0.2910724881500066,-0.6875644123724536,1.6557177305221558 +40502,1,0.048094632541727786,0.17220651042592966,0.5545908663884488,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.8122266528381351,1.9082566499710083 +40502,2,-0.5713494298017712,0.5943954402418251,0.2780905008899343,,,,,,,,,,,,,1.9082566499710083 +40503,0,1.0945536351055247,0.03485367321088963,-0.3413299128685955,-0.9689657939725767,-0.10725920948294862,-0.1115128652856221,-0.2452115319787184,0.3969766760819059,-1.0510058129291326,-0.835055314390411,-0.9544903321671111,-0.5517814777504622,0.49778314283978853,-0.2910724881500066,-0.6875644123724536,1.9082566499710083 +40503,1,0.8170606662288354,-0.18414412988023388,-1.2836605760283897,,,,,,,,,,0.2373400917434395,1.8141914255436393,-0.5613893220144716,1.9261248111724854 +40503,2,-0.27617209458197817,-0.028410237621715174,-0.441929748703751,,,,,,,,,,,,,1.9261248111724854 +41603,0,-0.03493941435979663,-0.3103207045411919,-0.5882419354283478,0.5058215882616662,1.149922669419116,0.457405498335207,1.3057140180675306,0.9393511068205153,0.9242937926161762,1.5559295959968287,1.4045524206757267,1.548461097626366,0.49778314283978853,3.002271873740795,0.8737234706124865,2.995732307434082 +41603,1,0.52869840359617,0.2612941705024705,0.04396546571710477,,,,,,,,,,0.9503768127628092,0.7456311526478686,1.1944719937511734,2.995732307434082 +41603,2,0.019005240637814846,0.7500968597077102,0.008082907292302316,,,,,,,,,,,,,2.995732307434082 +42505,0,0.4168578054263319,1.7607255619712974,0.3994061548106614,-0.674008317525728,1.0242044815289095,0.17294631652479245,1.3969449327761334,0.3367128504442826,-0.06335601015647824,0.9581833684000187,0.22503104425430823,0.7083640674756347,-1.0422163045785646,0.806708965813594,-0.24148216009104212,1.0837733745574951 +42505,1,0.9131814204397238,2.0430473720332882,1.1673413471940615,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.5613893220144716,1.3876476287841797 +42505,2,1.0029296913704582,0.9057982791735953,-0.441929748703751,,,,,,,,,,,,,1.3876476287841797 +43701,0,2.1110973796243138,0.9553186805497738,0.6463181773704137,0.5058215882616662,0.6470499178582901,1.3107830437664505,0.4846357856901046,0.3969766760819059,0.7596854921540671,-0.23730908679360116,-0.16814274788616518,0.28831555240026907,0.49778314283978853,-1.388853942113607,-0.24148216009104212,2.0849108695983887 +43701,1,1.0093021746506123,0.7958201309617158,1.2694664273283303,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.059714660367144415,2.2256689071655273 +43701,2,0.31418257585760784,0.5165447305088826,-0.26192468630532967,,,,,,,,,,,,,2.2256689071655273 +43703,0,0.19095919553326762,0.14991179912825014,-0.3413299128685955,0.5058215882616662,0.6470499178582901,1.3107830437664505,0.4846357856901046,0.3969766760819059,0.7596854921540671,-0.23730908679360116,-0.16814274788616518,0.28831555240026907,0.49778314283978853,-1.388853942113607,-0.9106055385131593,2.3035826683044434 +43703,1,0.4325776493852816,0.9739954511147976,0.8609661067912552,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,-0.8122266528381351,2.0197417736053467 +43703,2,0.31418257585760784,0.20514189157711243,0.18808796969072364,,,,,,,,,,,,,2.0197417736053467 +44402,0,0.7557057202659283,2.9113068211449025,2.2512463240088034,0.2108641118148177,1.149922669419116,1.3107830437664505,-0.06274970256151263,0.6982958042700221,0.9242937926161762,0.36043714080320877,0.22503104425430823,1.548461097626366,1.267782866548965,-1.388853942113607,1.7658879751753094,2.112476110458374 +44402,1,0.14421538675261625,1.330346091420961,1.0652162670597927,,,,,,,,,,1.663413533782179,-0.3229291202479022,0.4419600012801827,2.2019877433776855 +44402,2,0.7077523561506651,1.2172011181053655,2.1681436560733585,,,,,,,,,,,,,2.2019877433776855 +44601,0,-1.27738176877165,-0.42537883045855246,-0.5882419354283478,-0.674008317525728,0.1441771662974643,0.17294631652479245,-0.33644244668732126,-0.6877721853953127,-0.7217892120049145,1.5559295959968287,1.4045524206757267,1.9685096127017316,0.49778314283978853,0.806708965813594,-0.24148216009104212,2.1121740341186523 +44601,1,-2.4510449769413722,0.3503818305790114,0.8609661067912552,,,,,,,,,,0.9503768127628092,1.8141914255436393,0.4419600012801827,2.2314510345458984 +44601,2,-1.0633116551680928,0.20514189157711243,-0.981944935899015,,,,,,,,,,,,,2.2314510345458984 +45202,0,0.19095919553326762,-0.3103207045411919,-0.5882419354283478,-0.9689657939725767,0.6470499178582901,0.7418646801456215,-0.06274970256151263,1.1804064093710083,0.595077191691958,0.9581833684000187,-0.9544903321671111,0.28831555240026907,0.49778314283978853,-0.2910724881500066,-1.3566877907945707,2.373232126235962 +45202,1,0.7209399120179469,0.2612941705024705,0.6567159465227176,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-1.0630639836617988,2.2412171363830566 +45202,2,-0.1777796495087138,0.04944047211122737,1.3581208752804623,,,,,,,,,,,,,2.2412171363830566 +45501,0,1.6593001598381854,0.6101443027976923,2.004334301449051,1.9806089704959091,1.401359045199529,0.7418646801456215,0.028481212147090252,0.9996149324581385,2.07655189585094,0.36043714080320877,-0.16814274788616518,0.28831555240026907,1.267782866548965,-0.2910724881500066,-0.24148216009104212,2.995732307434082 +45501,1,0.14421538675261625,1.2412584313444202,1.1673413471940615,,,,,,,,,,-1.1887333502953,-0.3229291202479022,1.1944719937511734,2.995732307434082 +45501,2,1.4948919167367798,1.0614996986394805,1.5381259376788836,,,,,,,,,,,,,2.995732307434082 +45903,0,3.127641124143103,0.7252024287150527,1.016686211210042,2.1280877087193333,0.6470499178582901,0.457405498335207,0.3934048709815018,0.4572405017195292,2.07655189585094,0.9581833684000187,-0.16814274788616518,-0.13173296267509654,1.267782866548965,-0.2910724881500066,0.8737234706124865,2.5770716667175293 +45903,1,2.3549927336030505,0.4394694906555523,1.5758416677311367,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,3.7028453019878094,2.508848190307617 +45903,2,1.593284361810044,2.307111054366561,1.8981360624757264,,,,,,,,,,,,,2.508848190307617 +46201,0,2.224046684570846,2.105899939723379,2.3747023352886796,1.9806089704959091,1.149922669419116,1.3107830437664505,0.6670976151073104,0.15592137353141286,1.9119435953888306,0.36043714080320877,0.22503104425430823,-0.13173296267509654,1.267782866548965,0.806708965813594,0.8737234706124865,2.5521326065063477 +46201,1,1.0093021746506123,0.9739954511147976,0.963091186925524,,,,,,,,,,0.2373400917434395,-0.3229291202479022,1.1944719937511734,2.518949270248413 +46201,2,1.593284361810044,1.7621560862359633,1.5381259376788836,,,,,,,,,,,,,2.518949270248413 +46701,0,1.4334015499451211,2.2209580656407395,2.745070369128308,1.833130232272485,1.149922669419116,1.3107830437664505,1.4881758474847362,1.361197886283878,1.9119435953888306,-0.23730908679360116,1.7977262128162,1.1284125825510003,-0.27221658086938805,-0.2910724881500066,0.20460009219036931,1.835911750793457 +46701,1,0.33645689517439314,1.419433751497502,0.8609661067912552,,,,,,,,,,-1.1887333502953,1.8141914255436393,-0.5613893220144716,2.0420117378234863 +46701,2,1.7900692519565728,1.3729025375712505,1.6281284688780944,,,,,,,,,,,,,2.0420117378234863 +47102,0,1.0945536351055247,-0.1952625786238314,-0.09441789030884316,-0.674008317525728,0.6470499178582901,-0.1115128652856221,0.3934048709815018,0.9996149324581385,-0.8863975124670236,-0.835055314390411,-1.3476641243075844,-0.13173296267509654,-1.812216028287741,0.806708965813594,-0.9106055385131593,2.196533203125 +47102,1,-0.528629892723603,-0.18414412988023388,-0.36453485481997044,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.059714660367144415,2.302800178527832 +47102,2,1.1997145815169867,-0.028410237621715174,0.008082907292302316,,,,,,,,,,,,,2.302800178527832 +47402,0,1.207502940052057,-0.770553208210634,-0.7116979467082238,-0.5265295793023037,-0.2329773973731551,0.7418646801456215,-0.7013661055217327,-0.8685636623081825,-0.5571809115428055,-0.835055314390411,-0.5613165400266386,-0.5517814777504622,0.49778314283978853,0.806708965813594,-0.9106055385131593,1.4963642358779907 +47402,1,0.4325776493852816,-0.2732317899567748,0.45246578625417994,,,,,,,,,,-1.9017700713146695,-0.3229291202479022,-1.0630639836617988,1.5561882257461548 +47402,2,-0.1777796495087138,-0.10626094735465771,-1.251952529496647,,,,,,,,,,,,,1.5561882257461548 +47403,0,2.224046684570846,0.3800280509629712,0.15249413225090913,-0.5265295793023037,-0.2329773973731551,0.7418646801456215,-0.7013661055217327,-0.8685636623081825,-0.5571809115428055,-0.835055314390411,-0.5613165400266386,-0.5517814777504622,1.267782866548965,-0.2910724881500066,-0.4645232862317478,1.718765139579773 +47403,1,0.33645689517439314,0.2612941705024705,-0.568785015088508,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.310551991190808,1.5480700731277466 +47403,2,0.6093599110774008,0.1272911818441699,-0.17192215510611902,,,,,,,,,,,,,1.5480700731277466 +48503,0,-1.164432463825118,-0.5404369563759129,-0.7116979467082238,-0.9689657939725767,-0.7358501489339809,-0.9648904107168657,0.3934048709815018,0.09565754789378961,-0.8863975124670236,-0.835055314390411,-1.3476641243075844,-0.5517814777504622,-0.27221658086938805,-0.2910724881500066,-1.3566877907945707,1.9553838968276978 +48503,1,-0.04802612166916067,0.5285571507320932,-1.2836605760283897,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.5613893220144716,0.5030383467674255 +48503,2,-0.1777796495087138,0.5165447305088826,1.8081335312765157,,,,,,,,,,,,,0.5030383467674255 +49202,0,0.3039085004797998,0.6101443027976923,0.15249413225090913,0.6533003264850905,-0.10725920948294862,0.457405498335207,1.0320212739417218,0.5175043273571525,1.0889020930782853,1.5559295959968287,0.22503104425430823,-0.5517814777504622,0.49778314283978853,-1.388853942113607,-0.4645232862317478,1.4377877712249756 +49202,1,1.1054229288615007,1.1521707712678793,0.5545908663884488,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.8122266528381351,2.582479953765869 +49202,2,0.31418257585760784,1.995708215434791,1.178115812882041,,,,,,,,,,,,,2.582479953765869 +49401,0,-0.03493941435979663,-0.08020445270647089,-0.4647859241484716,1.5381727558256364,1.149922669419116,1.3107830437664505,0.3934048709815018,0.5175043273571525,0.7596854921540671,1.5559295959968287,1.4045524206757267,-0.13173296267509654,1.267782866548965,-0.2910724881500066,0.6506823444717807,2.2988340854644775 +49401,1,0.8170606662288354,0.17220651042592966,0.6567159465227176,,,,,,,,,,0.2373400917434395,-0.3229291202479022,3.7028453019878094,2.2634217739105225 +49401,2,-0.07938720443544948,0.6722461499747677,0.638100625686777,,,,,,,,,,,,,2.2634217739105225 +50101,0,0.07800989058673549,1.4155511842192159,1.016686211210042,0.6533003264850905,1.401359045199529,1.3107830437664505,-0.33644244668732126,-0.26592540593194997,-0.3925726110806964,-0.23730908679360116,-0.16814274788616518,0.28831555240026907,0.49778314283978853,0.806708965813594,3.104134732019544,2.6213645935058594 +50101,1,1.1054229288615007,2.132135032109829,0.963091186925524,,,,,,,,,,0.2373400917434395,0.7456311526478686,0.4419600012801827,2.7572953701019287 +50101,2,1.8884616970298371,1.0614996986394805,1.448123406479673,,,,,,,,,,,,,2.7572953701019287 +50701,0,-1.3903310737181822,-0.42537883045855246,-0.7116979467082238,0.6533003264850905,0.8984862936387031,0.7418646801456215,0.028481212147090252,0.2161851991690361,0.595077191691958,0.9581833684000187,-1.3476641243075844,-1.8119270229765592,-1.0422163045785646,0.806708965813594,-0.4645232862317478,1.652299165725708 +50701,1,0.6248191578070585,0.2612941705024705,0.24821562598564237,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.5613893220144716,1.9536874294281006 +50701,2,0.5109674660041365,1.3729025375712505,0.8181056880851983,,,,,,,,,,,,,1.9536874294281006 +50702,0,0.3039085004797998,-0.770553208210634,-0.8351539579881,0.6533003264850905,0.8984862936387031,0.7418646801456215,0.028481212147090252,0.2161851991690361,0.595077191691958,0.9581833684000187,-1.3476641243075844,-1.8119270229765592,-0.27221658086938805,-0.2910724881500066,-1.133646664653865,1.9536874294281006 +50702,1,-0.24026763009093757,-0.09505646980369299,-0.05815961441716403,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.310551991190808,1.659705638885498 +50702,2,0.019005240637814846,-0.729066625218198,-0.35192721750454037,,,,,,,,,,,,,1.659705638885498 +52801,0,1.0945536351055247,-0.1952625786238314,-0.5882419354283478,-0.37905084107887943,-0.6101319610437744,-0.3959720470960366,0.5758667003987075,0.6380319786323989,-0.3925726110806964,-0.835055314390411,1.4045524206757267,-0.13173296267509654,-0.27221658086938805,0.806708965813594,1.9889291013160153,2.214350938796997 +52801,1,1.3937851914941661,-0.18414412988023388,0.35034070611991114,,,,,,,,,,-1.1887333502953,-0.3229291202479022,1.1944719937511734,2.2274668216705322 +52801,2,0.9045372462971938,0.9836489889065378,1.448123406479673,,,,,,,,,,,,,2.2274668216705322 +52802,0,0.6427564153193962,0.4950861768803317,0.5228621660905376,-0.37905084107887943,-0.6101319610437744,-0.3959720470960366,0.5758667003987075,0.6380319786323989,-0.3925726110806964,-0.835055314390411,1.4045524206757267,-0.13173296267509654,-0.27221658086938805,-1.388853942113607,-0.24148216009104212,1.9572726488113403 +52802,1,0.2403361409635047,0.08311885034938876,0.04396546571710477,,,,,,,,,,-1.1887333502953,0.7456311526478686,-0.5613893220144716,1.4185444116592407 +52802,2,0.019005240637814846,-0.33981307655348536,0.008082907292302316,,,,,,,,,,,,,1.4185444116592407 +53301,0,0.07800989058673549,1.4155511842192159,-0.09441789030884316,0.06338537359139342,0.7727681057484966,1.3107830437664505,0.11971212685569313,0.5777681529947757,-0.8863975124670236,-0.23730908679360116,0.6182048363947807,0.7083640674756347,0.49778314283978853,-0.2910724881500066,-0.4645232862317478,2.007115602493286 +53301,1,-0.24026763009093757,-0.09505646980369299,0.24821562598564237,,,,,,,,,,1.663413533782179,-0.3229291202479022,-0.8122266528381351,2.125227212905884 +53301,2,-0.1777796495087138,1.450753247304193,-0.26192468630532967,,,,,,,,,,,,,2.125227212905884 +53601,0,-1.0514831588785858,-2.0361925933015996,-1.9462580595069854,-1.5588807468662738,-1.4901592762752198,-1.8182679561481092,-2.4347534849851873,-2.0135763494230243,-1.0510058129291326,-0.23730908679360116,-0.16814274788616518,-0.9718299928258278,-0.27221658086938805,-0.2910724881500066,-0.9106055385131593,0.3988898992538452 +53601,1,-0.24026763009093757,-0.2732317899567748,0.24821562598564237,,,,,,,,,,-0.47569662927593015,2.88275169843941,-0.8122266528381351,-0.04779261723160744 +53601,2,-0.8665267650215641,-0.9626187544170256,-1.3419550606958577,,,,,,,,,,,,,-0.04779261723160744 +54602,0,-1.27738176877165,-0.8856113341279945,-0.8351539579881,-0.5265295793023037,-0.48441377315356804,-0.1115128652856221,-0.61013519081313,-0.9288274879458058,-0.8863975124670236,-1.432801541987221,-0.5613165400266386,-2.2319755380519246,1.267782866548965,1.9044904197771946,-0.4645232862317478,2.0192418098449707 +54602,1,-0.528629892723603,-1.520459031028347,-0.6709100952227768,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.059714660367144415,2.0807852745056152 +54602,2,0.31418257585760784,-1.3518723030817383,-0.8019398735005937,,,,,,,,,,,,,2.0807852745056152 +54804,0,-0.37378732919939306,-1.1157275859627156,-0.9586099692679761,0.9482578029319392,0.8984862936387031,0.457405498335207,0.028481212147090252,0.09565754789378961,0.430468891229849,0.9581833684000187,1.0113786285352542,-1.8119270229765592,-1.0422163045785646,-0.2910724881500066,-0.9106055385131593,2.0051040649414062 +54804,1,-0.33638838430182605,-1.2531960507987243,-1.2836605760283897,,,,,,,,,,-1.1887333502953,0.7456311526478686,-0.310551991190808,2.41306734085083 +54804,2,0.019005240637814846,-1.429723012814681,-0.7119373423013831,,,,,,,,,,,,,2.41306734085083 +55002,0,0.07800989058673549,0.3800280509629712,0.3994061548106614,1.390694017602212,1.401359045199529,0.7418646801456215,0.028481212147090252,0.5175043273571525,1.0889020930782853,0.36043714080320877,1.4045524206757267,1.1284125825510003,-0.27221658086938805,0.806708965813594,1.9889291013160153,2.0313985347747803 +55002,1,1.2976644372832777,0.5285571507320932,0.45246578625417994,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.059714660367144415,2.196476936340332 +55002,2,1.1013221364437225,0.5165447305088826,0.45809556328835566,,,,,,,,,,,,,2.196476936340332 +55801,0,0.07800989058673549,0.6101443027976923,0.5228621660905376,1.0957365411553635,0.8984862936387031,0.7418646801456215,1.3057140180675306,1.3009340606462547,1.7473352949267216,0.9581833684000187,1.0113786285352542,1.548461097626366,1.267782866548965,-0.2910724881500066,-0.6875644123724536,2.27714467048645 +55801,1,0.2403361409635047,0.17220651042592966,-0.6709100952227768,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.310551991190808,2.5022635459899902 +55801,2,0.2157901307843435,1.3729025375712505,0.45809556328835566,,,,,,,,,,,,,2.5022635459899902 +58804,0,-1.164432463825118,-0.8856113341279945,-0.7116979467082238,-0.8214870557491524,-1.9930320278360456,-2.3871863197689382,-1.7049061673163644,-1.0493551392210523,-1.2156141133912417,-2.628293997180841,-1.740837916448057,-1.3918785079011935,0.49778314283978853,0.806708965813594,-0.9106055385131593,0.3094535768032074 +58804,1,-0.14414687588004912,-0.896845410492561,-1.2836605760283897,,,,,,,,,,0.9503768127628092,1.8141914255436393,-0.8122266528381351,0.33210456371307373 +58804,2,-0.1777796495087138,-1.5075737225476233,-1.1619499982974364,,,,,,,,,,,,,0.33210456371307373 +60401,0,0.6427564153193962,-0.1952625786238314,0.029038120971032973,0.06338537359139342,0.6470499178582901,0.7418646801456215,1.4881758474847362,-0.38645305720719647,0.10125229030563083,-0.835055314390411,-0.9544903321671111,1.1284125825510003,0.49778314283978853,-0.2910724881500066,0.8737234706124865,2.5554916858673096 +60401,1,2.0666304709703853,0.4394694906555523,0.35034070611991114,,,,,,,,,,-1.1887333502953,0.7456311526478686,-1.0630639836617988,2.496546983718872 +60401,2,1.4948919167367798,0.7500968597077102,-0.441929748703751,,,,,,,,,,,,,2.496546983718872 +60803,0,0.9816043301589925,1.9908418138060184,1.5105102563295467,1.0957365411553635,1.149922669419116,1.3107830437664505,1.4881758474847362,1.9035723170224874,1.9119435953888306,0.9581833684000187,1.7977262128162,0.28831555240026907,0.49778314283978853,-0.2910724881500066,0.20460009219036931,2.517941474914551 +60803,1,0.2403361409635047,1.0630831111913384,0.7588410266569864,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-1.0630639836617988,2.3758533000946045 +60803,2,-0.07938720443544948,1.606454666770078,0.368093032089145,,,,,,,,,,,,,2.3758533000946045 +61501,0,-0.7126352440389895,-0.42537883045855246,0.2759501435307853,-0.23157210285545515,-1.2387229004948068,-2.3871863197689382,-0.1539806172701155,-0.3261892315695732,-0.3925726110806964,0.36043714080320877,-0.16814274788616518,-0.9718299928258278,1.267782866548965,1.9044904197771946,-1.133646664653865,1.2599879503250122 +61501,1,-0.33638838430182605,-0.4514071101098565,-1.6921608965654649,,,,,,,,,,1.663413533782179,-0.3229291202479022,-1.0630639836617988,1.2153352499008179 +61501,2,-0.8665267650215641,-0.729066625218198,-1.1619499982974364,,,,,,,,,,,,,1.2153352499008179 +62703,0,-1.164432463825118,1.1854349323844948,-0.5882419354283478,1.6856514940490606,1.2756408573093225,1.3107830437664505,1.1232521886503248,1.120142583733385,1.0889020930782853,0.9581833684000187,-0.16814274788616518,-1.8119270229765592,0.49778314283978853,0.806708965813594,0.8737234706124865,1.3099652528762817 +62703,1,-0.8169921553562683,0.2612941705024705,-0.16028469455143282,,,,,,,,,,-1.1887333502953,0.7456311526478686,-0.5613893220144716,1.8459665775299072 +62703,2,0.11739768571107917,-0.2619623668205428,0.7281031568859877,,,,,,,,,,,,,1.8459665775299072 +64002,0,-0.8255845489855216,-0.8856113341279945,-0.7116979467082238,0.5058215882616662,0.6470499178582901,1.026323861956036,1.3969449327761334,0.6982958042700221,1.2535103935403944,-1.432801541987221,-1.3476641243075844,1.1284125825510003,0.49778314283978853,-0.2910724881500066,0.8737234706124865,2.1520228385925293 +64002,1,0.2403361409635047,-0.9859330705691017,0.5545908663884488,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,0.19112267045651915,2.278610944747925 +64002,2,-0.9649192100948284,0.9836489889065378,0.8181056880851983,,,,,,,,,,,,,2.278610944747925 +66501,0,-0.37378732919939306,-0.42537883045855246,-0.2178739015887193,-0.08409336463203088,0.5213317299680837,0.17294631652479245,0.8495594445245161,0.5175043273571525,1.0889020930782853,0.9581833684000187,1.4045524206757267,-1.3918785079011935,0.49778314283978853,-1.388853942113607,-0.24148216009104212,2.474311113357544 +66501,1,0.14421538675261625,0.3503818305790114,0.7588410266569864,,,,,,,,,,-1.1887333502953,-0.3229291202479022,0.4419600012801827,2.490705728530884 +66501,2,0.9045372462971938,0.20514189157711243,0.2780905008899343,,,,,,,,,,,,,2.490705728530884 +66502,0,2.1110973796243138,1.4155511842192159,1.5105102563295467,-0.08409336463203088,0.5213317299680837,0.17294631652479245,0.8495594445245161,0.5175043273571525,1.0889020930782853,0.9581833684000187,1.4045524206757267,-1.3918785079011935,0.49778314283978853,-0.2910724881500066,0.20460009219036931,2.490705728530884 +66502,1,1.970509716759497,0.4394694906555523,1.7800918279996742,,,,,,,,,,-1.9017700713146695,-0.3229291202479022,-0.8122266528381351,2.4473764896392822 +66502,2,1.4948919167367798,1.3729025375712505,0.908108219284409,,,,,,,,,,,,,2.4473764896392822 +67702,0,1.6593001598381854,-0.3103207045411919,0.029038120971032973,0.5058215882616662,-0.10725920948294862,0.17294631652479245,-1.0662897643561442,0.4572405017195292,0.10125229030563083,0.36043714080320877,0.22503104425430823,1.1284125825510003,0.49778314283978853,0.806708965813594,0.20460009219036931,0.9342957139015198 +67702,1,1.8743889625486083,-0.00596880972715211,0.45246578625417994,,,,,,,,,,0.9503768127628092,1.8141914255436393,-0.310551991190808,1.5242894887924194 +67702,2,0.9045372462971938,0.5165447305088826,0.008082907292302316,,,,,,,,,,,,,1.5242894887924194 +67703,0,-0.03493941435979663,1.0703768064671344,1.5105102563295467,0.5058215882616662,-0.10725920948294862,0.17294631652479245,-1.0662897643561442,0.4572405017195292,0.10125229030563083,0.36043714080320877,0.22503104425430823,1.1284125825510003,0.49778314283978853,0.806708965813594,0.20460009219036931,1.5242894887924194 +67703,1,0.8170606662288354,0.7958201309617158,0.963091186925524,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.310551991190808,1.4903464317321777 +67703,2,0.41257502093087217,0.8279475694406527,0.5480980944875663,,,,,,,,,,,,,1.4903464317321777 +67704,0,-0.5996859390924573,0.6101443027976923,0.2759501435307853,0.5058215882616662,-0.10725920948294862,0.17294631652479245,-1.0662897643561442,0.4572405017195292,0.10125229030563083,0.36043714080320877,0.22503104425430823,1.1284125825510003,0.49778314283978853,0.806708965813594,-0.24148216009104212,1.5242894887924194 +67704,1,-0.33638838430182605,-0.09505646980369299,0.45246578625417994,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.059714660367144415,1.4903464317321777 +67704,2,-0.27617209458197817,0.282992601310055,-0.26192468630532967,,,,,,,,,,,,,1.4903464317321777 +68802,0,-0.9385338539320537,-1.000669460045355,-0.8351539579881,-0.37905084107887943,0.39561354207787724,0.457405498335207,0.028481212147090252,-0.38645305720719647,-0.8863975124670236,-1.432801541987221,-1.740837916448057,-1.3918785079011935,1.267782866548965,-0.2910724881500066,0.8737234706124865,-0.35376572608947754 +68802,1,0.048094632541727786,-0.3623194500333156,-0.9772853356255832,,,,,,,,,,0.9503768127628092,-0.3229291202479022,0.6927973321038463,0.7898010611534119 +68802,2,0.7077523561506651,-0.6512159154852555,0.09808543849151298,,,,,,,,,,,,,0.7898010611534119 +70604,0,-1.3903310737181822,-1.230785711880076,-1.0820659805478523,-0.9689657939725767,0.2698953541876708,0.7418646801456215,-1.6136752526077616,-0.14539775465670343,-1.3802224138533508,-0.23730908679360116,-1.3476641243075844,1.548461097626366,1.267782866548965,-1.388853942113607,1.9889291013160153,0.9841455221176147 +70604,1,-1.0092336637780452,-1.431371370951806,-2.10066121710254,,,,,,,,,,0.9503768127628092,-1.3914893931436731,0.4419600012801827,1.2742960453033447 +70604,2,-1.0633116551680928,-1.585424432280566,-1.6119626542934897,,,,,,,,,,,,,1.2742960453033447 +72102,0,-1.27738176877165,-0.6554950822932735,-0.5882419354283478,-0.37905084107887943,-0.35869558526336154,-1.5338087743376947,-0.7925970202303356,-1.230146616133922,-0.5571809115428055,-1.432801541987221,-1.740837916448057,-0.9718299928258278,-1.0422163045785646,-0.2910724881500066,-0.9106055385131593,2.2999749183654785 +72102,1,-1.585958189043376,-1.431371370951806,-1.6921608965654649,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.8122266528381351,1.0709683895111084 +72102,2,-2.735983221413586,-2.3639315296099914,-2.151977841488754,,,,,,,,,,,,,1.0709683895111084 +73903,0,0.7557057202659283,0.9553186805497738,1.1401422224899183,-0.37905084107887943,0.39561354207787724,0.457405498335207,-1.0662897643561442,0.09565754789378961,-0.7217892120049145,1.5559295959968287,-1.3476641243075844,-1.3918785079011935,-0.27221658086938805,0.806708965813594,-0.24148216009104212,1.422383189201355 +73903,1,0.9131814204397238,0.8849077910382567,0.8609661067912552,,,,,,,,,,0.2373400917434395,0.7456311526478686,1.1944719937511734,2.8221399784088135 +73903,2,0.41257502093087217,1.5286039570371357,1.5381259376788836,,,,,,,,,,,,,2.8221399784088135 +74001,0,-0.5996859390924573,-1.000669460045355,-0.8351539579881,1.6856514940490606,1.2756408573093225,1.026323861956036,1.4881758474847362,0.3367128504442826,1.0889020930782853,-0.23730908679360116,-0.5613165400266386,1.1284125825510003,-0.27221658086938805,0.806708965813594,0.8737234706124865,1.3240667581558228 +74001,1,-0.528629892723603,0.2612941705024705,0.45246578625417994,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.059714660367144415,1.268164873123169 +74001,2,-0.7681343199482997,0.6722461499747677,0.8181056880851983,,,,,,,,,,,,,1.268164873123169 +74601,0,-0.2608380242528609,-0.770553208210634,-0.7116979467082238,1.2432152793787876,0.39561354207787724,0.7418646801456215,1.0320212739417218,1.2406702350086316,1.0889020930782853,-0.835055314390411,-0.9544903321671111,-0.9718299928258278,0.49778314283978853,-0.2910724881500066,-0.6875644123724536,1.3799235820770264 +74601,1,0.6248191578070585,-1.2531960507987243,-1.4879107362969273,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.5613893220144716,1.5087494850158691 +74601,2,-0.4729569847285068,-0.9626187544170256,-1.3419550606958577,,,,,,,,,,,,,1.5087494850158691 +75601,0,-0.9385338539320537,-0.08020445270647089,-0.4647859241484716,-0.674008317525728,-0.8615683368241874,-0.3959720470960366,-0.8838279349389385,0.3969766760819059,-1.0510058129291326,-0.835055314390411,-0.5613165400266386,-0.13173296267509654,-0.27221658086938805,0.806708965813594,3.104134732019544,0.9940563440322876 +75601,1,0.2403361409635047,0.5285571507320932,2.6992175492080936,,,,,,,,,,0.2373400917434395,2.88275169843941,0.4419600012801827,0.7845523953437805 +75601,2,-0.9649192100948284,-0.10626094735465771,-0.981944935899015,,,,,,,,,,,,,0.7845523953437805 +75605,0,-0.9385338539320537,0.6101443027976923,-0.5882419354283478,-0.674008317525728,-0.8615683368241874,-0.3959720470960366,-0.8838279349389385,0.3969766760819059,-1.0510058129291326,-0.835055314390411,-0.5613165400266386,-0.13173296267509654,1.267782866548965,-1.388853942113607,-0.018441033950336395,0.843880295753479 +75605,1,0.33645689517439314,-0.3623194500333156,-0.26240977468570165,,,,,,,,,,0.2373400917434395,0.7456311526478686,0.4419600012801827,-0.06684461981058121 +75605,2,0.6093599110774008,-0.2619623668205428,-0.17192215510611902,,,,,,,,,,,,,-0.06684461981058121 +76103,0,-1.27738176877165,-1.1157275859627156,-0.9586099692679761,-0.08409336463203088,1.2756408573093225,0.7418646801456215,-0.33644244668732126,-0.38645305720719647,-0.7217892120049145,0.9581833684000187,-0.9544903321671111,-1.8119270229765592,1.267782866548965,0.806708965813594,-0.24148216009104212,1.0721328258514404 +76103,1,0.14421538675261625,0.08311885034938876,-0.05815961441716403,,,,,,,,,,1.663413533782179,0.7456311526478686,0.4419600012801827,0.79022616147995 +76103,2,0.019005240637814846,-0.573365205752313,-0.26192468630532967,,,,,,,,,,,,,0.79022616147995 +76403,0,0.07800989058673549,1.1854349323844948,1.3870542450496706,-0.5265295793023037,-0.7358501489339809,0.17294631652479245,0.11971212685569313,0.5777681529947757,-0.7217892120049145,-0.23730908679360116,-1.3476641243075844,-0.5517814777504622,-0.27221658086938805,-0.2910724881500066,-0.4645232862317478,0.19122423231601715 +76403,1,0.33645689517439314,0.7067324708851749,0.963091186925524,,,,,,,,,,0.9503768127628092,1.8141914255436393,-0.059714660367144415,1.0091897249221802 +76403,2,0.8061448012239295,0.5165447305088826,0.368093032089145,,,,,,,,,,,,,1.0091897249221802 +76405,0,0.8686550252124604,1.4155511842192159,0.15249413225090913,-0.5265295793023037,-0.7358501489339809,0.17294631652479245,0.11971212685569313,0.5777681529947757,-0.7217892120049145,-0.23730908679360116,-1.3476641243075844,-0.5517814777504622,-0.27221658086938805,1.9044904197771946,0.8737234706124865,-0.3759506642818451 +76405,1,-0.14414687588004912,1.9539597119567473,0.04396546571710477,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,1.1944719937511734,0.657188892364502 +76405,2,0.9045372462971938,0.43869402077594005,-0.7119373423013831,,,,,,,,,,,,,0.657188892364502 +76802,0,-0.48673663414592516,-0.8856113341279945,-0.7116979467082238,1.0957365411553635,0.6470499178582901,0.7418646801456215,1.4881758474847362,1.9638361426601105,0.7596854921540671,1.5559295959968287,0.22503104425430823,1.1284125825510003,-0.27221658086938805,-1.388853942113607,-0.24148216009104212,2.1679630279541016 +76802,1,0.52869840359617,-0.4514071101098565,-0.46665993495423924,,,,,,,,,,1.663413533782179,-0.3229291202479022,1.1944719937511734,2.183178663253784 +76802,2,-0.07938720443544948,-0.573365205752313,0.008082907292302316,,,,,,,,,,,,,2.183178663253784 +76803,0,-1.0514831588785858,-0.8856113341279945,-0.7116979467082238,1.0957365411553635,0.6470499178582901,0.7418646801456215,1.4881758474847362,1.9638361426601105,0.7596854921540671,1.5559295959968287,0.22503104425430823,1.1284125825510003,1.267782866548965,-0.2910724881500066,0.8737234706124865,2.183178663253784 +76803,1,-1.201475172199822,0.08311885034938876,-1.3857856561626585,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.059714660367144415,2.486250162124634 +76803,2,-1.161704100241357,-0.573365205752313,-0.8019398735005937,,,,,,,,,,,,,2.486250162124634 +76804,0,-0.48673663414592516,-1.000669460045355,-0.8351539579881,1.0957365411553635,0.6470499178582901,0.7418646801456215,1.4881758474847362,1.9638361426601105,0.7596854921540671,1.5559295959968287,0.22503104425430823,1.1284125825510003,-1.0422163045785646,-1.388853942113607,-0.9106055385131593,2.7002627849578857 +76804,1,-0.04802612166916067,0.2612941705024705,-0.9772853356255832,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-1.0630639836617988,2.6204519271850586 +76804,2,-0.07938720443544948,0.7500968597077102,0.008082907292302316,,,,,,,,,,,,,2.6204519271850586 +77002,0,-0.7126352440389895,-1.000669460045355,-0.8351539579881,0.2108641118148177,-0.7358501489339809,0.17294631652479245,-0.8838279349389385,-0.4467168828448197,-0.3925726110806964,-0.835055314390411,-0.16814274788616518,0.7083640674756347,-0.27221658086938805,-0.2910724881500066,0.8737234706124865,-0.6931471824645996 +77002,1,-0.9131129095671567,-1.431371370951806,-1.590035816431196,,,,,,,,,,0.2373400917434395,-1.3914893931436731,-0.5613893220144716,0.1528620421886444 +77002,2,-0.7681343199482997,-1.3518723030817383,-0.441929748703751,,,,,,,,,,,,,0.1528620421886444 +80101,0,3.014691819196571,3.1414230729796238,2.745070369128308,-0.37905084107887943,0.6470499178582901,-0.6804312289064511,-0.42767336139592416,-0.26592540593194997,-1.0510058129291326,-0.835055314390411,-0.9544903321671111,-0.9718299928258278,0.49778314283978853,0.806708965813594,1.7658879751753094,0.19911672174930573 +80101,1,1.1054229288615007,1.8648720518802064,1.7800918279996742,,,,,,,,,,0.9503768127628092,0.7456311526478686,2.4486586478694914,0.35362669825553894 +80101,2,0.5109674660041365,2.2292603446336186,2.3481487184717795,,,,,,,,,,,,,0.35362669825553894 +80103,0,-0.14788871930632877,-0.3103207045411919,-0.2178739015887193,-0.37905084107887943,0.6470499178582901,-0.6804312289064511,-0.42767336139592416,-0.26592540593194997,-1.0510058129291326,-0.835055314390411,-0.9544903321671111,-0.9718299928258278,0.49778314283978853,-0.2910724881500066,1.7658879751753094,0.49064815044403076 +80103,1,-0.04802612166916067,-0.18414412988023388,0.35034070611991114,,,,,,,,,,0.9503768127628092,-0.3229291202479022,1.1944719937511734,0.5824958682060242 +80103,2,-0.8665267650215641,-0.573365205752313,-0.7119373423013831,,,,,,,,,,,,,0.5824958682060242 +80301,0,0.07800989058673549,0.2649699250456107,0.029038120971032973,1.9806089704959091,0.6470499178582901,0.7418646801456215,-0.33644244668732126,-0.26592540593194997,0.9242937926161762,-0.23730908679360116,0.22503104425430823,-0.13173296267509654,0.49778314283978853,1.9044904197771946,0.20460009219036931,1.5365381240844727 +80301,1,0.14421538675261625,0.3503818305790114,0.35034070611991114,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,-0.059714660367144415,1.6807416677474976 +80301,2,-1.0633116551680928,-0.2619623668205428,0.008082907292302316,,,,,,,,,,,,,1.6807416677474976 +80302,0,0.3039085004797998,0.14991179912825014,0.029038120971032973,1.9806089704959091,0.6470499178582901,0.7418646801456215,-0.33644244668732126,-0.26592540593194997,0.9242937926161762,-0.23730908679360116,0.22503104425430823,-0.13173296267509654,0.49778314283978853,-1.388853942113607,-0.6875644123724536,2.031648874282837 +80302,1,0.2403361409635047,0.7067324708851749,0.5545908663884488,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.059714660367144415,2.415060520172119 +80302,2,-0.5713494298017712,1.6843053765030207,0.7281031568859877,,,,,,,,,,,,,2.415060520172119 +80303,0,-1.164432463825118,-1.000669460045355,-0.8351539579881,1.9806089704959091,0.6470499178582901,0.7418646801456215,-0.33644244668732126,-0.26592540593194997,0.9242937926161762,-0.23730908679360116,0.22503104425430823,-0.13173296267509654,-1.0422163045785646,0.806708965813594,0.20460009219036931,2.415060520172119 +80303,1,0.048094632541727786,-0.18414412988023388,-1.2836605760283897,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.8122266528381351,2.6031863689422607 +80303,2,-0.4729569847285068,-0.8069173349511406,-0.8019398735005937,,,,,,,,,,,,,2.6031863689422607 +80306,0,1.4334015499451211,-0.42537883045855246,0.15249413225090913,1.9806089704959091,0.6470499178582901,0.7418646801456215,-0.33644244668732126,-0.26592540593194997,0.9242937926161762,-0.23730908679360116,0.22503104425430823,-0.13173296267509654,1.267782866548965,-1.388853942113607,0.8737234706124865,2.0478529930114746 +80306,1,-1.585958189043376,0.7067324708851749,0.7588410266569864,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.5613893220144716,2.0557045936584473 +80306,2,-0.1777796495087138,1.1393504083724229,0.368093032089145,,,,,,,,,,,,,2.0557045936584473 +81001,0,1.6593001598381854,0.3800280509629712,0.15249413225090913,1.390694017602212,1.2756408573093225,1.3107830437664505,1.3969449327761334,1.7227808401096176,1.5827269944646125,1.5559295959968287,0.22503104425430823,1.1284125825510003,0.49778314283978853,0.806708965813594,-0.24148216009104212,2.895293712615967 +81001,1,1.2976644372832777,0.3503818305790114,1.4737165875968679,,,,,,,,,,0.9503768127628092,0.7456311526478686,1.1944719937511734,2.907463788986206 +81001,2,1.593284361810044,1.450753247304193,1.5381259376788836,,,,,,,,,,,,,2.907463788986206 +81101,0,1.7722494647847176,2.6811905693101816,3.1154384029679365,0.9482578029319392,0.7727681057484966,1.026323861956036,0.11971212685569313,0.15592137353141286,0.595077191691958,-0.835055314390411,-0.16814274788616518,-0.9718299928258278,0.49778314283978853,-0.2910724881500066,-0.24148216009104212,1.963492751121521 +81101,1,2.1627512251812737,1.2412584313444202,1.6779667478654055,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.5613893220144716,1.7184454202651978 +81101,2,1.3964994716635155,0.9836489889065378,1.178115812882041,,,,,,,,,,,,,1.7184454202651978 +82802,0,-0.5996859390924573,-0.8856113341279945,-0.7116979467082238,-1.4114020086428494,-0.35869558526336154,-1.2493495925272802,-0.2452115319787184,-1.4712019186844152,-0.3925726110806964,-0.835055314390411,-1.3476641243075844,0.28831555240026907,0.49778314283978853,0.806708965813594,0.6506823444717807,2.3729214668273926 +82802,1,-0.04802612166916067,-0.6295824302629383,0.14609054585137357,,,,,,,,,,0.9503768127628092,-0.3229291202479022,0.19112267045651915,2.460783004760742 +82802,2,0.31418257585760784,-0.18411165708760024,0.18808796969072364,,,,,,,,,,,,,2.460783004760742 +82902,0,-0.37378732919939306,-0.770553208210634,-0.7116979467082238,0.06338537359139342,0.6470499178582901,0.457405498335207,0.940790359233119,0.2764490248066594,0.10125229030563083,0.36043714080320877,0.22503104425430823,0.7083640674756347,1.267782866548965,-0.2910724881500066,1.9889291013160153,2.267340898513794 +82902,1,1.1054229288615007,-0.3623194500333156,-0.6709100952227768,,,,,,,,,,0.9503768127628092,0.7456311526478686,3.7028453019878094,2.4842214584350586 +82902,2,-0.37456453965524245,0.5165447305088826,0.368093032089145,,,,,,,,,,,,,2.4842214584350586 +83102,0,1.5463508548916531,0.2649699250456107,0.15249413225090913,-1.4114020086428494,-0.7358501489339809,-2.671645501579353,-1.1575206790647472,-0.9288274879458058,-1.0510058129291326,-2.628293997180841,-2.920359292869476,0.7083640674756347,-1.812216028287741,-1.388853942113607,-1.133646664653865,0.6112805604934692 +83102,1,0.2403361409635047,-0.00596880972715211,0.45246578625417994,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-1.0630639836617988,0.6300633549690247 +83102,2,-0.5713494298017712,-0.4955144960193704,-0.441929748703751,,,,,,,,,,,,,0.6300633549690247 +83901,0,-1.3903310737181822,-0.42537883045855246,-0.7116979467082238,-1.7063594850896981,-1.1130047126046003,-0.9648904107168657,-1.6136752526077616,-1.5917295699596616,-1.3802224138533508,0.36043714080320877,0.22503104425430823,0.28831555240026907,0.49778314283978853,-1.388853942113607,-0.9106055385131593,1.7793318033218384 +83901,1,-1.8743204516760412,-1.6986343511814288,-1.3857856561626585,,,,,,,,,,-1.9017700713146695,-1.3914893931436731,-0.5613893220144716,1.964345932006836 +83901,2,-2.1456285509740005,-1.9746779809452786,-0.981944935899015,,,,,,,,,,,,,1.964345932006836 +84101,0,0.4168578054263319,1.3004930583018552,2.1277903127289273,0.8007790647085149,0.8984862936387031,0.7418646801456215,0.8495594445245161,0.3969766760819059,0.10125229030563083,1.5559295959968287,1.7977262128162,0.7083640674756347,-1.812216028287741,-1.388853942113607,-0.9106055385131593,1.1090941429138184 +84101,1,0.14421538675261625,0.9739954511147976,-0.05815961441716403,,,,,,,,,,-1.9017700713146695,-0.3229291202479022,-0.8122266528381351,0.25935599207878113 +84101,2,1.1013221364437225,0.282992601310055,0.5480980944875663,,,,,,,,,,,,,0.25935599207878113 +85501,0,-0.14788871930632877,-1.000669460045355,-0.8351539579881,1.0957365411553635,0.7727681057484966,0.7418646801456215,1.3057140180675306,2.265155270848227,1.4181186940025035,0.9581833684000187,1.0113786285352542,1.548461097626366,1.267782866548965,-0.2910724881500066,0.42764121833107505,2.0511155128479004 +85501,1,0.6248191578070585,0.3503818305790114,0.7588410266569864,,,,,,,,,,0.9503768127628092,-1.3914893931436731,2.4486586478694914,2.0373153686523438 +85501,2,0.31418257585760784,0.282992601310055,0.8181056880851983,,,,,,,,,,,,,2.0373153686523438 +86202,0,-0.5996859390924573,-0.5404369563759129,-0.3413299128685955,0.9482578029319392,0.7727681057484966,0.17294631652479245,-0.8838279349389385,-0.024870103381456905,-0.5571809115428055,-0.23730908679360116,1.0113786285352542,-0.13173296267509654,-0.27221658086938805,-0.2910724881500066,0.8737234706124865,2.4138169288635254 +86202,1,1.0093021746506123,-0.4514071101098565,-0.16028469455143282,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.310551991190808,2.592885971069336 +86202,2,0.11739768571107917,-0.028410237621715174,0.45809556328835566,,,,,,,,,,,,,2.592885971069336 +87501,0,-0.48673663414592516,-0.6554950822932735,-0.7116979467082238,-0.5265295793023037,0.7727681057484966,0.17294631652479245,-0.9750588496475414,-0.14539775465670343,-1.3802224138533508,0.9581833684000187,1.7977262128162,0.7083640674756347,0.49778314283978853,-0.2910724881500066,-0.24148216009104212,2.198568344116211 +87501,1,-0.33638838430182605,-0.7186700903394792,0.14609054585137357,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.059714660367144415,1.8951489925384521 +87501,2,-0.1777796495087138,-0.573365205752313,0.09808543849151298,,,,,,,,,,,,,1.8951489925384521 +88602,0,-0.37378732919939306,0.2649699250456107,-0.5882419354283478,1.0957365411553635,1.401359045199529,1.026323861956036,-0.06274970256151263,0.5175043273571525,1.7473352949267216,-0.23730908679360116,-0.16814274788616518,1.1284125825510003,-2.5822157519969178,0.806708965813594,0.20460009219036931,2.9687657356262207 +88602,1,-1.0092336637780452,0.17220651042592966,-0.568785015088508,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.5613893220144716,2.995732307434082 +88602,2,0.41257502093087217,0.282992601310055,0.18808796969072364,,,,,,,,,,,,,2.995732307434082 +88701,0,0.529807110372864,0.03485367321088963,0.5228621660905376,-0.8214870557491524,0.8984862936387031,0.7418646801456215,0.028481212147090252,0.035393722256166354,0.595077191691958,0.36043714080320877,-0.9544903321671111,-0.13173296267509654,-0.27221658086938805,-0.2910724881500066,-0.9106055385131593,1.743966817855835 +88701,1,0.4325776493852816,0.5285571507320932,0.35034070611991114,,,,,,,,,,0.2373400917434395,-1.3914893931436731,-0.5613893220144716,1.7072670459747314 +88701,2,1.1013221364437225,0.43869402077594005,0.008082907292302316,,,,,,,,,,,,,1.7072670459747314 +89303,0,-0.7126352440389895,-0.6554950822932735,-0.3413299128685955,-0.674008317525728,0.5213317299680837,0.7418646801456215,1.0320212739417218,1.602253188834371,-0.22796431061858732,0.9581833684000187,-0.16814274788616518,1.548461097626366,0.49778314283978853,-0.2910724881500066,-0.6875644123724536,1.821273922920227 +89303,1,0.14421538675261625,-0.9859330705691017,0.24821562598564237,,,,,,,,,,0.9503768127628092,-0.3229291202479022,1.1944719937511734,2.099053144454956 +89303,2,-0.27617209458197817,-0.6512159154852555,-0.17192215510611902,,,,,,,,,,,,,2.099053144454956 +89601,0,1.5463508548916531,3.3715393248143446,1.5105102563295467,2.1280877087193333,1.2756408573093225,1.026323861956036,1.4881758474847362,1.4214617119215014,2.07655189585094,0.9581833684000187,0.22503104425430823,1.1284125825510003,1.267782866548965,1.9044904197771946,1.7658879751753094,2.119163751602173 +89601,1,1.0093021746506123,2.0430473720332882,1.1673413471940615,,,,,,,,,,1.663413533782179,0.7456311526478686,2.197821317045828,1.9138813018798828 +89601,2,1.6916768068833083,1.295051827838308,1.718131000077305,,,,,,,,,,,,,1.9138813018798828 +89803,0,1.0945536351055247,1.645667436053937,1.3870542450496706,1.2432152793787876,0.39561354207787724,0.457405498335207,1.3969449327761334,0.3367128504442826,1.9119435953888306,-0.23730908679360116,-0.9544903321671111,-1.3918785079011935,1.267782866548965,1.9044904197771946,0.8737234706124865,2.363732099533081 +89803,1,0.048094632541727786,1.1521707712678793,0.5545908663884488,,,,,,,,,,-0.47569662927593015,0.7456311526478686,1.1944719937511734,2.386996030807495 +89803,2,1.7900692519565728,2.151409634900676,1.2681183440812516,,,,,,,,,,,,,2.386996030807495 +91202,0,0.3039085004797998,0.7252024287150527,1.5105102563295467,1.9806089704959091,1.2756408573093225,0.7418646801456215,1.3057140180675306,1.4214617119215014,1.9119435953888306,-0.23730908679360116,1.0113786285352542,-0.13173296267509654,0.49778314283978853,0.806708965813594,0.20460009219036931,2.0563414096832275 +91202,1,1.77826820833772,0.7958201309617158,1.0652162670597927,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.059714660367144415,2.2998993396759033 +91202,2,1.7900692519565728,0.5943954402418251,1.3581208752804623,,,,,,,,,,,,,2.2998993396759033 +91401,0,-0.7126352440389895,-1.000669460045355,-0.8351539579881,0.8007790647085149,1.401359045199529,0.457405498335207,1.2144831033589276,0.2161851991690361,0.7596854921540671,0.9581833684000187,-0.5613165400266386,0.7083640674756347,1.267782866548965,-0.2910724881500066,0.42764121833107505,2.439333438873291 +91401,1,0.14421538675261625,-0.3623194500333156,0.24821562598564237,,,,,,,,,,0.2373400917434395,-0.3229291202479022,0.4419600012801827,2.587674617767334 +91401,2,0.11739768571107917,1.6843053765030207,1.0881132816828303,,,,,,,,,,,,,2.587674617767334 +91402,0,0.9816043301589925,0.3800280509629712,0.2759501435307853,0.8007790647085149,1.401359045199529,0.457405498335207,1.2144831033589276,0.2161851991690361,0.7596854921540671,0.9581833684000187,-0.5613165400266386,0.7083640674756347,1.267782866548965,-0.2910724881500066,0.20460009219036931,2.587674617767334 +91402,1,0.7209399120179469,-0.00596880972715211,0.45246578625417994,,,,,,,,,,-0.47569662927593015,0.7456311526478686,0.19112267045651915,2.0513575077056885 +91402,2,0.41257502093087217,-0.573365205752313,0.8181056880851983,,,,,,,,,,,,,2.0513575077056885 +91801,0,0.4168578054263319,-0.5404369563759129,-0.7116979467082238,-0.5265295793023037,0.6470499178582901,0.7418646801456215,-0.518904276104527,-0.14539775465670343,-0.5571809115428055,-0.835055314390411,0.6182048363947807,0.28831555240026907,0.49778314283978853,0.806708965813594,-0.24148216009104212,1.7157959938049316 +91801,1,0.4325776493852816,-1.2531960507987243,-0.9772853356255832,,,,,,,,,,0.9503768127628092,0.7456311526478686,0.4419600012801827,1.7448049783706665 +91801,2,0.11739768571107917,-1.2740215933487957,-0.8019398735005937,,,,,,,,,,,,,1.7448049783706665 +92301,0,0.7557057202659283,-1.1157275859627156,-0.9586099692679761,-1.4114020086428494,0.018458978407257843,-0.6804312289064511,-0.06274970256151263,0.9393511068205153,0.430468891229849,0.9581833684000187,0.6182048363947807,-0.13173296267509654,0.49778314283978853,0.806708965813594,0.8737234706124865,1.747433066368103 +92301,1,0.6248191578070585,-1.520459031028347,-0.26240977468570165,,,,,,,,,,0.2373400917434395,2.88275169843941,-0.5613893220144716,2.090804100036621 +92301,2,0.31418257585760784,-0.729066625218198,-0.26192468630532967,,,,,,,,,,,,,2.090804100036621 +92302,0,-0.8255845489855216,-1.000669460045355,-0.8351539579881,-1.4114020086428494,0.018458978407257843,-0.6804312289064511,-0.06274970256151263,0.9393511068205153,0.430468891229849,0.9581833684000187,0.6182048363947807,-0.13173296267509654,-1.0422163045785646,0.806708965813594,-0.018441033950336395,2.2875821590423584 +92302,1,0.33645689517439314,-0.18414412988023388,0.5545908663884488,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,0.4419600012801827,2.2343530654907227 +92302,2,-0.1777796495087138,-0.6512159154852555,0.09808543849151298,,,,,,,,,,,,,2.2343530654907227 +92303,0,1.5463508548916531,0.9553186805497738,0.029038120971032973,-1.4114020086428494,0.018458978407257843,-0.6804312289064511,-0.06274970256151263,0.9393511068205153,0.430468891229849,0.9581833684000187,0.6182048363947807,-0.13173296267509654,-1.0422163045785646,-0.2910724881500066,0.20460009219036931,2.2343530654907227 +92303,1,0.7209399120179469,0.17220651042592966,0.45246578625417994,,,,,,,,,,0.2373400917434395,-0.3229291202479022,0.4419600012801827,2.198568344116211 +92303,2,-0.37456453965524245,0.20514189157711243,0.8181056880851983,,,,,,,,,,,,,2.198568344116211 +93203,0,0.07800989058673549,0.9553186805497738,0.3994061548106614,-1.4114020086428494,-0.10725920948294862,0.7418646801456215,-0.518904276104527,-0.9288274879458058,-0.8863975124670236,0.9581833684000187,-0.16814274788616518,0.28831555240026907,-1.0422163045785646,-0.2910724881500066,0.8737234706124865,2.1035828590393066 +93203,1,-0.8169921553562683,0.2612941705024705,0.24821562598564237,,,,,,,,,,-1.1887333502953,-1.3914893931436731,0.6927973321038463,1.9950716495513916 +93203,2,-0.7681343199482997,1.1393504083724229,0.7281031568859877,,,,,,,,,,,,,1.9950716495513916 +93602,0,0.07800989058673549,-0.6554950822932735,-0.5882419354283478,-0.08409336463203088,0.2698953541876708,1.026323861956036,1.2144831033589276,2.2048914452106034,0.9242937926161762,0.9581833684000187,1.0113786285352542,-0.13173296267509654,-1.812216028287741,-0.2910724881500066,-0.6875644123724536,2.1758182048797607 +93602,1,0.4325776493852816,0.08311885034938876,-0.26240977468570165,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.5613893220144716,2.662102460861206 +93602,2,0.019005240637814846,-0.573365205752313,0.2780905008899343,,,,,,,,,,,,,2.662102460861206 +94901,0,-0.03493941435979663,-1.1157275859627156,-0.9586099692679761,0.06338537359139342,0.2698953541876708,0.457405498335207,-0.2452115319787184,-0.4467168828448197,1.0889020930782853,-1.432801541987221,-0.9544903321671111,-0.9718299928258278,0.49778314283978853,-0.2910724881500066,-0.24148216009104212,1.20381760597229 +94901,1,-1.0092336637780452,-0.80775775041602,0.14609054585137357,,,,,,,,,,-1.1887333502953,0.7456311526478686,-0.5613893220144716,1.503217339515686 +94901,2,0.2157901307843435,0.04944047211122737,0.2780905008899343,,,,,,,,,,,,,1.503217339515686 +95001,0,-0.2608380242528609,0.14991179912825014,-0.3413299128685955,1.2432152793787876,1.149922669419116,1.026323861956036,0.210943041564296,0.7585596299076455,1.5827269944646125,0.9581833684000187,1.4045524206757267,0.28831555240026907,-0.27221658086938805,-1.388853942113607,0.20460009219036931,2.3390393257141113 +95001,1,-0.33638838430182605,-0.2732317899567748,0.24821562598564237,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,0.4419600012801827,2.2857046127319336 +95001,2,0.11739768571107917,0.8279475694406527,-0.08191962390690835,,,,,,,,,,,,,2.2857046127319336 +96201,0,0.6427564153193962,0.7252024287150527,0.3994061548106614,0.358342850038242,1.2756408573093225,0.7418646801456215,-0.42767336139592416,0.4572405017195292,-0.06335601015647824,0.9581833684000187,1.0113786285352542,-0.13173296267509654,-0.27221658086938805,0.806708965813594,-0.24148216009104212,1.4180325269699097 +96201,1,-1.1053544179889336,0.3503818305790114,0.8609661067912552,,,,,,,,,,0.2373400917434395,-1.3914893931436731,1.1944719937511734,1.356400728225708 +96201,2,0.11739768571107917,0.36084331104299755,0.368093032089145,,,,,,,,,,,,,1.356400728225708 +96203,0,0.6427564153193962,0.03485367321088963,-0.7116979467082238,0.358342850038242,1.2756408573093225,0.7418646801456215,-0.42767336139592416,0.4572405017195292,-0.06335601015647824,0.9581833684000187,1.0113786285352542,-0.13173296267509654,-0.27221658086938805,0.806708965813594,-0.4645232862317478,1.3793237209320068 +96203,1,-0.528629892723603,-0.5404947701863974,0.04396546571710477,,,,,,,,,,0.2373400917434395,0.7456311526478686,0.4419600012801827,2.3125829696655273 +96203,2,-0.07938720443544948,-0.8069173349511406,-0.6219348111021723,,,,,,,,,,,,,2.3125829696655273 +96701,0,1.320452244998589,-0.6554950822932735,0.2759501435307853,-0.5265295793023037,-1.3644410883850133,-1.8182679561481092,-0.7013661055217327,-0.6275083597576895,-0.22796431061858732,-0.835055314390411,-0.16814274788616518,-0.9718299928258278,-1.812216028287741,-0.2910724881500066,0.8737234706124865,2.386955976486206 +96701,1,1.77826820833772,0.17220651042592966,1.371591507462599,,,,,,,,,,-1.1887333502953,-0.3229291202479022,0.19112267045651915,2.4851884841918945 +96701,2,1.7900692519565728,-0.2619623668205428,0.8181056880851983,,,,,,,,,,,,,2.4851884841918945 +96702,0,0.529807110372864,0.2649699250456107,0.029038120971032973,-0.5265295793023037,-1.3644410883850133,-1.8182679561481092,-0.7013661055217327,-0.6275083597576895,-0.22796431061858732,-0.835055314390411,-0.16814274788616518,-0.9718299928258278,-1.812216028287741,0.806708965813594,-0.24148216009104212,2.4851884841918945 +96702,1,2.3549927336030505,0.4394694906555523,1.882216908133943,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.310551991190808,1.763675332069397 +96702,2,2.6756012576159516,-0.33981307655348536,0.7281031568859877,,,,,,,,,,,,,1.763675332069397 +97101,0,-0.9385338539320537,-0.5404369563759129,-0.09441789030884316,-0.23157210285545515,0.8984862936387031,-0.1115128652856221,0.4846357856901046,0.8188234555452687,0.2658605907677399,1.5559295959968287,1.0113786285352542,-0.9718299928258278,1.267782866548965,-0.2910724881500066,3.104134732019544,2.294797658920288 +97101,1,-0.24026763009093757,-0.3623194500333156,0.24821562598564237,,,,,,,,,,0.2373400917434395,0.7456311526478686,0.4419600012801827,1.5123608112335205 +97101,2,-0.7681343199482997,-0.6512159154852555,-0.6219348111021723,,,,,,,,,,,,,1.5123608112335205 +97102,0,-0.2608380242528609,0.03485367321088963,-0.4647859241484716,-0.23157210285545515,0.8984862936387031,-0.1115128652856221,0.4846357856901046,0.8188234555452687,0.2658605907677399,1.5559295959968287,1.0113786285352542,-0.9718299928258278,-0.27221658086938805,0.806708965813594,0.20460009219036931,1.5123608112335205 +97102,1,0.33645689517439314,1.419433751497502,0.963091186925524,,,,,,,,,,0.2373400917434395,-0.3229291202479022,0.4419600012801827,2.9227378368377686 +97102,2,0.41257502093087217,0.43869402077594005,1.3581208752804623,,,,,,,,,,,,,2.9227378368377686 +97401,0,-0.2608380242528609,-0.1952625786238314,0.3994061548106614,0.5058215882616662,1.0242044815289095,0.17294631652479245,0.3021739562728989,1.4817255375591245,1.4181186940025035,0.9581833684000187,-0.5613165400266386,-0.9718299928258278,1.267782866548965,0.806708965813594,-0.24148216009104212,2.4766666889190674 +97401,1,-0.04802612166916067,-0.5404947701863974,-0.46665993495423924,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.8122266528381351,2.995732307434082 +97401,2,0.31418257585760784,-1.5075737225476233,-0.08191962390690835,,,,,,,,,,,,,2.995732307434082 +97402,0,0.07800989058673549,-0.1952625786238314,0.029038120971032973,0.5058215882616662,1.0242044815289095,0.17294631652479245,0.3021739562728989,1.4817255375591245,1.4181186940025035,0.9581833684000187,-0.5613165400266386,-0.9718299928258278,0.49778314283978853,-0.2910724881500066,0.20460009219036931,2.995732307434082 +97402,1,-0.9131129095671567,-0.09505646980369299,-0.7730351753570456,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.059714660367144415,2.6431045532226562 +97402,2,0.7077523561506651,0.1272911818441699,-0.35192721750454037,,,,,,,,,,,,,2.6431045532226562 +98102,0,0.6427564153193962,-1.230785711880076,-1.0820659805478523,-0.9689657939725767,-0.35869558526336154,0.17294631652479245,0.6670976151073104,0.6380319786323989,-0.7217892120049145,0.9581833684000187,0.22503104425430823,-0.13173296267509654,0.49778314283978853,-0.2910724881500066,0.8737234706124865,1.5694485902786255 +98102,1,0.4325776493852816,-1.2531960507987243,-0.9772853356255832,,,,,,,,,,0.9503768127628092,-0.3229291202479022,0.4419600012801827,1.7443128824234009 +98102,2,1.0029296913704582,-0.8847680446840831,-0.441929748703751,,,,,,,,,,,,,1.7443128824234009 +99203,0,0.07800989058673549,-0.6554950822932735,-0.4647859241484716,0.06338537359139342,-0.2329773973731551,0.457405498335207,-0.61013519081313,-0.08513392901908017,-1.0510058129291326,-0.835055314390411,-0.16814274788616518,0.28831555240026907,0.49778314283978853,-0.2910724881500066,0.20460009219036931,2.235105514526367 +99203,1,0.6248191578070585,0.6176448108086341,0.8609661067912552,,,,,,,,,,0.2373400917434395,0.7456311526478686,0.19112267045651915,2.356497049331665 +99203,2,0.41257502093087217,0.282992601310055,0.368093032089145,,,,,,,,,,,,,2.356497049331665 +99802,0,0.6427564153193962,2.3360161915581,1.016686211210042,1.833130232272485,1.2756408573093225,1.3107830437664505,0.7583285298159133,0.3969766760819059,1.2535103935403944,0.9581833684000187,0.6182048363947807,0.7083640674756347,-0.27221658086938805,0.806708965813594,0.6506823444717807,1.4747430086135864 +99802,1,0.52869840359617,0.7067324708851749,2.392842308805287,,,,,,,,,,-1.1887333502953,-0.3229291202479022,0.4419600012801827,1.553134560585022 +99802,2,-0.5713494298017712,0.5165447305088826,0.7281031568859877,,,,,,,,,,,,,1.553134560585022 +101503,0,0.6427564153193962,1.1854349323844948,1.757422278889299,0.358342850038242,1.0242044815289095,1.3107830437664505,-0.2452115319787184,0.2161851991690361,1.2535103935403944,-0.23730908679360116,-0.16814274788616518,1.1284125825510003,-1.812216028287741,0.806708965813594,0.8737234706124865,2.337639808654785 +101503,1,1.0093021746506123,1.1521707712678793,0.7588410266569864,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.059714660367144415,2.1024258136749268 +101503,2,1.4948919167367798,0.8279475694406527,0.7281031568859877,,,,,,,,,,,,,2.1024258136749268 +101701,0,-0.14788871930632877,-0.1952625786238314,-0.5882419354283478,0.8007790647085149,0.6470499178582901,0.7418646801456215,0.4846357856901046,0.6380319786323989,1.5827269944646125,-0.835055314390411,-0.16814274788616518,0.28831555240026907,0.49778314283978853,0.806708965813594,-0.9106055385131593,2.0623013973236084 +101701,1,0.2403361409635047,-0.2732317899567748,0.14609054585137357,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.8122266528381351,2.129575252532959 +101701,2,-0.07938720443544948,-0.10626094735465771,0.008082907292302316,,,,,,,,,,,,,2.129575252532959 +102401,0,0.3039085004797998,-0.1952625786238314,-0.09441789030884316,0.358342850038242,1.149922669419116,0.457405498335207,1.3057140180675306,0.8790872811828919,1.9119435953888306,-0.835055314390411,-0.16814274788616518,1.9685096127017316,1.267782866548965,-0.2910724881500066,0.8737234706124865,2.5585708618164062 +102401,1,0.4325776493852816,0.5285571507320932,0.14609054585137357,,,,,,,,,,0.9503768127628092,0.7456311526478686,1.1944719937511734,2.471315622329712 +102401,2,1.3964994716635155,0.43869402077594005,0.18808796969072364,,,,,,,,,,,,,2.471315622329712 +103002,0,0.19095919553326762,-0.770553208210634,-0.8351539579881,-0.8214870557491524,-1.4901592762752198,-0.6804312289064511,-0.2452115319787184,-0.26592540593194997,-0.3925726110806964,-0.835055314390411,-0.16814274788616518,-0.13173296267509654,-1.0422163045785646,1.9044904197771946,-0.24148216009104212,0.33869513869285583 +103002,1,-0.33638838430182605,-0.80775775041602,-0.8751602554913144,,,,,,,,,,-0.47569662927593015,1.8141914255436393,-1.0630639836617988,1.010522723197937 +103002,2,-0.37456453965524245,-0.33981307655348536,-0.26192468630532967,,,,,,,,,,,,,1.010522723197937 +103003,0,-0.7126352440389895,-0.770553208210634,-0.8351539579881,-0.8214870557491524,-1.4901592762752198,-0.6804312289064511,-0.2452115319787184,-0.26592540593194997,-0.3925726110806964,-0.835055314390411,-0.16814274788616518,-0.13173296267509654,-1.0422163045785646,-0.2910724881500066,-0.4645232862317478,1.0874730348587036 +103003,1,0.33645689517439314,-1.0750207306456427,-1.079410415759852,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.059714660367144415,0.464670866727829 +103003,2,-0.4729569847285068,-1.1183201738829107,-1.0719474670982256,,,,,,,,,,,,,0.464670866727829 +103301,0,-1.7291789885577786,-1.230785711880076,-1.0820659805478523,-0.9689657939725767,-1.867313839945839,-0.9648904107168657,-0.9750588496475414,0.15592137353141286,-1.3802224138533508,-0.23730908679360116,1.4045524206757267,-1.3918785079011935,0.49778314283978853,-0.2910724881500066,-0.4645232862317478,0.8240689635276794 +103301,1,-1.8743204516760412,-2.1440726515641333,-2.10066121710254,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,-0.059714660367144415,0.237135648727417 +103301,2,-3.1295530017066437,-2.597483658808819,-2.601990497484807,,,,,,,,,,,,,0.237135648727417 +103801,0,-0.8255845489855216,-0.8856113341279945,-0.7116979467082238,0.5058215882616662,0.1441771662974643,0.17294631652479245,-0.42767336139592416,-0.38645305720719647,1.4181186940025035,-0.23730908679360116,1.4045524206757267,-2.6520240531272905,0.49778314283978853,-0.2910724881500066,0.20460009219036931,2.389700174331665 +103801,1,-0.14414687588004912,-1.6986343511814288,-1.4879107362969273,,,,,,,,,,0.2373400917434395,0.7456311526478686,-1.0630639836617988,2.3722729682922363 +103801,2,-0.5713494298017712,-1.741125851746451,-1.7019651854927003,,,,,,,,,,,,,2.3722729682922363 +104001,0,-1.0514831588785858,-1.1157275859627156,-0.9586099692679761,1.2432152793787876,0.5213317299680837,0.457405498335207,0.11971212685569313,-0.38645305720719647,0.2658605907677399,-1.432801541987221,-1.3476641243075844,-0.13173296267509654,0.49778314283978853,0.806708965813594,-0.4645232862317478,-0.12789948284626007 +104001,1,-1.201475172199822,-0.80775775041602,-0.46665993495423924,,,,,,,,,,0.9503768127628092,-1.3914893931436731,-0.059714660367144415,0.3457123041152954 +104001,2,-1.0633116551680928,-1.2740215933487957,-0.5319322799029617,,,,,,,,,,,,,0.3457123041152954 +104902,0,1.7722494647847176,1.5306093101365763,2.1277903127289273,1.833130232272485,0.7727681057484966,1.3107830437664505,-0.1539806172701155,0.3367128504442826,0.7596854921540671,-0.23730908679360116,-0.9544903321671111,-0.5517814777504622,0.49778314283978853,0.806708965813594,0.6506823444717807,2.492948293685913 +104902,1,1.8743889625486083,0.4394694906555523,1.2694664273283303,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.059714660367144415,2.52586030960083 +104902,2,0.5109674660041365,0.9057982791735953,-0.08191962390690835,,,,,,,,,,,,,2.52586030960083 +104903,0,2.6758439043569746,1.875783687888658,0.3994061548106614,1.833130232272485,0.7727681057484966,1.3107830437664505,-0.1539806172701155,0.3367128504442826,0.7596854921540671,-0.23730908679360116,-0.9544903321671111,-0.5517814777504622,0.49778314283978853,0.806708965813594,0.6506823444717807,2.492948293685913 +104903,1,1.77826820833772,0.4394694906555523,1.6779667478654055,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.8122266528381351,2.52586030960083 +104903,2,0.9045372462971938,0.282992601310055,0.2780905008899343,,,,,,,,,,,,,2.52586030960083 +105603,0,-1.5032803786647144,-1.000669460045355,-0.8351539579881,-1.4114020086428494,-0.8615683368241874,0.17294631652479245,-0.518904276104527,0.3969766760819059,-0.7217892120049145,-0.835055314390411,-0.16814274788616518,-0.13173296267509654,1.267782866548965,0.806708965813594,0.8737234706124865,1.9461102485656738 +105603,1,-2.1626827143087066,-1.1641083907221836,-0.8751602554913144,,,,,,,,,,1.663413533782179,-0.3229291202479022,1.1944719937511734,1.098388910293579 +105603,2,-0.6697418748750354,-0.6512159154852555,-0.981944935899015,,,,,,,,,,,,,1.098388910293579 +106302,0,-0.5996859390924573,-1.000669460045355,-0.8351539579881,0.5058215882616662,0.6470499178582901,0.457405498335207,-0.7013661055217327,0.3367128504442826,-1.0510058129291326,-0.835055314390411,-0.5613165400266386,-0.13173296267509654,1.267782866548965,-0.2910724881500066,-0.6875644123724536,1.1228485107421875 +106302,1,-0.33638838430182605,-1.3422837108752652,-1.079410415759852,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.310551991190808,1.022963523864746 +106302,2,-0.5713494298017712,-0.4955144960193704,-0.35192721750454037,,,,,,,,,,,,,1.022963523864746 +107002,0,-1.5032803786647144,-0.8856113341279945,-0.5882419354283478,-1.4114020086428494,-0.48441377315356804,-0.6804312289064511,-0.518904276104527,0.15592137353141286,-1.5448307143154598,0.9581833684000187,0.6182048363947807,-0.5517814777504622,-1.812216028287741,0.806708965813594,-0.6875644123724536,0.19280338287353516 +107002,1,-0.04802612166916067,-0.6295824302629383,-0.26240977468570165,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.059714660367144415,1.154919147491455 +107002,2,-1.3584889903878858,-0.4955144960193704,-0.441929748703751,,,,,,,,,,,,,1.154919147491455 +107103,0,-0.37378732919939306,-0.42537883045855246,-0.2178739015887193,-0.9689657939725767,-1.9930320278360456,-0.1115128652856221,-1.6136752526077616,-0.5672445341200663,-1.2156141133912417,-1.432801541987221,-0.5613165400266386,-0.5517814777504622,-1.0422163045785646,-1.388853942113607,-0.6875644123724536,0.9276532530784607 +107103,1,-0.24026763009093757,0.08311885034938876,0.35034070611991114,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.310551991190808,-0.04779261723160744 +107103,2,-0.7681343199482997,-0.33981307655348536,0.368093032089145,,,,,,,,,,,,,-0.04779261723160744 +108003,0,2.1110973796243138,0.14991179912825014,-0.09441789030884316,0.5058215882616662,-0.10725920948294862,0.7418646801456215,0.028481212147090252,0.3367128504442826,1.0889020930782853,-1.432801541987221,-1.740837916448057,-0.13173296267509654,0.49778314283978853,-0.2910724881500066,-1.133646664653865,2.3619370460510254 +108003,1,1.0093021746506123,-0.4514071101098565,0.35034070611991114,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.8122266528381351,1.858985424041748 +108003,2,1.3964994716635155,-0.573365205752313,-0.17192215510611902,,,,,,,,,,,,,1.858985424041748 +108201,0,-1.164432463825118,-0.5404369563759129,-0.7116979467082238,1.390694017602212,0.8984862936387031,-0.3959720470960366,0.4846357856901046,0.2161851991690361,1.5827269944646125,0.36043714080320877,0.22503104425430823,0.7083640674756347,1.267782866548965,0.806708965813594,0.8737234706124865,2.721698760986328 +108201,1,1.6821474541268315,-0.00596880972715211,0.7588410266569864,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.059714660367144415,2.4851884841918945 +108201,2,1.8884616970298371,0.20514189157711243,0.638100625686777,,,,,,,,,,,,,2.4851884841918945 +108701,0,1.207502940052057,-0.42537883045855246,-0.5882419354283478,2.1280877087193333,1.401359045199529,1.3107830437664505,-0.06274970256151263,0.3367128504442826,2.07655189585094,-0.835055314390411,-0.16814274788616518,1.1284125825510003,1.267782866548965,0.806708965813594,-0.24148216009104212,1.9477083683013916 +108701,1,0.14421538675261625,-0.6295824302629383,-0.9772853356255832,,,,,,,,,,1.663413533782179,0.7456311526478686,-0.059714660367144415,2.1183431148529053 +108701,2,-0.07938720443544948,-0.4955144960193704,0.638100625686777,,,,,,,,,,,,,2.1183431148529053 +111102,0,0.19095919553326762,1.3004930583018552,0.3994061548106614,0.6533003264850905,0.2698953541876708,0.7418646801456215,1.0320212739417218,-1.1096189648586756,-0.06335601015647824,-0.835055314390411,0.6182048363947807,-0.13173296267509654,-0.27221658086938805,-0.2910724881500066,-1.133646664653865,2.17103910446167 +111102,1,0.33645689517439314,1.1521707712678793,1.0652162670597927,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.5613893220144716,2.167799234390259 +111102,2,-0.4729569847285068,0.43869402077594005,0.368093032089145,,,,,,,,,,,,,2.167799234390259 +113101,0,-0.2608380242528609,-0.3103207045411919,-0.3413299128685955,-0.23157210285545515,-1.2387229004948068,0.457405498335207,0.3934048709815018,0.3367128504442826,-0.7217892120049145,0.36043714080320877,1.0113786285352542,-0.13173296267509654,0.49778314283978853,-1.388853942113607,-0.6875644123724536,1.771365761756897 +113101,1,-0.8169921553562683,-0.3623194500333156,0.24821562598564237,,,,,,,,,,0.9503768127628092,-1.3914893931436731,-0.310551991190808,1.8207908868789673 +113101,2,-0.4729569847285068,0.04944047211122737,0.9981107504836196,,,,,,,,,,,,,1.8207908868789673 +114102,0,-1.27738176877165,-1.000669460045355,-0.8351539579881,-1.4114020086428494,0.39561354207787724,0.17294631652479245,0.7583285298159133,0.3969766760819059,-1.3802224138533508,0.9581833684000187,0.6182048363947807,0.7083640674756347,0.49778314283978853,0.806708965813594,0.8737234706124865,1.0818039178848267 +114102,1,0.2403361409635047,-0.4514071101098565,0.04396546571710477,,,,,,,,,,0.9503768127628092,1.8141914255436393,3.7028453019878094,2.3035826683044434 +114102,2,0.019005240637814846,0.04944047211122737,-0.17192215510611902,,,,,,,,,,,,,2.3035826683044434 +115801,0,-0.5996859390924573,-0.6554950822932735,-0.5882419354283478,-0.5265295793023037,-0.48441377315356804,-1.2493495925272802,1.3969449327761334,1.3009340606462547,0.10125229030563083,-0.835055314390411,-0.5613165400266386,0.7083640674756347,-0.27221658086938805,-1.388853942113607,-0.6875644123724536,1.438478946685791 +115801,1,0.8170606662288354,-0.7186700903394792,1.371591507462599,,,,,,,,,,0.2373400917434395,0.7456311526478686,0.4419600012801827,1.1561801433563232 +115801,2,-0.4729569847285068,-0.6512159154852555,-0.8019398735005937,,,,,,,,,,,,,1.1561801433563232 +115802,0,2.1110973796243138,0.2649699250456107,0.893230199930166,-0.5265295793023037,-0.48441377315356804,-1.2493495925272802,1.3969449327761334,1.3009340606462547,0.10125229030563083,-0.835055314390411,-0.5613165400266386,0.7083640674756347,-0.27221658086938805,0.806708965813594,-0.24148216009104212,1.1561801433563232 +115802,1,-0.14414687588004912,-0.2732317899567748,-0.9772853356255832,,,,,,,,,,0.2373400917434395,-1.3914893931436731,-0.8122266528381351,2.0192418098449707 +115802,2,-3.818300117219494,-1.1183201738829107,-0.6219348111021723,,,,,,,,,,,,,2.0192418098449707 +116004,0,1.207502940052057,0.7252024287150527,0.3994061548106614,-1.1164445321960008,-0.2329773973731551,-0.3959720470960366,-0.2452115319787184,-0.6275083597576895,0.2658605907677399,-0.835055314390411,-0.16814274788616518,1.548461097626366,1.267782866548965,-0.2910724881500066,0.20460009219036931,-0.6931471824645996 +116004,1,1.1054229288615007,0.4394694906555523,0.7588410266569864,,,,,,,,,,1.663413533782179,-0.3229291202479022,-0.5613893220144716,2.361442804336548 +116004,2,1.4948919167367798,1.6843053765030207,1.0881132816828303,,,,,,,,,,,,,2.361442804336548 +116006,0,0.7557057202659283,0.03485367321088963,0.15249413225090913,-1.1164445321960008,-0.2329773973731551,-0.3959720470960366,-0.2452115319787184,-0.6275083597576895,0.2658605907677399,-0.835055314390411,-0.16814274788616518,1.548461097626366,1.267782866548965,-0.2910724881500066,-0.6875644123724536,1.6495054960250854 +116006,1,-0.14414687588004912,-0.18414412988023388,0.14609054585137357,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.8122266528381351,1.5494349002838135 +116006,2,0.2157901307843435,-0.33981307655348536,0.368093032089145,,,,,,,,,,,,,1.5494349002838135 +116602,0,-1.164432463825118,-1.000669460045355,-0.8351539579881,-0.8214870557491524,0.6470499178582901,0.457405498335207,-0.9750588496475414,-0.4467168828448197,0.430468891229849,0.9581833684000187,1.4045524206757267,0.28831555240026907,-0.27221658086938805,-1.388853942113607,0.20460009219036931,1.6335792541503906 +116602,1,-1.0092336637780452,-1.7877220112579697,-1.9985361369682713,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.059714660367144415,1.638952374458313 +116602,2,-0.27617209458197817,-1.2740215933487957,-1.6119626542934897,,,,,,,,,,,,,1.638952374458313 +117203,0,-0.14788871930632877,-1.000669460045355,-0.8351539579881,0.5058215882616662,1.149922669419116,1.026323861956036,0.5758667003987075,1.120142583733385,0.595077191691958,0.36043714080320877,-0.16814274788616518,-0.5517814777504622,-1.812216028287741,-0.2910724881500066,-0.24148216009104212,1.627432942390442 +117203,1,0.33645689517439314,-0.5404947701863974,0.24821562598564237,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.059714660367144415,2.1145520210266113 +117203,2,0.11739768571107917,-0.41766378628642786,-0.17192215510611902,,,,,,,,,,,,,2.1145520210266113 +118101,0,-0.14788871930632877,0.3800280509629712,-0.3413299128685955,0.8007790647085149,1.0242044815289095,0.7418646801456215,0.11971212685569313,0.2161851991690361,0.10125229030563083,1.5559295959968287,0.6182048363947807,-0.13173296267509654,0.49778314283978853,0.806708965813594,1.7658879751753094,2.306126832962036 +118101,1,0.14421538675261625,0.7067324708851749,0.35034070611991114,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.310551991190808,2.995732307434082 +118101,2,-0.27617209458197817,0.6722461499747677,0.9981107504836196,,,,,,,,,,,,,2.995732307434082 +118401,0,1.6593001598381854,1.3004930583018552,2.745070369128308,1.9806089704959091,1.401359045199529,0.7418646801456215,0.940790359233119,-2.4956869545240106,1.2535103935403944,1.5559295959968287,0.6182048363947807,0.7083640674756347,1.267782866548965,0.806708965813594,0.8737234706124865,2.995732307434082 +118401,1,1.4899059457050545,1.2412584313444202,1.0652162670597927,,,,,,,,,,0.9503768127628092,0.7456311526478686,1.1944719937511734,1.492652416229248 +118401,2,1.4948919167367798,1.6843053765030207,0.45809556328835566,,,,,,,,,,,,,1.492652416229248 +118402,0,0.4168578054263319,0.6101443027976923,0.5228621660905376,1.9806089704959091,1.401359045199529,0.7418646801456215,0.940790359233119,-2.4956869545240106,1.2535103935403944,1.5559295959968287,0.6182048363947807,0.7083640674756347,0.49778314283978853,0.806708965813594,0.8737234706124865,1.492652416229248 +118402,1,1.0093021746506123,1.419433751497502,0.963091186925524,,,,,,,,,,0.2373400917434395,0.7456311526478686,2.4486586478694914,2.7123889923095703 +118402,2,1.4948919167367798,1.0614996986394805,0.18808796969072364,,,,,,,,,,,,,2.7123889923095703 +118701,0,0.3039085004797998,2.3360161915581,1.6339662676094229,1.390694017602212,1.149922669419116,1.026323861956036,-0.518904276104527,-0.26592540593194997,1.7473352949267216,-0.835055314390411,1.0113786285352542,1.1284125825510003,0.49778314283978853,0.806708965813594,-0.018441033950336395,1.9890892505645752 +118701,1,2.0666304709703853,1.330346091420961,0.24821562598564237,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.059714660367144415,1.4465408325195312 +118701,2,1.7900692519565728,1.7621560862359633,1.718131000077305,,,,,,,,,,,,,1.4465408325195312 +118702,0,0.9816043301589925,0.03485367321088963,0.5228621660905376,1.390694017602212,1.149922669419116,1.026323861956036,-0.518904276104527,-0.26592540593194997,1.7473352949267216,-0.835055314390411,1.0113786285352542,1.1284125825510003,0.49778314283978853,-0.2910724881500066,0.8737234706124865,1.6683763265609741 +118702,1,0.6248191578070585,0.4394694906555523,0.5545908663884488,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.059714660367144415,2.0785746574401855 +118702,2,0.7077523561506651,0.8279475694406527,0.45809556328835566,,,,,,,,,,,,,2.0785746574401855 +118703,0,-0.48673663414592516,0.2649699250456107,-0.4647859241484716,1.390694017602212,1.149922669419116,1.026323861956036,-0.518904276104527,-0.26592540593194997,1.7473352949267216,-0.835055314390411,1.0113786285352542,1.1284125825510003,0.49778314283978853,0.806708965813594,-0.24148216009104212,2.0785746574401855 +118703,1,0.8170606662288354,-0.00596880972715211,-0.568785015088508,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,3.7028453019878094,2.2474722862243652 +118703,2,0.2157901307843435,0.43869402077594005,0.8181056880851983,,,,,,,,,,,,,2.2474722862243652 +120903,0,-0.2608380242528609,0.03485367321088963,0.3994061548106614,-0.9689657939725767,-1.3644410883850133,-0.9648904107168657,-1.8873679967335701,-1.1698827904962987,-1.2156141133912417,1.5559295959968287,0.22503104425430823,1.9685096127017316,0.49778314283978853,0.806708965813594,-0.018441033950336395,1.824009656906128 +120903,1,0.2403361409635047,-0.2732317899567748,-0.568785015088508,,,,,,,,,,0.9503768127628092,0.7456311526478686,0.6927973321038463,1.6037263870239258 +120903,2,0.5109674660041365,-0.573365205752313,-0.17192215510611902,,,,,,,,,,,,,1.6037263870239258 +121603,0,-0.8255845489855216,0.6101443027976923,1.2635982337697944,-0.9689657939725767,-1.3644410883850133,-0.9648904107168657,-1.0662897643561442,-1.5917295699596616,-0.8863975124670236,-0.23730908679360116,-1.3476641243075844,-0.5517814777504622,-1.812216028287741,-1.388853942113607,-0.6875644123724536,0.8859505653381348 +121603,1,0.2403361409635047,0.7067324708851749,0.24821562598564237,,,,,,,,,,0.2373400917434395,-1.3914893931436731,-0.8122266528381351,0.7983524799346924 +121603,2,-0.6697418748750354,0.20514189157711243,-0.35192721750454037,,,,,,,,,,,,,0.7983524799346924 +122103,0,-0.5996859390924573,-0.770553208210634,-0.7116979467082238,-1.8538382233131223,-2.4959047793968714,-1.8182679561481092,-2.1610607408593787,-1.3506742674091685,-1.3802224138533508,0.36043714080320877,-2.920359292869476,-2.2319755380519246,1.267782866548965,1.9044904197771946,-0.9106055385131593,0.8185967803001404 +122103,1,-0.7208714011453798,-1.7877220112579697,-1.8964110568340025,,,,,,,,,,1.663413533782179,1.8141914255436393,-0.5613893220144716,0.802704393863678 +122103,2,-0.8665267650215641,-1.8968272712123362,-2.151977841488754,,,,,,,,,,,,,0.802704393863678 +122403,0,-0.5996859390924573,-0.42537883045855246,-0.5882419354283478,-0.5265295793023037,-0.6101319610437744,-0.1115128652856221,-1.5224443378991586,-1.712257221234908,-1.0510058129291326,1.5559295959968287,-0.5613165400266386,0.7083640674756347,-0.27221658086938805,-1.388853942113607,-0.6875644123724536,1.014155626296997 +122403,1,-0.33638838430182605,-1.2531960507987243,-1.079410415759852,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.5613893220144716,1.1704227924346924 +122403,2,-0.27617209458197817,-1.429723012814681,-0.8919424046998043,,,,,,,,,,,,,1.1704227924346924 +123101,0,1.207502940052057,1.5306093101365763,1.8808782901691752,0.358342850038242,1.0242044815289095,1.026323861956036,0.028481212147090252,-0.024870103381456905,1.4181186940025035,-0.835055314390411,-0.16814274788616518,0.7083640674756347,0.49778314283978853,1.9044904197771946,0.8737234706124865,2.7062835693359375 +123101,1,0.9131814204397238,1.7757843918036655,1.7800918279996742,,,,,,,,,,-1.9017700713146695,1.8141914255436393,-0.059714660367144415,2.4643607139587402 +123101,2,2.18363903224963,0.7500968597077102,1.718131000077305,,,,,,,,,,,,,2.4643607139587402 +123102,0,0.8686550252124604,-0.1952625786238314,0.5228621660905376,0.358342850038242,1.0242044815289095,1.026323861956036,0.028481212147090252,-0.024870103381456905,1.4181186940025035,-0.835055314390411,-0.16814274788616518,0.7083640674756347,1.267782866548965,1.9044904197771946,-0.24148216009104212,2.4643607139587402 +123102,1,2.1627512251812737,-0.5404947701863974,-0.26240977468570165,,,,,,,,,,1.663413533782179,0.7456311526478686,-0.310551991190808,2.741000175476074 +123102,2,0.6093599110774008,0.5165447305088826,1.3581208752804623,,,,,,,,,,,,,2.741000175476074 +123302,0,-1.164432463825118,-1.1157275859627156,-0.9586099692679761,-0.5265295793023037,0.6470499178582901,0.457405498335207,-0.7925970202303356,-1.712257221234908,-0.5571809115428055,1.5559295959968287,0.22503104425430823,1.1284125825510003,-0.27221658086938805,0.806708965813594,0.42764121833107505,2.0460681915283203 +123302,1,-1.585958189043376,-1.6986343511814288,-1.6921608965654649,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.5613893220144716,1.7378649711608887 +123302,2,-0.9649192100948284,-0.18411165708760024,-0.6219348111021723,,,,,,,,,,,,,1.7378649711608887 +123603,0,1.320452244998589,1.4155511842192159,0.7697741886502898,-0.37905084107887943,-1.2387229004948068,0.17294631652479245,1.2144831033589276,0.9996149324581385,0.10125229030563083,0.9581833684000187,0.6182048363947807,0.7083640674756347,1.267782866548965,-0.2910724881500066,-0.24148216009104212,1.4369440078735352 +123603,1,0.4325776493852816,1.6866967317271246,0.8609661067912552,,,,,,,,,,-1.1887333502953,-0.3229291202479022,0.4419600012801827,1.5297653675079346 +123603,2,0.9045372462971938,0.5943954402418251,0.2780905008899343,,,,,,,,,,,,,1.5297653675079346 +123803,0,0.07800989058673549,0.2649699250456107,-0.09441789030884316,0.6533003264850905,1.2756408573093225,0.17294631652479245,-0.518904276104527,-0.4467168828448197,0.10125229030563083,-0.835055314390411,-0.5613165400266386,1.548461097626366,-1.812216028287741,0.806708965813594,0.6506823444717807,1.4444228410720825 +123803,1,-0.4325091385127145,-0.6295824302629383,-0.8751602554913144,,,,,,,,,,-1.1887333502953,-0.3229291202479022,1.1944719937511734,1.2991278171539307 +123803,2,-0.07938720443544948,-0.10626094735465771,-0.17192215510611902,,,,,,,,,,,,,1.2991278171539307 +123805,0,-0.9385338539320537,-1.000669460045355,-0.8351539579881,0.6533003264850905,1.2756408573093225,0.17294631652479245,-0.518904276104527,-0.4467168828448197,0.10125229030563083,-0.835055314390411,-0.5613165400266386,1.548461097626366,-0.27221658086938805,0.806708965813594,0.20460009219036931,1.051041841506958 +123805,1,-1.585958189043376,-1.431371370951806,-1.590035816431196,,,,,,,,,,-1.1887333502953,-0.3229291202479022,0.4419600012801827,1.7644270658493042 +123805,2,-0.27617209458197817,-1.040469464149968,0.45809556328835566,,,,,,,,,,,,,1.7644270658493042 +124104,0,-1.164432463825118,-0.770553208210634,-0.7116979467082238,-0.9689657939725767,-1.615877464165426,-1.5338087743376947,-1.339982508481953,-2.0135763494230243,-1.0510058129291326,0.36043714080320877,-1.3476641243075844,-0.13173296267509654,0.49778314283978853,-0.2910724881500066,-0.6875644123724536,-0.10102174431085587 +124104,1,-0.9131129095671567,-1.2531960507987243,-1.7942859766997337,,,,,,,,,,0.9503768127628092,1.8141914255436393,-0.8122266528381351,0.029514562338590622 +124104,2,-0.37456453965524245,-1.5075737225476233,-1.521960123094279,,,,,,,,,,,,,0.029514562338590622 +124201,0,-1.0514831588785858,0.6101443027976923,-0.2178739015887193,-0.8214870557491524,-1.3644410883850133,-1.5338087743376947,0.4846357856901046,-1.4712019186844152,-0.8863975124670236,0.36043714080320877,-0.16814274788616518,-0.5517814777504622,0.49778314283978853,1.9044904197771946,-0.4645232862317478,1.270140528678894 +124201,1,-0.528629892723603,0.3503818305790114,-0.8751602554913144,,,,,,,,,,0.9503768127628092,1.8141914255436393,-0.8122266528381351,0.6282013654708862 +124201,2,-0.4729569847285068,0.04944047211122737,-0.26192468630532967,,,,,,,,,,,,,0.6282013654708862 +124402,0,-1.27738176877165,-0.5404369563759129,-0.2178739015887193,-0.8214870557491524,-1.3644410883850133,-1.8182679561481092,-1.6136752526077616,-0.38645305720719647,-1.2156141133912417,-2.628293997180841,-1.3476641243075844,-1.8119270229765592,-1.0422163045785646,-0.2910724881500066,0.20460009219036931,0.4817827343940735 +124402,1,-1.1053544179889336,-0.4514071101098565,0.04396546571710477,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.8122266528381351,0.826286256313324 +124402,2,-0.8665267650215641,-0.41766378628642786,-0.441929748703751,,,,,,,,,,,,,0.826286256313324 +124602,0,-1.3903310737181822,-1.000669460045355,-0.8351539579881,-0.37905084107887943,-0.10725920948294862,0.7418646801456215,0.210943041564296,-0.20566158029432668,-0.3925726110806964,-0.835055314390411,-0.16814274788616518,-0.13173296267509654,-1.0422163045785646,-1.388853942113607,-0.4645232862317478,1.2448941469192505 +124602,1,-0.4325091385127145,-0.9859330705691017,-1.3857856561626585,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.8122266528381351,0.7013409733772278 +124602,2,1.3964994716635155,-0.2619623668205428,0.18808796969072364,,,,,,,,,,,,,0.7013409733772278 +125003,0,-0.03493941435979663,0.8402605546324132,0.029038120971032973,-0.08409336463203088,0.39561354207787724,0.457405498335207,-0.61013519081313,-1.8930486981477779,0.2658605907677399,1.5559295959968287,0.22503104425430823,1.548461097626366,-1.812216028287741,-0.2910724881500066,-0.24148216009104212,2.2894675731658936 +125003,1,0.52869840359617,-0.18414412988023388,-0.36453485481997044,,,,,,,,,,-1.1887333502953,0.7456311526478686,-1.0630639836617988,2.530747890472412 +125003,2,0.5109674660041365,0.5165447305088826,0.368093032089145,,,,,,,,,,,,,2.530747890472412 +125101,0,0.07800989058673549,-0.8856113341279945,-0.8351539579881,-0.674008317525728,-0.10725920948294862,0.457405498335207,0.3934048709815018,0.15592137353141286,-0.5571809115428055,-0.835055314390411,-1.3476641243075844,-1.3918785079011935,-1.812216028287741,-0.2910724881500066,-0.9106055385131593,1.802241325378418 +125101,1,-1.2975959264107106,-1.3422837108752652,-0.568785015088508,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,0.4419600012801827,1.6807416677474976 +125101,2,-0.4729569847285068,-0.18411165708760024,-0.5319322799029617,,,,,,,,,,,,,1.6807416677474976 +125801,0,1.207502940052057,-0.08020445270647089,1.5105102563295467,1.5381727558256364,0.7727681057484966,0.17294631652479245,1.3057140180675306,0.9393511068205153,1.0889020930782853,1.5559295959968287,1.4045524206757267,0.7083640674756347,0.49778314283978853,-1.388853942113607,-0.6875644123724536,2.090804100036621 +125801,1,1.1054229288615007,0.8849077910382567,0.8609661067912552,,,,,,,,,,0.2373400917434395,0.7456311526478686,-1.0630639836617988,1.619914174079895 +125801,2,1.298107026590251,0.5165447305088826,1.718131000077305,,,,,,,,,,,,,1.619914174079895 +125802,0,1.320452244998589,1.9908418138060184,2.4981583465685557,1.5381727558256364,0.7727681057484966,0.17294631652479245,1.3057140180675306,0.9393511068205153,1.0889020930782853,1.5559295959968287,1.4045524206757267,0.7083640674756347,-0.27221658086938805,-0.2910724881500066,-1.133646664653865,1.619914174079895 +125802,1,1.3937851914941661,0.4394694906555523,1.371591507462599,,,,,,,,,,0.2373400917434395,-0.3229291202479022,0.4419600012801827,2.2503535747528076 +125802,2,0.31418257585760784,0.5943954402418251,0.18808796969072364,,,,,,,,,,,,,2.2503535747528076 +126101,0,0.19095919553326762,-0.42537883045855246,0.029038120971032973,0.8007790647085149,0.7727681057484966,1.026323861956036,1.4881758474847362,1.120142583733385,1.4181186940025035,1.5559295959968287,1.4045524206757267,1.9685096127017316,1.267782866548965,0.806708965813594,-0.24148216009104212,2.1642074584960938 +126101,1,0.048094632541727786,-0.18414412988023388,0.14609054585137357,,,,,,,,,,1.663413533782179,-0.3229291202479022,-0.059714660367144415,1.449941873550415 +126101,2,-0.27617209458197817,-0.729066625218198,0.18808796969072364,,,,,,,,,,,,,1.449941873550415 +126301,0,-0.7126352440389895,-0.5404369563759129,-0.4647859241484716,0.5058215882616662,1.0242044815289095,0.7418646801456215,-0.7925970202303356,0.5777681529947757,0.9242937926161762,0.9581833684000187,0.6182048363947807,1.1284125825510003,1.267782866548965,0.806708965813594,0.42764121833107505,1.8870034217834473 +126301,1,-0.9131129095671567,-1.3422837108752652,-1.2836605760283897,,,,,,,,,,1.663413533782179,-0.3229291202479022,3.7028453019878094,1.824009656906128 +126301,2,-0.7681343199482997,-1.3518723030817383,-0.26192468630532967,,,,,,,,,,,,,1.824009656906128 +128602,0,-0.14788871930632877,-0.770553208210634,-0.7116979467082238,-1.2639232704194252,-0.2329773973731551,-1.5338087743376947,-1.339982508481953,0.035393722256166354,-1.8740473152396782,-0.835055314390411,-1.740837916448057,-0.13173296267509654,1.267782866548965,-0.2910724881500066,-0.6875644123724536,1.4025218486785889 +128602,1,-0.6247506469344914,-0.4514071101098565,-1.1815354958941209,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.310551991190808,1.45352041721344 +128602,2,-0.5713494298017712,-0.41766378628642786,-0.441929748703751,,,,,,,,,,,,,1.45352041721344 +129002,0,-0.5996859390924573,0.8402605546324132,0.5228621660905376,-0.37905084107887943,0.2698953541876708,0.7418646801456215,-0.61013519081313,-1.1698827904962987,0.10125229030563083,0.9581833684000187,-0.16814274788616518,0.7083640674756347,-0.27221658086938805,-0.2910724881500066,-0.4645232862317478,0.5571691393852234 +129002,1,0.2403361409635047,-0.00596880972715211,0.04396546571710477,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.5613893220144716,0.30004340410232544 +129002,2,-0.27617209458197817,-0.33981307655348536,-0.6219348111021723,,,,,,,,,,,,,0.30004340410232544 +129601,0,-0.14788871930632877,-0.3103207045411919,-0.3413299128685955,-0.9689657939725767,-0.6101319610437744,0.7418646801456215,1.4881758474847362,0.7585596299076455,-0.06335601015647824,-0.835055314390411,-0.16814274788616518,-0.5517814777504622,-0.27221658086938805,-1.388853942113607,-1.133646664653865,0.8586603403091431 +129601,1,0.14421538675261625,-0.896845410492561,-1.079410415759852,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-0.5613893220144716,0.9936612844467163 +129601,2,-0.7681343199482997,-0.729066625218198,-0.5319322799029617,,,,,,,,,,,,,0.9936612844467163 +130604,0,0.4168578054263319,1.1854349323844948,1.5105102563295467,0.06338537359139342,0.018458978407257843,0.17294631652479245,-0.33644244668732126,-0.08513392901908017,0.10125229030563083,0.9581833684000187,1.4045524206757267,-1.3918785079011935,0.49778314283978853,-0.2910724881500066,0.8737234706124865,1.9863250255584717 +130604,1,1.0093021746506123,1.5085214115740428,-0.36453485481997044,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.5613893220144716,1.8397740125656128 +130604,2,1.593284361810044,0.9836489889065378,-0.17192215510611902,,,,,,,,,,,,,1.8397740125656128 +132404,0,0.19095919553326762,1.645667436053937,2.621614357848432,-0.674008317525728,-0.10725920948294862,-0.6804312289064511,0.6670976151073104,-0.14539775465670343,-0.22796431061858732,0.9581833684000187,-0.16814274788616518,0.28831555240026907,1.267782866548965,0.806708965813594,0.8737234706124865,2.160510778427124 +132404,1,0.048094632541727786,1.7757843918036655,0.8609661067912552,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.8122266528381351,2.077674627304077 +132404,2,0.9045372462971938,1.3729025375712505,1.178115812882041,,,,,,,,,,,,,2.077674627304077 +132405,0,-1.164432463825118,-0.08020445270647089,0.029038120971032973,-0.674008317525728,-0.10725920948294862,-0.6804312289064511,0.6670976151073104,-0.14539775465670343,-0.22796431061858732,0.9581833684000187,-0.16814274788616518,0.28831555240026907,1.267782866548965,-0.2910724881500066,0.20460009219036931,2.4024853706359863 +132405,1,0.52869840359617,0.7958201309617158,0.24821562598564237,,,,,,,,,,0.9503768127628092,-0.3229291202479022,0.4419600012801827,2.1300911903381348 +132405,2,-0.6697418748750354,0.5165447305088826,0.09808543849151298,,,,,,,,,,,,,2.1300911903381348 +132701,0,0.6427564153193962,1.5306093101365763,1.3870542450496706,0.06338537359139342,1.0242044815289095,0.457405498335207,0.5758667003987075,1.120142583733385,0.10125229030563083,-0.835055314390411,-0.9544903321671111,1.1284125825510003,-1.0422163045785646,0.806708965813594,-0.4645232862317478,1.1718566417694092 +132701,1,0.6248191578070585,1.1521707712678793,0.04396546571710477,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.5613893220144716,1.2935713529586792 +132701,2,0.6093599110774008,1.2172011181053655,0.09808543849151298,,,,,,,,,,,,,1.2935713529586792 +135202,0,-0.37378732919939306,-0.1952625786238314,0.15249413225090913,-0.9689657939725767,1.2756408573093225,0.457405498335207,-0.518904276104527,-0.14539775465670343,-0.3925726110806964,-0.835055314390411,-0.5613165400266386,1.1284125825510003,0.49778314283978853,0.806708965813594,3.104134732019544,1.69688081741333 +135202,1,0.048094632541727786,0.17220651042592966,-0.568785015088508,,,,,,,,,,-1.1887333502953,0.7456311526478686,-0.8122266528381351,1.839806318283081 +135202,2,0.41257502093087217,0.5943954402418251,0.2780905008899343,,,,,,,,,,,,,1.839806318283081 +135203,0,0.6427564153193962,0.3800280509629712,0.3994061548106614,-0.9689657939725767,1.2756408573093225,0.457405498335207,-0.518904276104527,-0.14539775465670343,-0.3925726110806964,-0.835055314390411,-0.5613165400266386,1.1284125825510003,-0.27221658086938805,0.806708965813594,0.6506823444717807,1.8251008987426758 +135203,1,0.6248191578070585,0.6176448108086341,0.35034070611991114,,,,,,,,,,-0.47569662927593015,0.7456311526478686,1.1944719937511734,1.7980340719223022 +135203,2,1.3964994716635155,0.5943954402418251,-0.17192215510611902,,,,,,,,,,,,,1.7980340719223022 +136201,0,1.6593001598381854,1.7607255619712974,1.5105102563295467,1.9806089704959091,1.2756408573093225,1.026323861956036,1.3057140180675306,0.8188234555452687,2.07655189585094,0.36043714080320877,0.6182048363947807,-0.5517814777504622,0.49778314283978853,-1.388853942113607,0.20460009219036931,2.211974620819092 +136201,1,1.2976644372832777,2.132135032109829,1.2694664273283303,,,,,,,,,,0.9503768127628092,-0.3229291202479022,0.4419600012801827,2.2083611488342285 +136201,2,1.593284361810044,1.9178575057018483,0.9981107504836196,,,,,,,,,,,,,2.2083611488342285 +138902,0,0.6427564153193962,-0.08020445270647089,0.15249413225090913,-0.5265295793023037,0.1441771662974643,-0.1115128652856221,-1.339982508481953,-1.712257221234908,0.430468891229849,0.9581833684000187,1.4045524206757267,-0.13173296267509654,-1.0422163045785646,-1.388853942113607,-0.9106055385131593,1.7960983514785767 +138902,1,-0.24026763009093757,2.132135032109829,-0.26240977468570165,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.8122266528381351,2.0807852745056152 +138902,2,-0.4729569847285068,0.5943954402418251,0.18808796969072364,,,,,,,,,,,,,2.0807852745056152 +139901,0,-0.2608380242528609,-0.5404369563759129,-0.09441789030884316,0.6533003264850905,0.7727681057484966,1.026323861956036,1.3057140180675306,1.120142583733385,0.430468891229849,-0.835055314390411,-0.9544903321671111,-0.13173296267509654,-1.812216028287741,-0.2910724881500066,-0.4645232862317478,2.0522682666778564 +139901,1,0.14421538675261625,0.5285571507320932,0.14609054585137357,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.8122266528381351,2.26688289642334 +139901,2,-0.07938720443544948,-0.41766378628642786,-0.441929748703751,,,,,,,,,,,,,2.26688289642334 +140107,0,-1.6162296836112464,-1.1157275859627156,-0.9586099692679761,-0.37905084107887943,-0.48441377315356804,0.17294631652479245,-0.518904276104527,-0.14539775465670343,-0.7217892120049145,-0.835055314390411,-1.3476641243075844,-0.5517814777504622,-0.27221658086938805,-1.388853942113607,0.8737234706124865,0.2869720458984375 +140107,1,-1.393716680621599,-0.896845410492561,-0.16028469455143282,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,1.1944719937511734,0.5687434673309326 +140107,2,-0.6697418748750354,1.2172011181053655,-0.981944935899015,,,,,,,,,,,,,0.5687434673309326 +140901,0,-0.5996859390924573,0.3800280509629712,0.15249413225090913,-1.4114020086428494,0.2698953541876708,0.7418646801456215,-0.33644244668732126,-0.024870103381456905,-0.8863975124670236,0.9581833684000187,-1.3476641243075844,-0.5517814777504622,-2.5822157519969178,-0.2910724881500066,-0.9106055385131593,0.7815454006195068 +140901,1,0.6248191578070585,0.7958201309617158,0.7588410266569864,,,,,,,,,,1.663413533782179,-0.3229291202479022,0.19112267045651915,1.310645580291748 +140901,2,0.6093599110774008,0.36084331104299755,0.908108219284409,,,,,,,,,,,,,1.310645580291748 +141404,0,1.5463508548916531,-0.5404369563759129,-0.4647859241484716,-0.8214870557491524,-1.867313839945839,-0.9648904107168657,-2.2522916555679817,-0.20566158029432668,-1.0510058129291326,-0.23730908679360116,-2.13401170858853,-2.2319755380519246,-0.27221658086938805,1.9044904197771946,-0.4645232862317478,2.489370346069336 +141404,1,-0.14414687588004912,-0.80775775041602,0.7588410266569864,,,,,,,,,,0.2373400917434395,0.7456311526478686,3.2011706403404823,2.7082395553588867 +141404,2,-0.7681343199482997,-0.6512159154852555,-0.26192468630532967,,,,,,,,,,,,,2.7082395553588867 +141503,0,-1.3903310737181822,-1.230785711880076,-1.0820659805478523,-0.9689657939725767,-1.615877464165426,-1.5338087743376947,-1.339982508481953,-0.748036011032936,-1.2156141133912417,-0.23730908679360116,-0.9544903321671111,-1.3918785079011935,-1.0422163045785646,-0.2910724881500066,-0.24148216009104212,-0.4976807236671448 +141503,1,-2.0665619600978182,-1.1641083907221836,-1.3857856561626585,,,,,,,,,,0.9503768127628092,-0.3229291202479022,0.4419600012801827,0.5752089619636536 +141503,2,-1.0633116551680928,-1.6632751420135086,-1.7019651854927003,,,,,,,,,,,,,0.5752089619636536 +141602,0,-0.2608380242528609,-0.3103207045411919,-0.2178739015887193,-0.8214870557491524,-1.3644410883850133,0.17294631652479245,-0.61013519081313,-0.024870103381456905,-0.7217892120049145,-0.835055314390411,-0.5613165400266386,0.7083640674756347,1.267782866548965,-0.2910724881500066,0.20460009219036931,0.5635619759559631 +141602,1,1.1054229288615007,-0.00596880972715211,0.7588410266569864,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.059714660367144415,-0.6931471824645996 +141602,2,0.11739768571107917,-0.6512159154852555,0.18808796969072364,,,,,,,,,,,,,-0.6931471824645996 +142303,0,0.7557057202659283,1.5306093101365763,0.3994061548106614,0.2108641118148177,1.0242044815289095,0.7418646801456215,0.4846357856901046,0.09565754789378961,0.10125229030563083,-0.835055314390411,-0.16814274788616518,1.548461097626366,1.267782866548965,-1.388853942113607,0.20460009219036931,2.0065417289733887 +142303,1,1.4899059457050545,1.419433751497502,2.392842308805287,,,,,,,,,,-1.1887333502953,-0.3229291202479022,0.4419600012801827,1.8687939643859863 +142303,2,1.1013221364437225,1.1393504083724229,1.8081335312765157,,,,,,,,,,,,,1.8687939643859863 +142304,0,2.44994529446391,0.2649699250456107,2.1277903127289273,0.2108641118148177,1.0242044815289095,0.7418646801456215,0.4846357856901046,0.09565754789378961,0.10125229030563083,-0.835055314390411,-0.16814274788616518,1.548461097626366,-0.27221658086938805,-0.2910724881500066,0.20460009219036931,1.8687939643859863 +142304,1,0.4325776493852816,1.0630831111913384,0.5545908663884488,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.059714660367144415,1.7430180311203003 +142304,2,-0.37456453965524245,0.20514189157711243,0.638100625686777,,,,,,,,,,,,,1.7430180311203003 +142305,0,0.9816043301589925,-0.42537883045855246,0.5228621660905376,0.2108641118148177,1.0242044815289095,0.7418646801456215,0.4846357856901046,0.09565754789378961,0.10125229030563083,-0.835055314390411,-0.16814274788616518,1.548461097626366,0.49778314283978853,-0.2910724881500066,-0.24148216009104212,1.0508196353912354 +142305,1,0.4325776493852816,0.3503818305790114,1.2694664273283303,,,,,,,,,,0.9503768127628092,-0.3229291202479022,1.1944719937511734,1.8567229509353638 +142305,2,-0.37456453965524245,0.5165447305088826,1.2681183440812516,,,,,,,,,,,,,1.8567229509353638 +143601,0,-0.7126352440389895,-1.000669460045355,-0.8351539579881,-0.9689657939725767,-1.7415956520556326,-1.5338087743376947,-1.7961370820249674,-2.134104000698271,-0.7217892120049145,-0.835055314390411,-0.5613165400266386,0.28831555240026907,-0.27221658086938805,-1.388853942113607,0.20460009219036931,-0.02262800745666027 +143601,1,-1.9704412058869298,-2.054984991487592,-1.9985361369682713,,,,,,,,,,0.2373400917434395,-1.3914893931436731,-0.059714660367144415,-0.4602424204349518 +143601,2,-2.932768111560115,-2.0525286906782214,-1.7019651854927003,,,,,,,,,,,,,-0.4602424204349518 +143603,0,-1.164432463825118,-1.230785711880076,-1.0820659805478523,-0.9689657939725767,-1.7415956520556326,-1.5338087743376947,-1.7961370820249674,-2.134104000698271,-0.7217892120049145,-0.835055314390411,-0.5613165400266386,0.28831555240026907,-0.27221658086938805,-1.388853942113607,-1.133646664653865,0.40815433859825134 +143603,1,-1.9704412058869298,-1.431371370951806,-1.1815354958941209,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.8122266528381351,0.37023109197616577 +143603,2,-0.9649192100948284,-1.3518723030817383,-1.0719474670982256,,,,,,,,,,,,,0.37023109197616577 +143701,0,-0.37378732919939306,-0.1952625786238314,-0.09441789030884316,-1.5588807468662738,-0.2329773973731551,-1.8182679561481092,-0.9750588496475414,-0.989091313583429,-1.3802224138533508,1.5559295959968287,1.4045524206757267,0.7083640674756347,-1.812216028287741,-0.2910724881500066,0.8737234706124865,0.24148297309875488 +143701,1,-0.04802612166916067,-0.00596880972715211,-0.6709100952227768,,,,,,,,,,-0.47569662927593015,0.7456311526478686,1.1944719937511734,-0.10143303126096725 +143701,2,-0.07938720443544948,-0.10626094735465771,-1.521960123094279,,,,,,,,,,,,,-0.10143303126096725 +143702,0,-1.6162296836112464,-0.770553208210634,-0.8351539579881,-1.5588807468662738,-0.2329773973731551,-1.8182679561481092,-0.9750588496475414,-0.989091313583429,-1.3802224138533508,1.5559295959968287,1.4045524206757267,0.7083640674756347,-1.0422163045785646,-0.2910724881500066,0.8737234706124865,-0.10143303126096725 +143702,1,-1.9704412058869298,-1.609546691104888,-1.4879107362969273,,,,,,,,,,-0.47569662927593015,0.7456311526478686,1.1944719937511734,0.310580849647522 +143702,2,-1.2600965453146213,-1.2740215933487957,-1.251952529496647,,,,,,,,,,,,,0.310580849647522 +144002,0,0.9816043301589925,-0.3103207045411919,-0.4647859241484716,-1.1164445321960008,-1.1130047126046003,-0.9648904107168657,-1.4312134231905558,-1.0493551392210523,-0.8863975124670236,0.9581833684000187,1.0113786285352542,-0.5517814777504622,1.267782866548965,-0.2910724881500066,0.20460009219036931,0.9307687282562256 +144002,1,0.2403361409635047,-0.00596880972715211,0.45246578625417994,,,,,,,,,,1.663413533782179,1.8141914255436393,-0.5613893220144716,0.6179527044296265 +144002,2,-0.27617209458197817,-0.028410237621715174,0.8181056880851983,,,,,,,,,,,,,0.6179527044296265 +144202,0,-0.03493941435979663,-0.770553208210634,-0.7116979467082238,-1.4114020086428494,-1.3644410883850133,-0.9648904107168657,-1.1575206790647472,-0.5672445341200663,-0.5571809115428055,-1.432801541987221,-0.5613165400266386,0.7083640674756347,-0.27221658086938805,0.806708965813594,-0.018441033950336395,1.9301546812057495 +144202,1,-2.5471657311522606,-1.1641083907221836,-1.4879107362969273,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.8122266528381351,1.964345932006836 +144202,2,-0.6697418748750354,-1.1183201738829107,-0.8919424046998043,,,,,,,,,,,,,1.964345932006836 +144301,0,1.4334015499451211,1.4155511842192159,0.5228621660905376,1.5381727558256364,1.149922669419116,1.026323861956036,1.1232521886503248,-0.024870103381456905,1.9119435953888306,-0.23730908679360116,-1.740837916448057,-0.5517814777504622,1.267782866548965,-0.2910724881500066,1.9889291013160153,1.5996063947677612 +144301,1,0.2403361409635047,1.1521707712678793,0.5545908663884488,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,0.4419600012801827,1.6301895380020142 +144301,2,1.1997145815169867,1.0614996986394805,1.178115812882041,,,,,,,,,,,,,1.6301895380020142 +147401,0,0.07800989058673549,0.03485367321088963,0.6463181773704137,0.358342850038242,1.149922669419116,1.3107830437664505,1.4881758474847362,1.0598787580957618,-0.06335601015647824,1.5559295959968287,1.7977262128162,1.548461097626366,1.267782866548965,-0.2910724881500066,0.20460009219036931,2.028951644897461 +147401,1,-0.33638838430182605,0.17220651042592966,0.45246578625417994,,,,,,,,,,0.9503768127628092,-0.3229291202479022,2.4486586478694914,1.656307578086853 +147401,2,0.11739768571107917,0.7500968597077102,0.908108219284409,,,,,,,,,,,,,1.656307578086853 +149102,0,0.3039085004797998,-0.6554950822932735,-0.2178739015887193,-0.9689657939725767,-0.7358501489339809,-0.6804312289064511,-1.0662897643561442,-0.5069807084824429,-0.7217892120049145,0.36043714080320877,-0.5613165400266386,-0.13173296267509654,-1.812216028287741,0.806708965813594,-1.3566877907945707,0.4297013282775879 +149102,1,-0.4325091385127145,-1.431371370951806,-1.4879107362969273,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.8122266528381351,1.0046143531799316 +149102,2,-0.07938720443544948,-1.1183201738829107,-1.1619499982974364,,,,,,,,,,,,,1.0046143531799316 +149901,0,0.7557057202659283,0.8402605546324132,0.3994061548106614,0.06338537359139342,0.39561354207787724,1.3107830437664505,1.2144831033589276,1.4214617119215014,0.10125229030563083,0.36043714080320877,0.6182048363947807,1.9685096127017316,1.267782866548965,-0.2910724881500066,0.6506823444717807,1.4157878160476685 +149901,1,-0.528629892723603,0.17220651042592966,0.6567159465227176,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,-0.059714660367144415,1.275018334388733 +149901,2,-0.27617209458197817,-0.028410237621715174,-0.5319322799029617,,,,,,,,,,,,,1.275018334388733 +151902,0,-1.164432463825118,-1.1157275859627156,-0.9586099692679761,-0.08409336463203088,0.1441771662974643,1.026323861956036,-1.7049061673163644,-1.8930486981477779,-0.3925726110806964,0.9581833684000187,-1.3476641243075844,-0.13173296267509654,1.267782866548965,1.9044904197771946,0.8737234706124865,1.8266615867614746 +151902,1,-1.4898374348324874,-1.431371370951806,-1.7942859766997337,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.5613893220144716,-0.6931471824645996 +151902,2,-0.7681343199482997,-1.2740215933487957,-0.441929748703751,,,,,,,,,,,,,-0.6931471824645996 +152403,0,-0.7126352440389895,-0.6554950822932735,-0.8351539579881,-1.2639232704194252,-1.867313839945839,-2.3871863197689382,-1.5224443378991586,-2.6764784314368804,-0.8863975124670236,-0.23730908679360116,-1.3476641243075844,-0.9718299928258278,-1.812216028287741,-1.388853942113607,-1.3566877907945707,1.5715423822402954 +152403,1,-0.04802612166916067,-0.9859330705691017,-1.1815354958941209,,,,,,,,,,-1.9017700713146695,1.8141914255436393,-0.059714660367144415,0.8586603403091431 +152403,2,-0.27617209458197817,-1.585424432280566,-1.4319575918950684,,,,,,,,,,,,,0.8586603403091431 +153204,0,-1.27738176877165,-1.000669460045355,-0.8351539579881,-0.08409336463203088,-1.2387229004948068,1.3107830437664505,1.3057140180675306,-0.38645305720719647,0.9242937926161762,0.36043714080320877,1.4045524206757267,-0.13173296267509654,-1.812216028287741,-0.2910724881500066,-0.6875644123724536,1.5457956790924072 +153204,1,-2.5471657311522606,-1.431371370951806,-1.4879107362969273,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-0.059714660367144415,0.7773395776748657 +153204,2,-2.4408058861937936,-1.741125851746451,-2.061975310289543,,,,,,,,,,,,,0.7773395776748657 +154101,0,-0.48673663414592516,-1.1157275859627156,-0.9586099692679761,-1.2639232704194252,0.018458978407257843,0.17294631652479245,-0.1539806172701155,0.4572405017195292,-0.8863975124670236,1.5559295959968287,1.4045524206757267,0.7083640674756347,0.49778314283978853,-1.388853942113607,0.20460009219036931,1.8111647367477417 +154101,1,-0.24026763009093757,-1.6986343511814288,-0.05815961441716403,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.5613893220144716,2.0504159927368164 +154101,2,-0.27617209458197817,-0.8069173349511406,-0.26192468630532967,,,,,,,,,,,,,2.0504159927368164 +154102,0,1.5463508548916531,-1.000669460045355,-0.8351539579881,-1.2639232704194252,0.018458978407257843,0.17294631652479245,-0.1539806172701155,0.4572405017195292,-0.8863975124670236,1.5559295959968287,1.4045524206757267,0.7083640674756347,-0.27221658086938805,-0.2910724881500066,-0.6875644123724536,2.0504159927368164 +154102,1,-1.201475172199822,-0.4514071101098565,-0.568785015088508,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.310551991190808,2.0522682666778564 +154102,2,-1.2600965453146213,-0.573365205752313,-0.441929748703751,,,,,,,,,,,,,2.0522682666778564 +154802,0,-0.7126352440389895,-0.3103207045411919,0.15249413225090913,-0.08409336463203088,0.2698953541876708,0.17294631652479245,-0.06274970256151263,-0.5672445341200663,-0.22796431061858732,-0.835055314390411,0.22503104425430823,-0.5517814777504622,-0.27221658086938805,-0.2910724881500066,-0.9106055385131593,1.747433066368103 +154802,1,-0.4325091385127145,0.08311885034938876,0.24821562598564237,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.059714660367144415,1.2641254663467407 +154802,2,-0.37456453965524245,0.1272911818441699,-0.6219348111021723,,,,,,,,,,,,,1.2641254663467407 +155102,0,-0.7126352440389895,-1.000669460045355,-0.8351539579881,-0.9689657939725767,0.6470499178582901,0.17294631652479245,-0.1539806172701155,0.5175043273571525,-0.5571809115428055,0.9581833684000187,0.22503104425430823,0.28831555240026907,-1.0422163045785646,0.806708965813594,1.9889291013160153,1.984562873840332 +155102,1,-0.4325091385127145,-0.80775775041602,-1.3857856561626585,,,,,,,,,,-1.1887333502953,1.8141914255436393,3.7028453019878094,1.8380401134490967 +155102,2,0.11739768571107917,-0.4955144960193704,-0.7119373423013831,,,,,,,,,,,,,1.8380401134490967 +156602,0,0.529807110372864,0.14991179912825014,0.2759501435307853,0.5058215882616662,1.149922669419116,0.7418646801456215,0.3021739562728989,0.9393511068205153,0.595077191691958,1.5559295959968287,-1.3476641243075844,1.1284125825510003,-1.0422163045785646,-0.2910724881500066,-0.4645232862317478,1.9563919305801392 +156602,1,0.7209399120179469,0.17220651042592966,1.4737165875968679,,,,,,,,,,0.9503768127628092,-0.3229291202479022,0.4419600012801827,2.407790422439575 +156602,2,1.1997145815169867,0.7500968597077102,0.5480980944875663,,,,,,,,,,,,,2.407790422439575 +158101,0,1.0945536351055247,0.03485367321088963,0.029038120971032973,-1.7063594850896981,-0.48441377315356804,-0.9648904107168657,-0.42767336139592416,-0.989091313583429,-1.2156141133912417,1.5559295959968287,0.6182048363947807,-0.9718299928258278,-1.0422163045785646,0.806708965813594,0.8737234706124865,2.02457594871521 +158101,1,0.6248191578070585,0.5285571507320932,0.45246578625417994,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.5613893220144716,1.9404655694961548 +158101,2,0.6093599110774008,0.282992601310055,-0.08191962390690835,,,,,,,,,,,,,1.9404655694961548 +159603,0,-0.9385338539320537,-1.000669460045355,-0.8351539579881,-2.0013169615365465,-2.873059343067491,-2.671645501579353,-1.4312134231905558,-2.134104000698271,-1.5448307143154598,-0.835055314390411,-0.5613165400266386,-0.13173296267509654,-2.5822157519969178,-1.388853942113607,-0.9106055385131593,0.8523938059806824 +159603,1,-1.1053544179889336,-1.8768096713345106,-1.8964110568340025,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-1.3139013144854623,0.8102810978889465 +159603,2,-0.9649192100948284,-1.8189765614793936,-1.791967716691911,,,,,,,,,,,,,0.8102810978889465 +159607,0,-1.0514831588785858,-1.000669460045355,-0.8351539579881,-2.0013169615365465,-2.873059343067491,-2.671645501579353,-1.4312134231905558,-2.134104000698271,-1.5448307143154598,-0.835055314390411,-0.5613165400266386,-0.13173296267509654,1.267782866548965,1.9044904197771946,-0.24148216009104212,0.21405862271785736 +159607,1,-0.6247506469344914,-1.9658973314110515,-1.7942859766997337,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.059714660367144415,-0.10102174431085587 +159607,2,-0.5713494298017712,-1.8968272712123362,-2.331982903887175,,,,,,,,,,,,,-0.10102174431085587 +159802,0,0.529807110372864,-0.6554950822932735,-0.7116979467082238,0.8007790647085149,0.39561354207787724,-0.1115128652856221,0.6670976151073104,0.9393511068205153,1.4181186940025035,-0.835055314390411,-0.5613165400266386,0.7083640674756347,0.49778314283978853,-0.2910724881500066,0.20460009219036931,2.261077880859375 +159802,1,-1.201475172199822,-0.896845410492561,0.14609054585137357,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.059714660367144415,2.2362797260284424 +159802,2,-0.6697418748750354,0.20514189157711243,-0.981944935899015,,,,,,,,,,,,,2.2362797260284424 +159901,0,0.6427564153193962,0.7252024287150527,1.016686211210042,0.6533003264850905,0.8984862936387031,0.457405498335207,0.4846357856901046,-0.38645305720719647,0.2658605907677399,0.36043714080320877,1.0113786285352542,-0.5517814777504622,1.267782866548965,0.806708965813594,3.104134732019544,0.9044451713562012 +159901,1,-0.7208714011453798,0.7067324708851749,1.4737165875968679,,,,,,,,,,0.9503768127628092,0.7456311526478686,3.7028453019878094,1.3907580375671387 +159901,2,-0.1777796495087138,-0.10626094735465771,0.8181056880851983,,,,,,,,,,,,,1.3907580375671387 +160004,0,-0.03493941435979663,0.8402605546324132,0.029038120971032973,1.390694017602212,-0.6101319610437744,1.026323861956036,1.3057140180675306,0.4572405017195292,0.7596854921540671,0.9581833684000187,1.7977262128162,0.7083640674756347,-1.812216028287741,-1.388853942113607,0.8737234706124865,0.7065247297286987 +160004,1,0.9131814204397238,1.1521707712678793,0.35034070611991114,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.8122266528381351,0.8678008317947388 +160004,2,1.4948919167367798,0.36084331104299755,0.09808543849151298,,,,,,,,,,,,,0.8678008317947388 +163902,0,0.19095919553326762,-0.1952625786238314,-0.7116979467082238,2.1280877087193333,1.401359045199529,0.7418646801456215,1.0320212739417218,0.2161851991690361,1.9119435953888306,0.9581833684000187,1.4045524206757267,0.28831555240026907,0.49778314283978853,-0.2910724881500066,-0.24148216009104212,2.995732307434082 +163902,1,0.14421538675261625,0.4394694906555523,0.04396546571710477,,,,,,,,,,0.9503768127628092,-1.3914893931436731,1.1944719937511734,2.995732307434082 +163902,2,1.7900692519565728,0.9057982791735953,0.18808796969072364,,,,,,,,,,,,,2.995732307434082 +164203,0,-0.03493941435979663,1.5306093101365763,2.1277903127289273,-1.1164445321960008,-1.3644410883850133,-2.3871863197689382,-1.9785989114421731,-0.989091313583429,-1.5448307143154598,-0.835055314390411,0.22503104425430823,0.28831555240026907,0.49778314283978853,-1.388853942113607,-0.9106055385131593,1.9884235858917236 +164203,1,0.8170606662288354,0.6176448108086341,0.24821562598564237,,,,,,,,,,-0.47569662927593015,1.8141914255436393,0.4419600012801827,1.5679306983947754 +164203,2,-0.37456453965524245,0.6722461499747677,0.008082907292302316,,,,,,,,,,,,,1.5679306983947754 +164903,0,-1.0514831588785858,-0.770553208210634,-0.7116979467082238,-1.4114020086428494,-1.7415956520556326,-1.8182679561481092,-0.7925970202303356,-0.20566158029432668,-1.0510058129291326,0.9581833684000187,-0.9544903321671111,1.1284125825510003,1.267782866548965,-1.388853942113607,0.20460009219036931,0.4091334342956543 +164903,1,-1.1053544179889336,-1.0750207306456427,-1.4879107362969273,,,,,,,,,,-1.9017700713146695,0.7456311526478686,1.1944719937511734,0.37766513228416443 +164903,2,0.2157901307843435,-1.040469464149968,-1.3419550606958577,,,,,,,,,,,,,0.37766513228416443 +165005,0,-0.7126352440389895,-0.3103207045411919,-0.09441789030884316,-0.37905084107887943,-1.615877464165426,-0.9648904107168657,-1.24875159377335,-0.024870103381456905,-1.0510058129291326,0.36043714080320877,-0.16814274788616518,-1.8119270229765592,0.49778314283978853,-0.2910724881500066,-0.6875644123724536,0.0647229552268982 +165005,1,-0.8169921553562683,-0.18414412988023388,-0.9772853356255832,,,,,,,,,,-1.9017700713146695,-0.3229291202479022,-0.8122266528381351,0.7213913798332214 +165005,2,-0.7681343199482997,-0.18411165708760024,-0.35192721750454037,,,,,,,,,,,,,0.7213913798332214 +165802,0,-1.164432463825118,-0.6554950822932735,-0.7116979467082238,1.5381727558256364,1.401359045199529,1.3107830437664505,0.11971212685569313,0.15592137353141286,1.7473352949267216,1.5559295959968287,1.4045524206757267,-0.13173296267509654,1.267782866548965,-1.388853942113607,-0.6875644123724536,1.9095832109451294 +165802,1,0.4325776493852816,-0.00596880972715211,0.35034070611991114,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-0.059714660367144415,1.9737452268600464 +165802,2,1.7900692519565728,-0.41766378628642786,0.008082907292302316,,,,,,,,,,,,,1.9737452268600464 +166201,0,-0.8255845489855216,-1.000669460045355,-0.8351539579881,-0.08409336463203088,0.8984862936387031,1.026323861956036,0.940790359233119,-0.20566158029432668,-0.7217892120049145,0.9581833684000187,0.22503104425430823,0.7083640674756347,-0.27221658086938805,1.9044904197771946,0.8737234706124865,2.922832489013672 +166201,1,-0.9131129095671567,0.17220651042592966,0.35034070611991114,,,,,,,,,,0.9503768127628092,2.88275169843941,2.4486586478694914,1.3767900466918945 +166201,2,-0.7681343199482997,-0.4955144960193704,0.368093032089145,,,,,,,,,,,,,1.3767900466918945 +167501,0,0.07800989058673549,-0.5404369563759129,-0.4647859241484716,1.6856514940490606,1.0242044815289095,0.7418646801456215,1.4881758474847362,0.6380319786323989,1.4181186940025035,-0.23730908679360116,-0.9544903321671111,1.548461097626366,1.267782866548965,0.806708965813594,0.20460009219036931,2.5574629306793213 +167501,1,0.8170606662288354,0.8849077910382567,1.882216908133943,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.310551991190808,2.6723015308380127 +167501,2,1.1997145815169867,0.43869402077594005,0.368093032089145,,,,,,,,,,,,,2.6723015308380127 +167504,0,2.44994529446391,1.3004930583018552,0.893230199930166,1.6856514940490606,1.0242044815289095,0.7418646801456215,1.4881758474847362,0.6380319786323989,1.4181186940025035,-0.23730908679360116,-0.9544903321671111,1.548461097626366,1.267782866548965,-0.2910724881500066,0.20460009219036931,2.995732307434082 +167504,1,0.4325776493852816,1.2412584313444202,1.0652162670597927,,,,,,,,,,0.9503768127628092,-1.3914893931436731,0.4419600012801827,2.995732307434082 +167504,2,1.298107026590251,0.7500968597077102,0.908108219284409,,,,,,,,,,,,,2.995732307434082 +169004,0,0.19095919553326762,1.7607255619712974,2.004334301449051,-0.674008317525728,-1.2387229004948068,-2.3871863197689382,-0.1539806172701155,-0.38645305720719647,-0.8863975124670236,-0.835055314390411,-0.9544903321671111,1.548461097626366,1.267782866548965,-0.2910724881500066,-0.6875644123724536,0.5221880674362183 +169004,1,-0.7208714011453798,0.7958201309617158,-0.8751602554913144,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.8122266528381351,1.2959420680999756 +169004,2,0.9045372462971938,-0.41766378628642786,0.8181056880851983,,,,,,,,,,,,,1.2959420680999756 +172001,0,-0.7126352440389895,-0.6554950822932735,-0.7116979467082238,-0.5265295793023037,0.2698953541876708,-0.9648904107168657,0.6670976151073104,-1.5314657443220383,-0.8863975124670236,1.5559295959968287,1.4045524206757267,1.9685096127017316,1.267782866548965,1.9044904197771946,0.20460009219036931,2.3900279998779297 +172001,1,-0.4325091385127145,-1.520459031028347,-1.1815354958941209,,,,,,,,,,1.663413533782179,-0.3229291202479022,1.1944719937511734,2.097635507583618 +172001,2,-1.752058770680943,-1.040469464149968,-1.7019651854927003,,,,,,,,,,,,,2.097635507583618 +173302,0,2.1110973796243138,-0.3103207045411919,0.15249413225090913,1.390694017602212,0.2698953541876708,1.3107830437664505,1.2144831033589276,0.6982958042700221,1.9119435953888306,0.36043714080320877,1.7977262128162,-0.13173296267509654,-1.0422163045785646,0.806708965813594,-0.6875644123724536,2.6479945182800293 +173302,1,1.6821474541268315,-0.00596880972715211,0.04396546571710477,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.8122266528381351,2.995732307434082 +173302,2,1.593284361810044,-0.4955144960193704,0.008082907292302316,,,,,,,,,,,,,2.995732307434082 +173501,0,-0.37378732919939306,-0.08020445270647089,0.15249413225090913,0.8007790647085149,1.0242044815289095,0.7418646801456215,-0.33644244668732126,0.6982958042700221,-0.22796431061858732,-0.23730908679360116,0.22503104425430823,0.28831555240026907,1.267782866548965,0.806708965813594,3.104134732019544,1.686808466911316 +173501,1,-0.4325091385127145,-0.00596880972715211,-0.8751602554913144,,,,,,,,,,0.9503768127628092,1.8141914255436393,3.7028453019878094,2.2646634578704834 +173501,2,-0.6697418748750354,-0.573365205752313,-0.17192215510611902,,,,,,,,,,,,,2.2646634578704834 +177802,0,0.8686550252124604,1.4155511842192159,1.2635982337697944,0.8007790647085149,-0.10725920948294862,0.457405498335207,1.1232521886503248,0.15592137353141286,0.10125229030563083,-0.835055314390411,-1.3476641243075844,0.28831555240026907,-2.5822157519969178,-1.388853942113607,-0.6875644123724536,0.7040417790412903 +177802,1,1.1054229288615007,-0.00596880972715211,0.5545908663884488,,,,,,,,,,-1.9017700713146695,-0.3229291202479022,-0.5613893220144716,0.637300968170166 +177802,2,1.1013221364437225,-0.6512159154852555,0.368093032089145,,,,,,,,,,,,,0.637300968170166 +183303,0,-1.6162296836112464,-1.000669460045355,-0.8351539579881,-1.4114020086428494,-1.4901592762752198,-0.6804312289064511,-1.339982508481953,-0.14539775465670343,-1.3802224138533508,-0.23730908679360116,1.0113786285352542,-0.9718299928258278,-1.0422163045785646,-1.388853942113607,0.42764121833107505,1.8630633354187012 +183303,1,-1.393716680621599,-0.3623194500333156,-0.36453485481997044,,,,,,,,,,0.2373400917434395,-1.3914893931436731,-0.059714660367144415,1.5841364860534668 +183303,2,-0.4729569847285068,-0.729066625218198,0.008082907292302316,,,,,,,,,,,,,1.5841364860534668 +183803,0,-1.3903310737181822,-1.000669460045355,-0.8351539579881,-1.4114020086428494,-1.1130047126046003,0.17294631652479245,0.5758667003987075,0.3969766760819059,-0.8863975124670236,-0.835055314390411,-0.16814274788616518,-0.13173296267509654,-0.27221658086938805,-0.2910724881500066,-1.133646664653865,1.8281036615371704 +183803,1,-2.1626827143087066,-1.3422837108752652,-1.4879107362969273,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.8122266528381351,1.822934865951538 +183803,2,-1.4568814354611501,-1.429723012814681,-1.7019651854927003,,,,,,,,,,,,,1.822934865951538 +183902,0,0.9816043301589925,-0.6554950822932735,0.5228621660905376,-0.5265295793023037,-1.615877464165426,-2.102727137958524,-0.33644244668732126,-1.4712019186844152,-1.3802224138533508,-2.030547769584031,-0.5613165400266386,-0.5517814777504622,-0.27221658086938805,-0.2910724881500066,3.104134732019544,0.5763617157936096 +183902,1,0.2403361409635047,-1.1641083907221836,-0.6709100952227768,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.059714660367144415,1.1382217407226562 +183902,2,0.6093599110774008,-0.2619623668205428,0.8181056880851983,,,,,,,,,,,,,1.1382217407226562 +185304,0,0.6427564153193962,0.8402605546324132,0.029038120971032973,0.8007790647085149,0.2698953541876708,0.7418646801456215,1.3057140180675306,0.9996149324581385,0.9242937926161762,0.36043714080320877,0.22503104425430823,0.28831555240026907,1.267782866548965,-0.2910724881500066,0.20460009219036931,2.2362797260284424 +185304,1,0.33645689517439314,0.3503818305790114,1.1673413471940615,,,,,,,,,,-1.1887333502953,0.7456311526478686,0.4419600012801827,2.869825839996338 +185304,2,-0.4729569847285068,-0.028410237621715174,0.18808796969072364,,,,,,,,,,,,,2.869825839996338 +186301,0,-0.14788871930632877,-0.42537883045855246,0.893230199930166,0.6533003264850905,0.8984862936387031,1.3107830437664505,1.0320212739417218,1.6625170144719943,-0.3925726110806964,-0.23730908679360116,1.7977262128162,-0.5517814777504622,0.49778314283978853,-1.388853942113607,-0.6875644123724536,1.3385016918182373 +186301,1,0.14421538675261625,-0.3623194500333156,-0.6709100952227768,,,,,,,,,,0.9503768127628092,-0.3229291202479022,0.4419600012801827,1.5084161758422852 +186301,2,-1.161704100241357,-0.2619623668205428,-0.981944935899015,,,,,,,,,,,,,1.5084161758422852 +186601,0,0.07800989058673549,-1.000669460045355,-0.8351539579881,0.8007790647085149,-0.2329773973731551,0.457405498335207,0.7583285298159133,0.5175043273571525,-0.22796431061858732,-0.835055314390411,0.22503104425430823,-1.3918785079011935,0.49778314283978853,-0.2910724881500066,-0.4645232862317478,1.4488497972488403 +186601,1,-0.6247506469344914,-0.5404947701863974,-0.568785015088508,,,,,,,,,,0.2373400917434395,-0.3229291202479022,0.19112267045651915,1.1517411470413208 +186601,2,-0.1777796495087138,-0.41766378628642786,0.368093032089145,,,,,,,,,,,,,1.1517411470413208 +187603,0,-1.0514831588785858,-0.6554950822932735,-0.7116979467082238,1.390694017602212,0.6470499178582901,1.3107830437664505,0.210943041564296,0.8790872811828919,1.2535103935403944,0.36043714080320877,-0.5613165400266386,0.7083640674756347,-0.27221658086938805,-0.2910724881500066,0.8737234706124865,1.6668524742126465 +187603,1,-0.33638838430182605,-0.9859330705691017,-1.4879107362969273,,,,,,,,,,0.2373400917434395,-1.3914893931436731,-0.8122266528381351,1.7716599702835083 +187603,2,-0.9649192100948284,-0.8847680446840831,-1.1619499982974364,,,,,,,,,,,,,1.7716599702835083 +187802,0,-0.03493941435979663,1.1854349323844948,1.016686211210042,-0.08409336463203088,0.39561354207787724,0.457405498335207,-0.8838279349389385,-0.26592540593194997,-0.5571809115428055,-0.835055314390411,1.4045524206757267,-0.13173296267509654,1.267782866548965,1.9044904197771946,-0.4645232862317478,1.6465427875518799 +187802,1,-0.24026763009093757,1.2412584313444202,0.45246578625417994,,,,,,,,,,0.9503768127628092,0.7456311526478686,0.6927973321038463,1.7459635734558105 +187802,2,0.019005240637814846,0.9057982791735953,0.008082907292302316,,,,,,,,,,,,,1.7459635734558105 +188502,0,1.7722494647847176,0.14991179912825014,-0.09441789030884316,0.2108641118148177,1.0242044815289095,0.7418646801456215,0.5758667003987075,0.3969766760819059,0.7596854921540671,-0.835055314390411,-0.16814274788616518,0.7083640674756347,1.267782866548965,-0.2910724881500066,-0.6875644123724536,2.572751998901367 +188502,1,0.7209399120179469,0.6176448108086341,0.45246578625417994,,,,,,,,,,1.663413533782179,-0.3229291202479022,-0.8122266528381351,2.604991912841797 +188502,2,1.3964994716635155,0.9057982791735953,1.5381259376788836,,,,,,,,,,,,,2.604991912841797 +190201,0,0.07800989058673549,-0.8856113341279945,-0.7116979467082238,0.358342850038242,0.2698953541876708,0.17294631652479245,0.3934048709815018,-0.5069807084824429,-0.8863975124670236,-0.835055314390411,-1.3476641243075844,0.28831555240026907,0.49778314283978853,-0.2910724881500066,-0.6875644123724536,2.267198085784912 +190201,1,-0.6247506469344914,-0.2732317899567748,-0.05815961441716403,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.059714660367144415,2.227269411087036 +190201,2,-0.5713494298017712,0.04944047211122737,-0.17192215510611902,,,,,,,,,,,,,2.227269411087036 +190202,0,0.8686550252124604,0.2649699250456107,0.15249413225090913,0.358342850038242,0.2698953541876708,0.17294631652479245,0.3934048709815018,-0.5069807084824429,-0.8863975124670236,-0.835055314390411,-1.3476641243075844,0.28831555240026907,-1.0422163045785646,-0.2910724881500066,0.8737234706124865,2.123857259750366 +190202,1,-0.04802612166916067,-0.00596880972715211,0.14609054585137357,,,,,,,,,,0.9503768127628092,-1.3914893931436731,-0.5613893220144716,2.2190356254577637 +190202,2,0.019005240637814846,-0.41766378628642786,-0.26192468630532967,,,,,,,,,,,,,2.2190356254577637 +190501,0,-0.2608380242528609,-1.1157275859627156,-0.9586099692679761,0.358342850038242,-0.10725920948294862,0.17294631652479245,1.0320212739417218,0.6380319786323989,1.0889020930782853,-0.23730908679360116,0.22503104425430823,-0.13173296267509654,1.267782866548965,0.806708965813594,0.20460009219036931,2.3242218494415283 +190501,1,0.6248191578070585,-0.00596880972715211,-0.16028469455143282,,,,,,,,,,-1.9017700713146695,-0.3229291202479022,0.4419600012801827,2.4082157611846924 +190501,2,1.7900692519565728,-0.028410237621715174,0.18808796969072364,,,,,,,,,,,,,2.4082157611846924 +190502,0,0.4168578054263319,-0.770553208210634,-0.7116979467082238,0.358342850038242,-0.10725920948294862,0.17294631652479245,1.0320212739417218,0.6380319786323989,1.0889020930782853,-0.23730908679360116,0.22503104425430823,-0.13173296267509654,-2.5822157519969178,-0.2910724881500066,-1.3566877907945707,2.4082157611846924 +190502,1,0.8170606662288354,0.08311885034938876,-0.26240977468570165,,,,,,,,,,-1.1887333502953,0.7456311526478686,1.1944719937511734,2.1412363052368164 +190502,2,0.6093599110774008,0.36084331104299755,0.45809556328835566,,,,,,,,,,,,,2.1412363052368164 +190601,0,1.0945536351055247,0.7252024287150527,0.3994061548106614,1.9806089704959091,1.2756408573093225,1.026323861956036,1.3057140180675306,1.6625170144719943,2.07655189585094,-0.835055314390411,0.22503104425430823,0.28831555240026907,0.49778314283978853,0.806708965813594,0.20460009219036931,2.995732307434082 +190601,1,0.4325776493852816,1.330346091420961,-1.3857856561626585,,,,,,,,,,0.2373400917434395,-0.3229291202479022,0.4419600012801827,2.995732307434082 +190601,2,-0.4729569847285068,0.8279475694406527,0.638100625686777,,,,,,,,,,,,,2.995732307434082 +190603,0,2.1110973796243138,0.6101443027976923,0.2759501435307853,1.9806089704959091,1.2756408573093225,1.026323861956036,1.3057140180675306,1.6625170144719943,2.07655189585094,-0.835055314390411,0.22503104425430823,0.28831555240026907,-0.27221658086938805,0.806708965813594,0.20460009219036931,2.995732307434082 +190603,1,0.33645689517439314,1.2412584313444202,0.7588410266569864,,,,,,,,,,0.2373400917434395,0.7456311526478686,0.4419600012801827,2.995732307434082 +190603,2,-0.4729569847285068,0.7500968597077102,-0.08191962390690835,,,,,,,,,,,,,2.995732307434082 +190604,0,-0.2608380242528609,-0.08020445270647089,-0.09441789030884316,1.9806089704959091,1.2756408573093225,1.026323861956036,1.3057140180675306,1.6625170144719943,2.07655189585094,-0.835055314390411,0.22503104425430823,0.28831555240026907,-0.27221658086938805,0.806708965813594,0.20460009219036931,2.995732307434082 +190604,1,0.6248191578070585,1.0630831111913384,0.7588410266569864,,,,,,,,,,0.2373400917434395,0.7456311526478686,0.4419600012801827,2.995732307434082 +190604,2,1.1013221364437225,1.1393504083724229,0.908108219284409,,,,,,,,,,,,,2.995732307434082 +192602,0,-0.48673663414592516,-1.1157275859627156,-0.9586099692679761,-0.5265295793023037,0.1441771662974643,1.026323861956036,-0.7013661055217327,-0.024870103381456905,-1.0510058129291326,-0.835055314390411,-0.16814274788616518,-0.13173296267509654,-0.27221658086938805,-0.2910724881500066,-0.6875644123724536,2.4892454147338867 +192602,1,0.048094632541727786,-0.3623194500333156,-0.26240977468570165,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.310551991190808,2.374253988265991 +192602,2,-0.27617209458197817,0.5165447305088826,0.45809556328835566,,,,,,,,,,,,,2.374253988265991 +192704,0,0.19095919553326762,-0.3103207045411919,-0.5882419354283478,0.2108641118148177,-0.2329773973731551,1.026323861956036,1.2144831033589276,0.5175043273571525,-0.06335601015647824,-0.835055314390411,0.22503104425430823,0.28831555240026907,-1.0422163045785646,-0.2910724881500066,-1.3566877907945707,1.7510279417037964 +192704,1,0.52869840359617,-0.7186700903394792,-0.9772853356255832,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-1.0630639836617988,1.8531097173690796 +192704,2,-0.07938720443544948,-0.028410237621715174,0.8181056880851983,,,,,,,,,,,,,1.8531097173690796 +193502,0,3.014691819196571,1.875783687888658,2.3747023352886796,2.1280877087193333,1.0242044815289095,1.026323861956036,-0.8838279349389385,0.15592137353141286,1.0889020930782853,0.9581833684000187,1.7977262128162,1.1284125825510003,0.49778314283978853,0.806708965813594,-1.133646664653865,1.7215558290481567 +193502,1,1.2015436830723893,1.2412584313444202,1.0652162670597927,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.8122266528381351,2.161266326904297 +193502,2,1.4948919167367798,0.8279475694406527,1.6281284688780944,,,,,,,,,,,,,2.161266326904297 +193602,0,-1.164432463825118,-1.1157275859627156,-0.9586099692679761,1.2432152793787876,0.7727681057484966,0.7418646801456215,0.8495594445245161,0.3367128504442826,1.7473352949267216,-0.835055314390411,-1.3476641243075844,-0.13173296267509654,1.267782866548965,1.9044904197771946,0.20460009219036931,1.763675332069397 +193602,1,0.048094632541727786,-0.3623194500333156,-0.6709100952227768,,,,,,,,,,-1.9017700713146695,-0.3229291202479022,0.4419600012801827,1.47413969039917 +193602,2,1.298107026590251,1.0614996986394805,0.09808543849151298,,,,,,,,,,,,,1.47413969039917 +193801,0,-0.48673663414592516,-1.230785711880076,-1.0820659805478523,1.390694017602212,0.7727681057484966,0.17294631652479245,-0.1539806172701155,-1.8327848725101548,1.2535103935403944,-0.835055314390411,-0.16814274788616518,-1.3918785079011935,1.267782866548965,-0.2910724881500066,-0.4645232862317478,1.561645269393921 +193801,1,0.6248191578070585,0.7958201309617158,1.1673413471940615,,,,,,,,,,0.2373400917434395,-0.3229291202479022,3.7028453019878094,1.5084161758422852 +193801,2,0.11739768571107917,1.450753247304193,0.638100625686777,,,,,,,,,,,,,1.5084161758422852 +193803,0,-0.9385338539320537,-0.3103207045411919,-0.09441789030884316,1.390694017602212,0.7727681057484966,0.17294631652479245,-0.1539806172701155,-1.8327848725101548,1.2535103935403944,-0.835055314390411,-0.16814274788616518,-1.3918785079011935,1.267782866548965,0.806708965813594,0.20460009219036931,2.9597740173339844 +193803,1,0.048094632541727786,0.5285571507320932,0.963091186925524,,,,,,,,,,1.663413533782179,0.7456311526478686,-0.310551991190808,2.3390393257141113 +193803,2,1.1013221364437225,0.8279475694406527,1.718131000077305,,,,,,,,,,,,,2.3390393257141113 +195101,0,1.207502940052057,-0.08020445270647089,-0.3413299128685955,0.06338537359139342,0.39561354207787724,0.17294631652479245,0.5758667003987075,1.361197886283878,-0.06335601015647824,0.36043714080320877,0.6182048363947807,0.7083640674756347,0.49778314283978853,-1.388853942113607,-0.6875644123724536,2.7019448280334473 +195101,1,0.9131814204397238,0.4394694906555523,0.35034070611991114,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.5613893220144716,2.373138904571533 +195101,2,1.1997145815169867,0.6722461499747677,0.008082907292302316,,,,,,,,,,,,,2.373138904571533 +195102,0,1.6593001598381854,0.6101443027976923,1.6339662676094229,0.06338537359139342,0.39561354207787724,0.17294631652479245,0.5758667003987075,1.361197886283878,-0.06335601015647824,0.36043714080320877,0.6182048363947807,0.7083640674756347,-0.27221658086938805,-0.2910724881500066,-0.6875644123724536,2.373138904571533 +195102,1,2.1627512251812737,0.17220651042592966,0.963091186925524,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,0.4419600012801827,2.4643607139587402 +195102,2,1.4948919167367798,0.1272911818441699,0.908108219284409,,,,,,,,,,,,,2.4643607139587402 +195401,0,0.3039085004797998,1.3004930583018552,1.8808782901691752,1.2432152793787876,1.401359045199529,1.026323861956036,1.3969449327761334,1.843308491384864,1.0889020930782853,-0.23730908679360116,0.22503104425430823,-0.5517814777504622,0.49778314283978853,-0.2910724881500066,0.8737234706124865,2.135617971420288 +195401,1,0.14421538675261625,0.9739954511147976,1.1673413471940615,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.059714660367144415,2.1804280281066895 +195401,2,0.019005240637814846,-0.18411165708760024,0.008082907292302316,,,,,,,,,,,,,2.1804280281066895 +195402,0,0.07800989058673549,-0.5404369563759129,-0.5882419354283478,1.2432152793787876,1.401359045199529,1.026323861956036,1.3969449327761334,1.843308491384864,1.0889020930782853,-0.23730908679360116,0.22503104425430823,-0.5517814777504622,0.49778314283978853,0.806708965813594,3.104134732019544,2.1804280281066895 +195402,1,-0.24026763009093757,-0.00596880972715211,0.45246578625417994,,,,,,,,,,0.2373400917434395,0.7456311526478686,0.4419600012801827,2.5580716133117676 +195402,2,-0.27617209458197817,0.8279475694406527,0.09808543849151298,,,,,,,,,,,,,2.5580716133117676 +196001,0,-0.03493941435979663,-0.42537883045855246,-0.09441789030884316,0.06338537359139342,0.2698953541876708,0.7418646801456215,0.4846357856901046,0.2764490248066594,-0.22796431061858732,0.9581833684000187,-0.9544903321671111,-0.9718299928258278,1.267782866548965,-0.2910724881500066,-0.6875644123724536,2.615027666091919 +196001,1,-0.14414687588004912,0.3503818305790114,0.6567159465227176,,,,,,,,,,1.663413533782179,-0.3229291202479022,-0.059714660367144415,2.214808464050293 +196001,2,-0.27617209458197817,0.20514189157711243,0.008082907292302316,,,,,,,,,,,,,2.214808464050293 +196002,0,-1.0514831588785858,-0.3103207045411919,-0.5882419354283478,0.06338537359139342,0.2698953541876708,0.7418646801456215,0.4846357856901046,0.2764490248066594,-0.22796431061858732,0.9581833684000187,-0.9544903321671111,-0.9718299928258278,-1.0422163045785646,-0.2910724881500066,-0.018441033950336395,2.1368277072906494 +196002,1,-0.9131129095671567,-0.80775775041602,-1.1815354958941209,,,,,,,,,,1.663413533782179,-0.3229291202479022,1.1944719937511734,-0.6931471824645996 +196002,2,-1.2600965453146213,-1.040469464149968,-1.791967716691911,,,,,,,,,,,,,-0.6931471824645996 +196502,0,-0.03493941435979663,0.4950861768803317,0.15249413225090913,0.06338537359139342,0.2698953541876708,0.7418646801456215,0.4846357856901046,0.09565754789378961,0.430468891229849,0.9581833684000187,0.6182048363947807,0.28831555240026907,-1.0422163045785646,-1.388853942113607,-0.4645232862317478,1.5365381240844727 +196502,1,-0.24026763009093757,-0.00596880972715211,0.7588410266569864,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.059714660367144415,1.9243637323379517 +196502,2,-0.5713494298017712,-0.028410237621715174,0.368093032089145,,,,,,,,,,,,,1.9243637323379517 +197201,0,-1.5032803786647144,-0.42537883045855246,-0.3413299128685955,-0.5265295793023037,1.149922669419116,0.17294631652479245,0.7583285298159133,-0.5069807084824429,0.9242937926161762,1.5559295959968287,-2.13401170858853,0.7083640674756347,0.49778314283978853,0.806708965813594,-0.24148216009104212,1.666351318359375 +197201,1,-2.5471657311522606,-0.80775775041602,-1.2836605760283897,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.310551991190808,1.8250607252120972 +197201,2,-2.932768111560115,-1.5075737225476233,-0.8019398735005937,,,,,,,,,,,,,1.8250607252120972 +199001,0,0.3039085004797998,0.4950861768803317,0.6463181773704137,1.5381727558256364,1.0242044815289095,0.457405498335207,1.2144831033589276,0.9996149324581385,1.5827269944646125,0.36043714080320877,1.4045524206757267,1.1284125825510003,-1.0422163045785646,-1.388853942113607,-0.6875644123724536,2.0584843158721924 +199001,1,0.7209399120179469,0.4394694906555523,0.5545908663884488,,,,,,,,,,-0.47569662927593015,1.8141914255436393,-0.8122266528381351,1.9562814235687256 +199001,2,1.0029296913704582,0.7500968597077102,0.7281031568859877,,,,,,,,,,,,,1.9562814235687256 +199002,0,-0.03493941435979663,0.7252024287150527,0.5228621660905376,1.5381727558256364,1.0242044815289095,0.457405498335207,1.2144831033589276,0.9996149324581385,1.5827269944646125,0.36043714080320877,1.4045524206757267,1.1284125825510003,-0.27221658086938805,1.9044904197771946,-0.24148216009104212,1.9562814235687256 +199002,1,0.33645689517439314,0.7958201309617158,0.14609054585137357,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.8122266528381351,2.22629976272583 +199002,2,0.9045372462971938,0.1272911818441699,0.368093032089145,,,,,,,,,,,,,2.22629976272583 +199302,0,-0.14788871930632877,0.3800280509629712,0.5228621660905376,-0.08409336463203088,0.39561354207787724,0.7418646801456215,0.5758667003987075,0.8188234555452687,-0.5571809115428055,1.5559295959968287,-0.5613165400266386,1.9685096127017316,1.267782866548965,-0.2910724881500066,0.20460009219036931,0.2918941080570221 +199302,1,-0.04802612166916067,0.7067324708851749,0.04396546571710477,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.059714660367144415,-0.6931471824645996 +199302,2,-0.8665267650215641,-0.4955144960193704,0.5480980944875663,,,,,,,,,,,,,-0.6931471824645996 +199402,0,0.7557057202659283,0.7252024287150527,0.3994061548106614,1.2432152793787876,0.8984862936387031,1.3107830437664505,1.2144831033589276,1.120142583733385,1.4181186940025035,0.36043714080320877,0.6182048363947807,1.1284125825510003,-0.27221658086938805,-0.2910724881500066,0.20460009219036931,1.9772381782531738 +199402,1,0.33645689517439314,0.8849077910382567,0.45246578625417994,,,,,,,,,,-1.1887333502953,-0.3229291202479022,0.4419600012801827,1.9572726488113403 +199402,2,0.31418257585760784,1.450753247304193,-0.08191962390690835,,,,,,,,,,,,,1.9572726488113403 +199501,0,-0.37378732919939306,0.03485367321088963,-0.5882419354283478,0.5058215882616662,-0.10725920948294862,-0.3959720470960366,0.210943041564296,-1.5314657443220383,-0.8863975124670236,-0.23730908679360116,-0.16814274788616518,-0.9718299928258278,1.267782866548965,-0.2910724881500066,0.20460009219036931,1.6202976703643799 +199501,1,-1.0092336637780452,0.7958201309617158,1.0652162670597927,,,,,,,,,,1.663413533782179,0.7456311526478686,0.4419600012801827,1.5605579614639282 +199501,2,-1.4568814354611501,0.43869402077594005,0.368093032089145,,,,,,,,,,,,,1.5605579614639282 +200202,0,-0.48673663414592516,-0.5404369563759129,-0.5882419354283478,-0.08409336463203088,0.1441771662974643,0.457405498335207,-0.2452115319787184,0.035393722256166354,-1.0510058129291326,0.9581833684000187,-0.16814274788616518,1.548461097626366,-1.812216028287741,-1.388853942113607,-0.6875644123724536,0.7694168090820312 +200202,1,0.2403361409635047,0.8849077910382567,1.2694664273283303,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-0.5613893220144716,0.5486081838607788 +200202,2,0.11739768571107917,0.8279475694406527,0.7281031568859877,,,,,,,,,,,,,0.5486081838607788 +200209,0,-1.6162296836112464,-1.000669460045355,-0.8351539579881,-0.08409336463203088,0.1441771662974643,0.457405498335207,-0.2452115319787184,0.035393722256166354,-1.0510058129291326,0.9581833684000187,-0.16814274788616518,1.548461097626366,-1.0422163045785646,-0.2910724881500066,0.8737234706124865,0.7855092287063599 +200209,1,-3.4122525190502566,-1.609546691104888,-1.590035816431196,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,0.4419600012801827,0.6116605401039124 +200209,2,-1.6536663256076787,-1.741125851746451,-2.151977841488754,,,,,,,,,,,,,0.6116605401039124 +200210,0,0.7557057202659283,1.645667436053937,1.6339662676094229,-0.08409336463203088,0.1441771662974643,0.457405498335207,-0.2452115319787184,0.035393722256166354,-1.0510058129291326,0.9581833684000187,-0.16814274788616518,1.548461097626366,-0.27221658086938805,-1.388853942113607,0.20460009219036931,0.6116605401039124 +200210,1,0.9131814204397238,1.0630831111913384,0.24821562598564237,,,,,,,,,,-1.9017700713146695,-1.3914893931436731,0.4419600012801827,0.34409716725349426 +200210,2,2.18363903224963,0.282992601310055,0.09808543849151298,,,,,,,,,,,,,0.34409716725349426 +201601,0,-1.3903310737181822,-1.000669460045355,-0.8351539579881,0.9482578029319392,0.39561354207787724,1.3107830437664505,0.5758667003987075,-0.5069807084824429,0.595077191691958,-0.23730908679360116,0.6182048363947807,-0.5517814777504622,1.267782866548965,0.806708965813594,0.20460009219036931,1.8451265096664429 +201601,1,-0.7208714011453798,-0.9859330705691017,-1.1815354958941209,,,,,,,,,,1.663413533782179,-0.3229291202479022,1.1944719937511734,2.096728801727295 +201601,2,0.8061448012239295,-0.573365205752313,-0.441929748703751,,,,,,,,,,,,,2.096728801727295 +201602,0,-0.2608380242528609,0.03485367321088963,-0.5882419354283478,0.9482578029319392,0.39561354207787724,1.3107830437664505,0.5758667003987075,-0.5069807084824429,0.595077191691958,-0.23730908679360116,0.6182048363947807,-0.5517814777504622,1.267782866548965,-0.2910724881500066,0.8737234706124865,2.194056272506714 +201602,1,0.4325776493852816,-0.2732317899567748,-0.46665993495423924,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.310551991190808,2.5625829696655273 +201602,2,0.41257502093087217,-0.10626094735465771,-0.17192215510611902,,,,,,,,,,,,,2.5625829696655273 +203001,0,1.4334015499451211,0.6101443027976923,0.15249413225090913,0.9482578029319392,1.0242044815289095,1.026323861956036,0.11971212685569313,1.6625170144719943,1.2535103935403944,-0.23730908679360116,0.22503104425430823,1.9685096127017316,1.267782866548965,0.806708965813594,3.104134732019544,2.119049549102783 +203001,1,1.2976644372832777,0.3503818305790114,1.1673413471940615,,,,,,,,,,-0.47569662927593015,0.7456311526478686,1.1944719937511734,2.123490333557129 +203001,2,1.7900692519565728,0.20514189157711243,0.09808543849151298,,,,,,,,,,,,,2.123490333557129 +204201,0,1.0945536351055247,0.7252024287150527,0.3994061548106614,1.2432152793787876,1.2756408573093225,1.026323861956036,1.2144831033589276,-0.20566158029432668,1.9119435953888306,0.9581833684000187,0.6182048363947807,0.28831555240026907,1.267782866548965,0.806708965813594,0.8737234706124865,2.995732307434082 +204201,1,1.2015436830723893,0.5285571507320932,0.8609661067912552,,,,,,,,,,0.2373400917434395,0.7456311526478686,0.4419600012801827,2.7470014095306396 +204201,2,1.1013221364437225,-0.33981307655348536,2.258146187272569,,,,,,,,,,,,,2.7470014095306396 +204202,0,0.07800989058673549,1.4155511842192159,2.004334301449051,1.2432152793787876,1.2756408573093225,1.026323861956036,1.2144831033589276,-0.20566158029432668,1.9119435953888306,0.9581833684000187,0.6182048363947807,0.28831555240026907,1.267782866548965,0.806708965813594,3.104134732019544,2.443748712539673 +204202,1,0.52869840359617,1.330346091420961,1.0652162670597927,,,,,,,,,,1.663413533782179,0.7456311526478686,1.1944719937511734,2.330634593963623 +204202,2,1.3964994716635155,1.606454666770078,1.8081335312765157,,,,,,,,,,,,,2.330634593963623 +204602,0,0.7557057202659283,-0.08020445270647089,-0.7116979467082238,-0.8214870557491524,-0.9872865247143939,-1.5338087743376947,-0.61013519081313,-0.3261892315695732,-1.0510058129291326,-0.23730908679360116,-1.3476641243075844,-0.13173296267509654,-0.27221658086938805,-0.2910724881500066,-1.3566877907945707,1.2509961128234863 +204602,1,1.0093021746506123,-0.5404947701863974,-0.6709100952227768,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-1.0630639836617988,2.1358566284179688 +204602,2,0.9045372462971938,-0.573365205752313,-0.08191962390690835,,,,,,,,,,,,,2.1358566284179688 +205801,0,0.7557057202659283,0.6101443027976923,0.6463181773704137,1.0957365411553635,0.7727681057484966,1.026323861956036,0.4846357856901046,0.4572405017195292,0.7596854921540671,-0.835055314390411,-0.5613165400266386,0.28831555240026907,-1.0422163045785646,0.806708965813594,-0.6875644123724536,2.4117963314056396 +205801,1,0.8170606662288354,1.419433751497502,1.1673413471940615,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.310551991190808,2.4326751232147217 +205801,2,-0.27617209458197817,0.282992601310055,0.908108219284409,,,,,,,,,,,,,2.4326751232147217 +206401,0,0.4168578054263319,1.1854349323844948,2.621614357848432,0.6533003264850905,0.39561354207787724,-0.1115128652856221,1.3057140180675306,-0.38645305720719647,-0.7217892120049145,-0.835055314390411,-0.9544903321671111,0.28831555240026907,-1.0422163045785646,-0.2910724881500066,-0.6875644123724536,1.0017013549804688 +206401,1,0.9131814204397238,1.8648720518802064,0.8609661067912552,,,,,,,,,,-1.1887333502953,0.7456311526478686,0.19112267045651915,1.0539921522140503 +206401,2,-0.07938720443544948,1.295051827838308,0.368093032089145,,,,,,,,,,,,,1.0539921522140503 +207001,0,-0.37378732919939306,-0.1952625786238314,0.15249413225090913,-0.9689657939725767,-0.6101319610437744,-2.3871863197689382,0.8495594445245161,1.1804064093710083,-0.7217892120049145,0.9581833684000187,1.4045524206757267,1.1284125825510003,-1.0422163045785646,0.806708965813594,-0.6875644123724536,2.1718077659606934 +207001,1,0.4325776493852816,-0.7186700903394792,-0.05815961441716403,,,,,,,,,,0.2373400917434395,1.8141914255436393,-0.5613893220144716,2.110806703567505 +207001,2,-0.37456453965524245,-0.33981307655348536,-0.8019398735005937,,,,,,,,,,,,,2.110806703567505 +207301,0,-0.5996859390924573,-0.8856113341279945,-0.8351539579881,1.5381727558256364,1.149922669419116,1.026323861956036,1.0320212739417218,1.7227808401096176,1.4181186940025035,0.9581833684000187,0.22503104425430823,-0.13173296267509654,0.49778314283978853,0.806708965813594,-0.018441033950336395,1.3997167348861694 +207301,1,-0.4325091385127145,-0.5404947701863974,0.35034070611991114,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.310551991190808,1.212433934211731 +207301,2,-0.07938720443544948,-0.028410237621715174,0.45809556328835566,,,,,,,,,,,,,1.212433934211731 +207602,0,0.07800989058673549,0.9553186805497738,2.004334301449051,0.5058215882616662,0.5213317299680837,-0.1115128652856221,0.3934048709815018,0.6380319786323989,-0.7217892120049145,-0.835055314390411,-0.16814274788616518,-0.9718299928258278,-1.0422163045785646,-0.2910724881500066,-0.6875644123724536,1.0628407001495361 +207602,1,0.14421538675261625,1.419433751497502,1.1673413471940615,,,,,,,,,,-1.1887333502953,0.7456311526478686,-0.8122266528381351,2.5144002437591553 +207602,2,0.8061448012239295,1.9178575057018483,0.09808543849151298,,,,,,,,,,,,,2.5144002437591553 +207901,0,-0.37378732919939306,-1.000669460045355,-0.8351539579881,-0.674008317525728,0.7727681057484966,0.7418646801456215,-1.0662897643561442,0.3367128504442826,-0.8863975124670236,0.9581833684000187,1.4045524206757267,0.28831555240026907,-1.0422163045785646,-0.2910724881500066,-0.4645232862317478,1.8114674091339111 +207901,1,-0.528629892723603,0.4394694906555523,0.6567159465227176,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.059714660367144415,1.5518075227737427 +207901,2,-1.0633116551680928,0.282992601310055,0.368093032089145,,,,,,,,,,,,,1.5518075227737427 +208201,0,0.4168578054263319,-1.000669460045355,-0.8351539579881,0.5058215882616662,0.7727681057484966,0.7418646801456215,0.6670976151073104,0.09565754789378961,-0.5571809115428055,-0.835055314390411,-1.740837916448057,0.28831555240026907,-0.27221658086938805,-0.2910724881500066,-0.24148216009104212,0.7045097947120667 +208201,1,-0.4325091385127145,-0.4514071101098565,0.24821562598564237,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,-1.0630639836617988,0.5003288388252258 +208201,2,0.41257502093087217,-0.4955144960193704,0.368093032089145,,,,,,,,,,,,,0.5003288388252258 +210205,0,0.3039085004797998,-0.1952625786238314,0.3994061548106614,-0.8214870557491524,0.6470499178582901,1.026323861956036,0.3934048709815018,0.2764490248066594,-0.5571809115428055,0.36043714080320877,0.22503104425430823,-0.13173296267509654,-1.812216028287741,-0.2910724881500066,-1.3566877907945707,2.7511134147644043 +210205,1,0.8170606662288354,0.5285571507320932,1.0652162670597927,,,,,,,,,,-1.1887333502953,-0.3229291202479022,0.19112267045651915,2.995732307434082 +210205,2,0.019005240637814846,0.6722461499747677,0.7281031568859877,,,,,,,,,,,,,2.995732307434082 +210301,0,-0.03493941435979663,-1.000669460045355,-0.8351539579881,-0.37905084107887943,0.6470499178582901,0.7418646801456215,0.4846357856901046,0.5777681529947757,0.7596854921540671,1.5559295959968287,0.6182048363947807,1.1284125825510003,0.49778314283978853,0.806708965813594,0.20460009219036931,2.3709535598754883 +210301,1,-0.14414687588004912,-1.1641083907221836,-1.4879107362969273,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.310551991190808,2.317275285720825 +210301,2,0.019005240637814846,-0.33981307655348536,-0.7119373423013831,,,,,,,,,,,,,2.317275285720825 +210302,0,0.4168578054263319,0.4950861768803317,-0.3413299128685955,-0.37905084107887943,0.6470499178582901,0.7418646801456215,0.4846357856901046,0.5777681529947757,0.7596854921540671,1.5559295959968287,0.6182048363947807,1.1284125825510003,-0.27221658086938805,-0.2910724881500066,-0.4645232862317478,2.317275285720825 +210302,1,0.14421538675261625,0.6176448108086341,1.0652162670597927,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.310551991190808,2.2844321727752686 +210302,2,1.1013221364437225,0.7500968597077102,0.368093032089145,,,,,,,,,,,,,2.2844321727752686 +210303,0,0.4168578054263319,-0.1952625786238314,-0.3413299128685955,-0.37905084107887943,0.6470499178582901,0.7418646801456215,0.4846357856901046,0.5777681529947757,0.7596854921540671,1.5559295959968287,0.6182048363947807,1.1284125825510003,-0.27221658086938805,-0.2910724881500066,-0.4645232862317478,2.2844321727752686 +210303,1,0.7209399120179469,0.6176448108086341,0.24821562598564237,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.8122266528381351,2.235513687133789 +210303,2,0.41257502093087217,-0.10626094735465771,-0.6219348111021723,,,,,,,,,,,,,2.235513687133789 +210304,0,-0.03493941435979663,-0.8856113341279945,-0.7116979467082238,-0.37905084107887943,0.6470499178582901,0.7418646801456215,0.4846357856901046,0.5777681529947757,0.7596854921540671,1.5559295959968287,0.6182048363947807,1.1284125825510003,-0.27221658086938805,0.806708965813594,-0.4645232862317478,2.3318495750427246 +210304,1,-0.4325091385127145,-0.09505646980369299,0.45246578625417994,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.8122266528381351,2.3457021713256836 +210304,2,0.2157901307843435,-0.2619623668205428,-0.08191962390690835,,,,,,,,,,,,,2.3457021713256836 +210502,0,-1.164432463825118,-1.000669460045355,-0.8351539579881,0.06338537359139342,-0.35869558526336154,0.457405498335207,-0.06274970256151263,-2.0135763494230243,-0.22796431061858732,-0.835055314390411,-0.9544903321671111,0.7083640674756347,-0.27221658086938805,-0.2910724881500066,0.8737234706124865,1.8747963905334473 +210502,1,-1.585958189043376,-1.520459031028347,-1.1815354958941209,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.059714660367144415,1.6077970266342163 +210502,2,-0.9649192100948284,-1.585424432280566,-1.791967716691911,,,,,,,,,,,,,1.6077970266342163 +210503,0,1.0945536351055247,-1.000669460045355,-0.8351539579881,0.06338537359139342,-0.35869558526336154,0.457405498335207,-0.06274970256151263,-2.0135763494230243,-0.22796431061858732,-0.835055314390411,-0.9544903321671111,0.7083640674756347,0.49778314283978853,-0.2910724881500066,-0.24148216009104212,1.9138813018798828 +210503,1,-1.1053544179889336,-1.0750207306456427,-1.1815354958941209,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-0.5613893220144716,1.8166335821151733 +210503,2,-0.37456453965524245,-1.2740215933487957,-0.35192721750454037,,,,,,,,,,,,,1.8166335821151733 +211203,0,0.8686550252124604,1.4155511842192159,1.2635982337697944,1.0957365411553635,1.401359045199529,1.026323861956036,1.3057140180675306,1.361197886283878,1.0889020930782853,-0.23730908679360116,-0.5613165400266386,1.1284125825510003,0.49778314283978853,-0.2910724881500066,0.8737234706124865,2.1502699851989746 +211203,1,1.4899059457050545,0.3503818305790114,2.494967388939556,,,,,,,,,,0.2373400917434395,0.7456311526478686,0.19112267045651915,2.5552432537078857 +211203,2,0.8061448012239295,0.7500968597077102,0.7281031568859877,,,,,,,,,,,,,2.5552432537078857 +211903,0,-0.37378732919939306,-0.770553208210634,-0.7116979467082238,1.390694017602212,0.5213317299680837,1.026323861956036,0.7583285298159133,0.9996149324581385,0.9242937926161762,-0.23730908679360116,0.22503104425430823,-1.3918785079011935,0.49778314283978853,-1.388853942113607,0.20460009219036931,1.745882511138916 +211903,1,0.048094632541727786,-0.80775775041602,-0.16028469455143282,,,,,,,,,,-1.9017700713146695,0.7456311526478686,0.4419600012801827,1.9377866983413696 +211903,2,-0.7681343199482997,-0.729066625218198,-0.8919424046998043,,,,,,,,,,,,,1.9377866983413696 +211904,0,0.9816043301589925,-0.770553208210634,-0.8351539579881,1.390694017602212,0.5213317299680837,1.026323861956036,0.7583285298159133,0.9996149324581385,0.9242937926161762,-0.23730908679360116,0.22503104425430823,-1.3918785079011935,1.267782866548965,0.806708965813594,0.20460009219036931,1.9377866983413696 +211904,1,-0.6247506469344914,-1.431371370951806,0.35034070611991114,,,,,,,,,,-1.9017700713146695,-0.3229291202479022,-0.310551991190808,2.0661697387695312 +211904,2,-0.7681343199482997,-0.8847680446840831,-0.8919424046998043,,,,,,,,,,,,,2.0661697387695312 +212301,0,1.207502940052057,-0.5404369563759129,0.2759501435307853,0.2108641118148177,0.5213317299680837,0.7418646801456215,0.3021739562728989,0.6380319786323989,0.595077191691958,-0.835055314390411,-0.16814274788616518,1.1284125825510003,1.267782866548965,-0.2910724881500066,0.8737234706124865,1.8401150703430176 +212301,1,-0.4325091385127145,-0.3623194500333156,0.8609661067912552,,,,,,,,,,1.663413533782179,-0.3229291202479022,-0.059714660367144415,1.817098617553711 +212301,2,-0.07938720443544948,-0.33981307655348536,-2.5119879662855964,,,,,,,,,,,,,1.817098617553711 +212401,0,1.0945536351055247,0.4950861768803317,0.029038120971032973,0.6533003264850905,0.6470499178582901,1.026323861956036,0.11971212685569313,0.035393722256166354,1.0889020930782853,-0.835055314390411,0.22503104425430823,1.9685096127017316,-1.812216028287741,-0.2910724881500066,-0.6875644123724536,2.4590423107147217 +212401,1,0.4325776493852816,0.17220651042592966,-0.568785015088508,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-0.5613893220144716,2.576079845428467 +212401,2,0.31418257585760784,0.7500968597077102,0.18808796969072364,,,,,,,,,,,,,2.576079845428467 +212502,0,-0.5996859390924573,-1.000669460045355,-0.8351539579881,0.06338537359139342,1.0242044815289095,0.17294631652479245,1.3057140180675306,0.09565754789378961,-0.7217892120049145,0.36043714080320877,-0.9544903321671111,-1.8119270229765592,-1.812216028287741,-1.388853942113607,-0.24148216009104212,1.311554193496704 +212502,1,0.2403361409635047,0.7067324708851749,-0.568785015088508,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,-0.059714660367144415,1.008375883102417 +212502,2,0.41257502093087217,0.1272911818441699,-0.8919424046998043,,,,,,,,,,,,,1.008375883102417 +212601,0,2.44994529446391,0.7252024287150527,2.004334301449051,1.2432152793787876,0.6470499178582901,0.7418646801456215,1.4881758474847362,1.602253188834371,0.595077191691958,-0.23730908679360116,1.4045524206757267,1.9685096127017316,1.267782866548965,-0.2910724881500066,-0.6875644123724536,1.6705849170684814 +212601,1,1.0093021746506123,0.7067324708851749,1.4737165875968679,,,,,,,,,,1.663413533782179,-0.3229291202479022,-0.5613893220144716,1.620093584060669 +212601,2,0.019005240637814846,0.9057982791735953,0.5480980944875663,,,,,,,,,,,,,1.620093584060669 +212801,0,0.6427564153193962,0.14991179912825014,-0.2178739015887193,-1.4114020086428494,-1.2387229004948068,-0.1115128652856221,-0.7013661055217327,0.035393722256166354,-1.2156141133912417,-0.23730908679360116,0.22503104425430823,-0.13173296267509654,0.49778314283978853,-1.388853942113607,1.319805722893898,0.5803626775741577 +212801,1,-0.8169921553562683,-0.3623194500333156,-0.6709100952227768,,,,,,,,,,1.663413533782179,-1.3914893931436731,-0.310551991190808,0.7051945924758911 +212801,2,0.019005240637814846,0.20514189157711243,0.008082907292302316,,,,,,,,,,,,,0.7051945924758911 +213402,0,0.07800989058673549,-0.6554950822932735,-0.7116979467082238,-0.8214870557491524,-1.7415956520556326,-0.9648904107168657,-2.069829826150776,-2.194367826335894,-1.2156141133912417,-0.835055314390411,1.4045524206757267,0.28831555240026907,1.267782866548965,-1.388853942113607,-0.4645232862317478,1.4532784223556519 +213402,1,-0.14414687588004912,-1.2531960507987243,-0.8751602554913144,,,,,,,,,,0.2373400917434395,-1.3914893931436731,-0.8122266528381351,0.9142302870750427 +213402,2,-0.27617209458197817,-1.5075737225476233,-0.441929748703751,,,,,,,,,,,,,0.9142302870750427 +213702,0,-1.0514831588785858,0.4950861768803317,0.15249413225090913,-0.5265295793023037,0.1441771662974643,1.026323861956036,0.210943041564296,0.2161851991690361,0.9242937926161762,0.36043714080320877,-0.16814274788616518,-0.9718299928258278,1.267782866548965,0.806708965813594,-0.24148216009104212,2.113461971282959 +213702,1,0.52869840359617,0.4394694906555523,0.7588410266569864,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.310551991190808,2.2875821590423584 +213702,2,-0.27617209458197817,0.20514189157711243,0.908108219284409,,,,,,,,,,,,,2.2875821590423584 +213901,0,-0.03493941435979663,0.7252024287150527,0.2759501435307853,1.2432152793787876,0.8984862936387031,1.026323861956036,0.028481212147090252,0.6380319786323989,1.5827269944646125,1.5559295959968287,-0.5613165400266386,0.7083640674756347,1.267782866548965,-0.2910724881500066,-0.9106055385131593,2.497934341430664 +213901,1,1.0093021746506123,0.3503818305790114,0.14609054585137357,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.310551991190808,2.995732307434082 +213901,2,0.5109674660041365,0.6722461499747677,0.2780905008899343,,,,,,,,,,,,,2.995732307434082 +215302,0,0.529807110372864,0.8402605546324132,1.2635982337697944,0.2108641118148177,0.018458978407257843,-0.1115128652856221,0.3021739562728989,0.3969766760819059,0.10125229030563083,0.9581833684000187,-0.9544903321671111,-1.8119270229765592,-0.27221658086938805,-0.2910724881500066,-0.9106055385131593,1.2121824026107788 +215302,1,1.0093021746506123,0.7067324708851749,1.2694664273283303,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.8122266528381351,1.4358454942703247 +215302,2,0.41257502093087217,0.8279475694406527,1.3581208752804623,,,,,,,,,,,,,1.4358454942703247 +215303,0,0.9816043301589925,1.875783687888658,0.3994061548106614,0.2108641118148177,0.018458978407257843,-0.1115128652856221,0.3021739562728989,0.3969766760819059,0.10125229030563083,0.9581833684000187,-0.9544903321671111,-1.8119270229765592,-0.27221658086938805,-0.2910724881500066,-0.6875644123724536,1.2121824026107788 +215303,1,1.2976644372832777,1.419433751497502,0.7588410266569864,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.5613893220144716,1.4358454942703247 +215303,2,0.11739768571107917,1.1393504083724229,0.18808796969072364,,,,,,,,,,,,,1.4358454942703247 +215501,0,-0.5996859390924573,-0.8856113341279945,-0.3413299128685955,0.06338537359139342,1.401359045199529,1.026323861956036,-0.518904276104527,-0.024870103381456905,0.7596854921540671,1.5559295959968287,0.22503104425430823,-0.13173296267509654,1.267782866548965,-0.2910724881500066,0.20460009219036931,2.9676480293273926 +215501,1,-1.393716680621599,-1.1641083907221836,-0.568785015088508,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.310551991190808,2.995732307434082 +215501,2,-0.5713494298017712,-1.1183201738829107,-1.521960123094279,,,,,,,,,,,,,2.995732307434082 +215802,0,0.19095919553326762,-0.08020445270647089,0.029038120971032973,0.6533003264850905,1.2756408573093225,1.026323861956036,-0.06274970256151263,0.5777681529947757,0.10125229030563083,0.36043714080320877,-0.16814274788616518,-0.13173296267509654,0.49778314283978853,-1.388853942113607,-0.4645232862317478,1.9563919305801392 +215802,1,0.14421538675261625,0.6176448108086341,0.35034070611991114,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.059714660367144415,1.747433066368103 +215802,2,0.11739768571107917,0.5165447305088826,0.09808543849151298,,,,,,,,,,,,,1.747433066368103 +216401,0,1.320452244998589,0.8402605546324132,-0.3413299128685955,-0.37905084107887943,0.7727681057484966,1.026323861956036,-0.1539806172701155,0.7585596299076455,-0.06335601015647824,0.36043714080320877,-0.16814274788616518,-0.9718299928258278,0.49778314283978853,1.9044904197771946,-0.4645232862317478,1.9143301248550415 +216401,1,0.6248191578070585,0.4394694906555523,0.35034070611991114,,,,,,,,,,0.9503768127628092,1.8141914255436393,-0.5613893220144716,2.371264696121216 +216401,2,1.1997145815169867,0.282992601310055,0.368093032089145,,,,,,,,,,,,,2.371264696121216 +216701,0,-0.37378732919939306,-0.770553208210634,-0.5882419354283478,-0.23157210285545515,-0.35869558526336154,0.17294631652479245,0.7583285298159133,1.4817255375591245,0.10125229030563083,-0.835055314390411,-0.9544903321671111,-0.9718299928258278,-0.27221658086938805,1.9044904197771946,-0.24148216009104212,1.6107815504074097 +216701,1,0.8170606662288354,-0.18414412988023388,0.7588410266569864,,,,,,,,,,1.663413533782179,-1.3914893931436731,1.1944719937511734,1.8091163635253906 +216701,2,0.5109674660041365,-0.028410237621715174,0.09808543849151298,,,,,,,,,,,,,1.8091163635253906 +219003,0,-1.0514831588785858,-1.000669460045355,-0.8351539579881,-0.8214870557491524,0.018458978407257843,0.457405498335207,0.940790359233119,1.4817255375591245,-1.2156141133912417,1.5559295959968287,0.6182048363947807,-0.13173296267509654,1.267782866548965,1.9044904197771946,1.9889291013160153,1.9998550415039062 +219003,1,-0.7208714011453798,-0.09505646980369299,-0.7730351753570456,,,,,,,,,,0.9503768127628092,0.7456311526478686,1.1944719937511734,1.98921799659729 +219003,2,0.6093599110774008,0.8279475694406527,1.178115812882041,,,,,,,,,,,,,1.98921799659729 +220301,0,0.529807110372864,0.3800280509629712,0.15249413225090913,0.2108641118148177,0.018458978407257843,-1.2493495925272802,0.4846357856901046,-0.024870103381456905,-0.5571809115428055,-0.835055314390411,-0.16814274788616518,-0.13173296267509654,-0.27221658086938805,0.806708965813594,-0.9106055385131593,1.2697359323501587 +220301,1,1.970509716759497,0.5285571507320932,0.45246578625417994,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.8122266528381351,1.463937520980835 +220301,2,1.1997145815169867,-0.2619623668205428,0.5480980944875663,,,,,,,,,,,,,1.463937520980835 +220402,0,-1.0514831588785858,-0.3103207045411919,0.029038120971032973,1.2432152793787876,0.7727681057484966,0.457405498335207,-0.06274970256151263,-0.024870103381456905,0.10125229030563083,1.5559295959968287,1.0113786285352542,-1.8119270229765592,1.267782866548965,-0.2910724881500066,0.20460009219036931,1.90995192527771 +220402,1,-0.14414687588004912,-0.4514071101098565,-0.36453485481997044,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,0.4419600012801827,2.2336788177490234 +220402,2,-0.7681343199482997,0.282992601310055,-0.441929748703751,,,,,,,,,,,,,2.2336788177490234 +221401,0,-0.37378732919939306,-0.42537883045855246,-0.8351539579881,-0.674008317525728,-0.10725920948294862,0.457405498335207,1.2144831033589276,-0.20566158029432668,-0.7217892120049145,0.36043714080320877,0.22503104425430823,-2.2319755380519246,-0.27221658086938805,-1.388853942113607,-0.6875644123724536,1.6755558252334595 +221401,1,-0.4325091385127145,-0.09505646980369299,0.04396546571710477,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.310551991190808,1.9282851219177246 +221401,2,-0.6697418748750354,0.36084331104299755,0.18808796969072364,,,,,,,,,,,,,1.9282851219177246 +221402,0,-1.3903310737181822,-1.000669460045355,-0.8351539579881,-0.674008317525728,-0.10725920948294862,0.457405498335207,1.2144831033589276,-0.20566158029432668,-0.7217892120049145,0.36043714080320877,0.22503104425430823,-2.2319755380519246,0.49778314283978853,-0.2910724881500066,-0.4645232862317478,2.1510770320892334 +221402,1,-1.393716680621599,-1.431371370951806,-0.9772853356255832,,,,,,,,,,0.9503768127628092,-1.3914893931436731,-0.5613893220144716,2.2393290996551514 +221402,2,-0.37456453965524245,-1.1961708836158533,-0.7119373423013831,,,,,,,,,,,,,2.2393290996551514 +221702,0,-0.5996859390924573,-1.000669460045355,-0.8351539579881,0.6533003264850905,0.39561354207787724,0.457405498335207,0.210943041564296,1.2406702350086316,0.430468891229849,-0.835055314390411,-0.9544903321671111,-0.9718299928258278,-1.0422163045785646,-0.2910724881500066,-0.6875644123724536,1.0973960161209106 +221702,1,-0.6247506469344914,-1.609546691104888,-0.9772853356255832,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.310551991190808,1.0036698579788208 +221702,2,-0.6697418748750354,-1.6632751420135086,-0.441929748703751,,,,,,,,,,,,,1.0036698579788208 +223701,0,0.3039085004797998,0.3800280509629712,-0.2178739015887193,1.6856514940490606,1.0242044815289095,1.3107830437664505,0.3934048709815018,1.9035723170224874,1.5827269944646125,-0.835055314390411,-0.9544903321671111,1.9685096127017316,1.267782866548965,0.806708965813594,1.7658879751753094,2.1875836849212646 +223701,1,0.9131814204397238,0.7958201309617158,1.2694664273283303,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.310551991190808,2.3642489910125732 +223701,2,0.8061448012239295,2.307111054366561,0.908108219284409,,,,,,,,,,,,,2.3642489910125732 +223702,0,0.6427564153193962,1.3004930583018552,2.1277903127289273,1.6856514940490606,1.0242044815289095,1.3107830437664505,0.3934048709815018,1.9035723170224874,1.5827269944646125,-0.835055314390411,-0.9544903321671111,1.9685096127017316,0.49778314283978853,0.806708965813594,-0.6875644123724536,2.3642489910125732 +223702,1,0.4325776493852816,2.4884856724159925,2.1885921485367494,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.310551991190808,2.375584602355957 +223702,2,1.593284361810044,1.606454666770078,2.3481487184717795,,,,,,,,,,,,,2.375584602355957 +223703,0,0.4168578054263319,2.6811905693101816,2.621614357848432,1.6856514940490606,1.0242044815289095,1.3107830437664505,0.3934048709815018,1.9035723170224874,1.5827269944646125,-0.835055314390411,-0.9544903321671111,1.9685096127017316,0.49778314283978853,-0.2910724881500066,0.20460009219036931,2.274500846862793 +223703,1,0.8170606662288354,1.2412584313444202,0.8609661067912552,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-1.0630639836617988,2.3008182048797607 +223703,2,-0.07938720443544948,0.7500968597077102,0.5480980944875663,,,,,,,,,,,,,2.3008182048797607 +224901,0,0.19095919553326762,-0.08020445270647089,-0.2178739015887193,-1.4114020086428494,-1.615877464165426,-1.5338087743376947,0.11971212685569313,-0.3261892315695732,-1.2156141133912417,-0.835055314390411,-0.16814274788616518,-0.13173296267509654,-0.27221658086938805,-0.2910724881500066,3.104134732019544,2.0023252964019775 +224901,1,-0.528629892723603,-0.00596880972715211,-0.16028469455143282,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.5613893220144716,2.0037927627563477 +224901,2,-0.07938720443544948,-1.1183201738829107,-0.8019398735005937,,,,,,,,,,,,,2.0037927627563477 +225401,0,-1.9550775984508428,-1.460901963714797,-1.3289780031076046,-1.5588807468662738,-0.9872865247143939,-2.102727137958524,-1.4312134231905558,-0.4467168828448197,-1.0510058129291326,-0.23730908679360116,-0.16814274788616518,-0.5517814777504622,-2.5822157519969178,-1.388853942113607,-0.6875644123724536,0.9632202386856079 +225401,1,-2.258803468519595,-1.8768096713345106,-1.6921608965654649,,,,,,,,,,-1.9017700713146695,-0.3229291202479022,-1.0630639836617988,0.6160309314727783 +225401,2,-2.5391983312670576,-2.0525286906782214,-1.8819702478911218,,,,,,,,,,,,,0.6160309314727783 +225701,0,0.19095919553326762,-1.000669460045355,-0.8351539579881,-0.674008317525728,-0.7358501489339809,-0.3959720470960366,-0.61013519081313,-2.073840175060648,-0.06335601015647824,1.5559295959968287,0.22503104425430823,0.28831555240026907,0.49778314283978853,1.9044904197771946,3.104134732019544,-0.15356546640396118 +225701,1,0.9131814204397238,-0.9859330705691017,-0.46665993495423924,,,,,,,,,,0.2373400917434395,1.8141914255436393,1.1944719937511734,-0.1325078010559082 +225701,2,0.8061448012239295,-0.4955144960193704,-0.17192215510611902,,,,,,,,,,,,,-0.1325078010559082 +226002,0,0.19095919553326762,0.7252024287150527,0.3994061548106614,-0.9689657939725767,-0.8615683368241874,-0.1115128652856221,-0.518904276104527,-0.5069807084824429,-1.0510058129291326,0.36043714080320877,0.6182048363947807,0.7083640674756347,0.49778314283978853,0.806708965813594,-0.24148216009104212,1.5481950044631958 +226002,1,0.33645689517439314,0.5285571507320932,0.6567159465227176,,,,,,,,,,0.2373400917434395,0.7456311526478686,1.1944719937511734,1.4967477321624756 +226002,2,-0.4729569847285068,0.04944047211122737,0.2780905008899343,,,,,,,,,,,,,1.4967477321624756 +226502,0,-1.8421282935043108,-0.770553208210634,-0.8351539579881,-0.8214870557491524,-0.2329773973731551,-0.9648904107168657,-0.1539806172701155,-0.6275083597576895,-0.7217892120049145,0.9581833684000187,1.7977262128162,-1.3918785079011935,-0.27221658086938805,-0.2910724881500066,-0.24148216009104212,0.20776191353797913 +226502,1,-1.393716680621599,-0.7186700903394792,-1.079410415759852,,,,,,,,,,0.2373400917434395,-1.3914893931436731,-1.3139013144854623,0.12469127029180527 +226502,2,-0.7681343199482997,-0.573365205752313,-0.5319322799029617,,,,,,,,,,,,,0.12469127029180527 +226705,0,-1.164432463825118,-1.3458438377974367,-1.2055219918277285,-1.2639232704194252,-1.2387229004948068,-1.8182679561481092,-1.5224443378991586,-2.2546316519735177,-1.3802224138533508,-2.628293997180841,0.6182048363947807,-0.5517814777504622,-0.27221658086938805,-1.388853942113607,0.8737234706124865,0.4794849455356598 +226705,1,-1.393716680621599,-1.0750207306456427,-1.8964110568340025,,,,,,,,,,0.9503768127628092,-1.3914893931436731,0.19112267045651915,0.6314120292663574 +226705,2,-0.7681343199482997,-1.9746779809452786,-1.251952529496647,,,,,,,,,,,,,0.6314120292663574 +226706,0,-0.5996859390924573,-0.1952625786238314,-0.8351539579881,-1.2639232704194252,-1.2387229004948068,-1.8182679561481092,-1.5224443378991586,-2.2546316519735177,-1.3802224138533508,-2.628293997180841,0.6182048363947807,-0.5517814777504622,0.49778314283978853,-1.388853942113607,0.20460009219036931,0.6314120292663574 +226706,1,0.048094632541727786,-0.00596880972715211,0.24821562598564237,,,,,,,,,,0.9503768127628092,-1.3914893931436731,-1.3139013144854623,-0.1256033331155777 +226706,2,-0.07938720443544948,-0.573365205752313,-0.08191962390690835,,,,,,,,,,,,,-0.1256033331155777 +226707,0,-0.37378732919939306,-0.42537883045855246,0.15249413225090913,-1.2639232704194252,-1.2387229004948068,-1.8182679561481092,-1.5224443378991586,-2.2546316519735177,-1.3802224138533508,-2.628293997180841,0.6182048363947807,-0.5517814777504622,0.49778314283978853,-1.388853942113607,-1.3566877907945707,0.3013274669647217 +226707,1,0.8170606662288354,-0.3623194500333156,-0.9772853356255832,,,,,,,,,,-1.9017700713146695,-1.3914893931436731,-0.8122266528381351,0.012707451358437538 +226707,2,-1.2600965453146213,-0.028410237621715174,-1.6119626542934897,,,,,,,,,,,,,0.012707451358437538 +227101,0,-0.48673663414592516,-0.770553208210634,-0.09441789030884316,-1.1164445321960008,-0.8615683368241874,0.457405498335207,-0.7013661055217327,-0.38645305720719647,-1.0510058129291326,0.36043714080320877,0.22503104425430823,-0.5517814777504622,0.49778314283978853,0.806708965813594,-0.24148216009104212,-0.6931471824645996 +227101,1,-2.258803468519595,-1.2531960507987243,-1.590035816431196,,,,,,,,,,1.663413533782179,0.7456311526478686,-0.5613893220144716,-0.6931471824645996 +227101,2,-0.5713494298017712,-0.4955144960193704,-1.6119626542934897,,,,,,,,,,,,,-0.6931471824645996 +227102,0,-0.14788871930632877,-2.0361925933015996,-1.9462580595069854,-1.1164445321960008,-0.8615683368241874,0.457405498335207,-0.7013661055217327,-0.38645305720719647,-1.0510058129291326,0.36043714080320877,0.22503104425430823,-0.5517814777504622,1.267782866548965,-0.2910724881500066,-0.24148216009104212,-0.6931471824645996 +227102,1,0.52869840359617,-0.3623194500333156,0.963091186925524,,,,,,,,,,1.663413533782179,0.7456311526478686,0.19112267045651915,1.45352041721344 +227102,2,-0.4729569847285068,-0.6512159154852555,-0.17192215510611902,,,,,,,,,,,,,1.45352041721344 +227802,0,1.207502940052057,0.4950861768803317,0.029038120971032973,2.1280877087193333,0.7727681057484966,0.457405498335207,0.5758667003987075,0.8790872811828919,2.07655189585094,1.5559295959968287,1.7977262128162,1.1284125825510003,0.49778314283978853,-1.388853942113607,-0.6875644123724536,2.2269363403320312 +227802,1,1.1054229288615007,0.9739954511147976,0.8609661067912552,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.059714660367144415,2.3035826683044434 +227802,2,1.298107026590251,0.6722461499747677,-0.17192215510611902,,,,,,,,,,,,,2.3035826683044434 +228502,0,-0.48673663414592516,-0.6554950822932735,-0.7116979467082238,1.390694017602212,1.149922669419116,1.026323861956036,1.3969449327761334,1.3009340606462547,0.7596854921540671,0.36043714080320877,1.4045524206757267,1.9685096127017316,0.49778314283978853,0.806708965813594,0.8737234706124865,2.8056232929229736 +228502,1,-1.2975959264107106,0.08311885034938876,0.14609054585137357,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.059714660367144415,2.3390393257141113 +228502,2,-0.37456453965524245,0.9057982791735953,0.008082907292302316,,,,,,,,,,,,,2.3390393257141113 +229601,0,1.9981480746777818,0.6101443027976923,0.6463181773704137,-0.8214870557491524,-0.6101319610437744,0.457405498335207,-0.7013661055217327,-0.8685636623081825,-0.8863975124670236,-0.23730908679360116,-0.9544903321671111,-0.9718299928258278,1.267782866548965,0.806708965813594,0.20460009219036931,2.7691972255706787 +229601,1,1.970509716759497,0.08311885034938876,0.5545908663884488,,,,,,,,,,0.9503768127628092,0.7456311526478686,0.4419600012801827,2.995732307434082 +229601,2,2.478816367469423,-0.41766378628642786,0.18808796969072364,,,,,,,,,,,,,2.995732307434082 +230101,0,0.07800989058673549,0.8402605546324132,2.004334301449051,1.390694017602212,1.0242044815289095,1.026323861956036,1.3969449327761334,1.361197886283878,1.9119435953888306,0.9581833684000187,-0.5613165400266386,0.28831555240026907,0.49778314283978853,0.806708965813594,-0.6875644123724536,2.4346892833709717 +230101,1,1.0093021746506123,0.5285571507320932,0.6567159465227176,,,,,,,,,,-0.47569662927593015,1.8141914255436393,1.1944719937511734,2.665797710418701 +230101,2,0.2157901307843435,0.04944047211122737,1.448123406479673,,,,,,,,,,,,,2.665797710418701 +230102,0,-0.2608380242528609,-0.3103207045411919,-0.3413299128685955,1.390694017602212,1.0242044815289095,1.026323861956036,1.3969449327761334,1.361197886283878,1.9119435953888306,0.9581833684000187,-0.5613165400266386,0.28831555240026907,-0.27221658086938805,1.9044904197771946,0.8737234706124865,2.665797710418701 +230102,1,0.2403361409635047,-0.7186700903394792,-0.05815961441716403,,,,,,,,,,0.9503768127628092,0.7456311526478686,0.4419600012801827,2.415329694747925 +230102,2,1.0029296913704582,-0.41766378628642786,0.008082907292302316,,,,,,,,,,,,,2.415329694747925 +232201,0,0.8686550252124604,2.3360161915581,1.6339662676094229,0.6533003264850905,0.5213317299680837,1.3107830437664505,1.3057140180675306,0.035393722256166354,-0.06335601015647824,0.9581833684000187,1.7977262128162,1.1284125825510003,-2.5822157519969178,-0.2910724881500066,0.8737234706124865,2.390430450439453 +232201,1,1.1054229288615007,0.7958201309617158,1.371591507462599,,,,,,,,,,0.2373400917434395,-0.3229291202479022,1.1944719937511734,2.2659099102020264 +232201,2,0.8061448012239295,0.5165447305088826,0.8181056880851983,,,,,,,,,,,,,2.2659099102020264 +233301,0,-0.48673663414592516,-0.3103207045411919,0.15249413225090913,0.2108641118148177,0.5213317299680837,1.026323861956036,0.3934048709815018,0.6982958042700221,0.2658605907677399,-0.835055314390411,0.6182048363947807,1.1284125825510003,0.49778314283978853,-0.2910724881500066,-0.9106055385131593,2.2816061973571777 +233301,1,0.14421538675261625,-0.09505646980369299,-0.8751602554913144,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-1.0630639836617988,2.4504997730255127 +233301,2,-2.1456285509740005,-0.33981307655348536,-0.5319322799029617,,,,,,,,,,,,,2.4504997730255127 +235901,0,-0.7126352440389895,-0.42537883045855246,-0.4647859241484716,-1.5588807468662738,-0.10725920948294862,-1.8182679561481092,0.5758667003987075,-0.3261892315695732,-0.8863975124670236,-1.432801541987221,0.22503104425430823,0.7083640674756347,-0.27221658086938805,0.806708965813594,-0.6875644123724536,1.6407814025878906 +235901,1,-0.7208714011453798,-0.09505646980369299,-0.16028469455143282,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.059714660367144415,1.3976569175720215 +235901,2,-0.5713494298017712,0.1272911818441699,0.18808796969072364,,,,,,,,,,,,,1.3976569175720215 +235903,0,-0.8255845489855216,-0.3103207045411919,-0.4647859241484716,-1.5588807468662738,-0.10725920948294862,-1.8182679561481092,0.5758667003987075,-0.3261892315695732,-0.8863975124670236,-1.432801541987221,0.22503104425430823,0.7083640674756347,-0.27221658086938805,0.806708965813594,3.104134732019544,2.0522682666778564 +235903,1,-2.0665619600978182,-0.9859330705691017,-0.6709100952227768,,,,,,,,,,0.2373400917434395,-1.3914893931436731,-0.059714660367144415,-0.28334322571754456 +235903,2,-0.27617209458197817,-1.1961708836158533,-0.35192721750454037,,,,,,,,,,,,,-0.28334322571754456 +236002,0,1.320452244998589,-1.1157275859627156,-0.9586099692679761,-0.37905084107887943,-0.10725920948294862,0.7418646801456215,1.3057140180675306,0.09565754789378961,0.10125229030563083,1.5559295959968287,1.4045524206757267,1.548461097626366,-1.0422163045785646,0.806708965813594,0.6506823444717807,0.33895906805992126 +236002,1,-0.24026763009093757,-1.520459031028347,-1.8964110568340025,,,,,,,,,,0.2373400917434395,-1.3914893931436731,0.4419600012801827,1.5765001773834229 +236002,2,-0.6697418748750354,-1.429723012814681,-1.4319575918950684,,,,,,,,,,,,,1.5765001773834229 +236203,0,-0.14788871930632877,-0.770553208210634,-0.7116979467082238,-0.9689657939725767,-0.6101319610437744,0.17294631652479245,1.3969449327761334,1.2406702350086316,-0.5571809115428055,0.9581833684000187,-0.16814274788616518,-0.13173296267509654,-1.0422163045785646,-0.2910724881500066,-0.24148216009104212,0.9458051919937134 +236203,1,0.52869840359617,-1.1641083907221836,-0.568785015088508,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.8122266528381351,1.0908249616622925 +236203,2,0.019005240637814846,-0.4955144960193704,-0.6219348111021723,,,,,,,,,,,,,1.0908249616622925 +236901,0,0.07800989058673549,-1.000669460045355,-0.8351539579881,0.8007790647085149,1.2756408573093225,0.17294631652479245,-0.2452115319787184,0.2161851991690361,0.2658605907677399,1.5559295959968287,1.7977262128162,1.1284125825510003,0.49778314283978853,-0.2910724881500066,-0.24148216009104212,2.136242389678955 +236901,1,0.4325776493852816,0.08311885034938876,0.04396546571710477,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.059714660367144415,2.279343366622925 +236901,2,0.9045372462971938,-0.41766378628642786,0.7281031568859877,,,,,,,,,,,,,2.279343366622925 +238301,0,-0.9385338539320537,0.03485367321088963,-0.5882419354283478,0.8007790647085149,-0.6101319610437744,-0.1115128652856221,1.2144831033589276,-0.08513392901908017,0.10125229030563083,-0.835055314390411,0.22503104425430823,0.28831555240026907,-0.27221658086938805,-0.2910724881500066,-0.9106055385131593,1.3579683303833008 +238301,1,0.14421538675261625,0.17220651042592966,1.0652162670597927,,,,,,,,,,-1.1887333502953,0.7456311526478686,-0.8122266528381351,1.183586597442627 +238301,2,-0.7681343199482997,0.20514189157711243,0.18808796969072364,,,,,,,,,,,,,1.183586597442627 +239401,0,-0.03493941435979663,0.2649699250456107,0.6463181773704137,1.390694017602212,1.2756408573093225,1.3107830437664505,1.4881758474847362,2.265155270848227,-0.8863975124670236,-0.835055314390411,-0.5613165400266386,-1.3918785079011935,0.49778314283978853,-1.388853942113607,0.8737234706124865,2.130058765411377 +239401,1,0.4325776493852816,1.0630831111913384,1.0652162670597927,,,,,,,,,,-1.1887333502953,-0.3229291202479022,2.4486586478694914,2.0262656211853027 +239401,2,0.019005240637814846,1.995708215434791,0.638100625686777,,,,,,,,,,,,,2.0262656211853027 +240001,0,-0.5996859390924573,-0.3103207045411919,-0.3413299128685955,1.0957365411553635,1.149922669419116,1.026323861956036,-0.518904276104527,-0.14539775465670343,1.0889020930782853,-0.835055314390411,-0.16814274788616518,-0.13173296267509654,-1.0422163045785646,0.806708965813594,-0.4645232862317478,1.094225287437439 +240001,1,0.33645689517439314,0.08311885034938876,0.5545908663884488,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.8122266528381351,1.2762281894683838 +240001,2,0.2157901307843435,0.5165447305088826,-0.08191962390690835,,,,,,,,,,,,,1.2762281894683838 +240202,0,1.8851987697312496,0.9553186805497738,0.3994061548106614,0.5058215882616662,1.0242044815289095,0.7418646801456215,-0.1539806172701155,0.2161851991690361,-0.06335601015647824,-0.23730908679360116,-0.5613165400266386,0.28831555240026907,-0.27221658086938805,1.9044904197771946,-0.4645232862317478,2.302612543106079 +240202,1,0.4325776493852816,0.7958201309617158,0.24821562598564237,,,,,,,,,,0.9503768127628092,-0.3229291202479022,0.4419600012801827,1.7916042804718018 +240202,2,1.6916768068833083,0.5165447305088826,1.8981360624757264,,,,,,,,,,,,,1.7916042804718018 +241002,0,-0.03493941435979663,-0.42537883045855246,-0.7116979467082238,-0.23157210285545515,-0.35869558526336154,0.7418646801456215,-0.61013519081313,-1.651993395597285,-0.5571809115428055,-0.23730908679360116,0.22503104425430823,1.1284125825510003,1.267782866548965,0.806708965813594,0.8737234706124865,2.7916319370269775 +241002,1,-0.04802612166916067,-1.2531960507987243,-0.05815961441716403,,,,,,,,,,0.9503768127628092,1.8141914255436393,-0.059714660367144415,2.777738332748413 +241002,2,0.2157901307843435,-0.8069173349511406,0.008082907292302316,,,,,,,,,,,,,2.777738332748413 +241203,0,-0.14788871930632877,0.14991179912825014,0.5228621660905376,-0.23157210285545515,-1.2387229004948068,-0.1115128652856221,-0.518904276104527,-0.08513392901908017,-0.06335601015647824,-0.835055314390411,0.22503104425430823,0.28831555240026907,-1.0422163045785646,-1.388853942113607,-0.6875644123724536,2.2376391887664795 +241203,1,-0.9131129095671567,0.6176448108086341,-0.05815961441716403,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-0.8122266528381351,1.763675332069397 +241203,2,-0.4729569847285068,0.282992601310055,0.09808543849151298,,,,,,,,,,,,,1.763675332069397 +241801,0,-1.27738176877165,-0.5404369563759129,-0.7116979467082238,0.06338537359139342,0.1441771662974643,0.7418646801456215,0.210943041564296,1.4214617119215014,-1.0510058129291326,0.9581833684000187,0.22503104425430823,-0.13173296267509654,1.267782866548965,-1.388853942113607,-0.4645232862317478,2.0918450355529785 +241801,1,-0.04802612166916067,-0.6295824302629383,0.14609054585137357,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,-0.5613893220144716,2.046003818511963 +241801,2,-0.4729569847285068,-0.573365205752313,0.008082907292302316,,,,,,,,,,,,,2.046003818511963 +243601,0,-0.5996859390924573,-1.000669460045355,-0.8351539579881,0.358342850038242,-0.7358501489339809,0.7418646801456215,0.3021739562728989,0.3367128504442826,-0.22796431061858732,0.9581833684000187,1.0113786285352542,0.7083640674756347,1.267782866548965,0.806708965813594,0.8737234706124865,1.6203197240829468 +243601,1,-2.1626827143087066,-1.8768096713345106,-1.8964110568340025,,,,,,,,,,1.663413533782179,0.7456311526478686,-0.059714660367144415,1.616662859916687 +243601,2,-0.6697418748750354,-1.5075737225476233,-0.981944935899015,,,,,,,,,,,,,1.616662859916687 +243701,0,0.9816043301589925,0.3800280509629712,-0.09441789030884316,1.2432152793787876,0.39561354207787724,1.3107830437664505,0.5758667003987075,1.4214617119215014,1.4181186940025035,1.5559295959968287,1.0113786285352542,0.7083640674756347,1.267782866548965,-0.2910724881500066,0.8737234706124865,2.4766807556152344 +243701,1,1.6821474541268315,-0.2732317899567748,-1.079410415759852,,,,,,,,,,0.9503768127628092,-0.3229291202479022,1.1944719937511734,2.784501791000366 +243701,2,0.019005240637814846,-0.028410237621715174,-0.26192468630532967,,,,,,,,,,,,,2.784501791000366 +244201,0,-0.37378732919939306,-0.8856113341279945,-0.8351539579881,0.5058215882616662,0.8984862936387031,0.457405498335207,-0.06274970256151263,0.7585596299076455,0.10125229030563083,1.5559295959968287,1.4045524206757267,1.1284125825510003,1.267782866548965,1.9044904197771946,-0.24148216009104212,2.6384437084198 +244201,1,0.14421538675261625,-0.2732317899567748,0.04396546571710477,,,,,,,,,,0.9503768127628092,1.8141914255436393,-0.059714660367144415,2.995732307434082 +244201,2,-0.27617209458197817,0.20514189157711243,0.2780905008899343,,,,,,,,,,,,,2.995732307434082 +244703,0,-0.03493941435979663,-0.770553208210634,-0.8351539579881,0.06338537359139342,1.149922669419116,0.17294631652479245,0.210943041564296,0.2764490248066594,0.2658605907677399,0.9581833684000187,0.22503104425430823,-0.9718299928258278,-0.27221658086938805,-0.2910724881500066,0.8737234706124865,1.2138744592666626 +244703,1,-1.1053544179889336,-1.431371370951806,-1.1815354958941209,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.059714660367144415,1.353195071220398 +244703,2,-0.6697418748750354,-0.9626187544170256,-0.441929748703751,,,,,,,,,,,,,1.353195071220398 +246201,0,0.19095919553326762,-0.42537883045855246,0.029038120971032973,-0.8214870557491524,0.018458978407257843,0.457405498335207,0.5758667003987075,0.8790872811828919,-0.22796431061858732,0.36043714080320877,-1.740837916448057,-0.13173296267509654,0.49778314283978853,-1.388853942113607,-0.018441033950336395,0.8798626065254211 +246201,1,0.048094632541727786,-0.18414412988023388,0.35034070611991114,,,,,,,,,,0.9503768127628092,0.7456311526478686,3.7028453019878094,0.9608949422836304 +246201,2,-0.5713494298017712,-0.18411165708760024,-0.17192215510611902,,,,,,,,,,,,,0.9608949422836304 +247101,0,-1.9550775984508428,-1.3458438377974367,-1.2055219918277285,-1.5588807468662738,-1.2387229004948068,-0.3959720470960366,0.11971212685569313,0.09565754789378961,0.2658605907677399,-0.835055314390411,-0.5613165400266386,-0.13173296267509654,1.267782866548965,1.9044904197771946,-0.6875644123724536,1.0670093297958374 +247101,1,0.4325776493852816,-1.1641083907221836,-1.079410415759852,,,,,,,,,,1.663413533782179,-0.3229291202479022,-0.5613893220144716,0.9760961532592773 +247101,2,-0.37456453965524245,-1.3518723030817383,-1.4319575918950684,,,,,,,,,,,,,0.9760961532592773 +247402,0,-0.5996859390924573,1.7607255619712974,0.7697741886502898,2.1280877087193333,1.149922669419116,0.7418646801456215,0.3021739562728989,-0.9288274879458058,1.4181186940025035,1.5559295959968287,1.4045524206757267,1.9685096127017316,0.49778314283978853,0.806708965813594,1.9889291013160153,1.69688081741333 +247402,1,0.14421538675261625,0.7958201309617158,1.1673413471940615,,,,,,,,,,0.9503768127628092,0.7456311526478686,0.4419600012801827,2.1044304370880127 +247402,2,-0.27617209458197817,1.3729025375712505,2.0781411248741475,,,,,,,,,,,,,2.1044304370880127 +248002,0,0.07800989058673549,0.14991179912825014,0.2759501435307853,-0.37905084107887943,0.8984862936387031,1.026323861956036,0.11971212685569313,-0.5672445341200663,0.9242937926161762,-1.432801541987221,-0.5613165400266386,0.7083640674756347,-0.27221658086938805,0.806708965813594,0.8737234706124865,1.573009729385376 +248002,1,0.4325776493852816,0.08311885034938876,0.35034070611991114,,,,,,,,,,-1.1887333502953,1.8141914255436393,0.4419600012801827,1.2695088386535645 +248002,2,0.31418257585760784,-0.18411165708760024,-0.26192468630532967,,,,,,,,,,,,,1.2695088386535645 +248301,0,-0.5996859390924573,-0.770553208210634,-0.8351539579881,-1.1164445321960008,0.5213317299680837,-0.9648904107168657,0.6670976151073104,0.035393722256166354,-0.3925726110806964,-0.835055314390411,-0.5613165400266386,-0.5517814777504622,0.49778314283978853,-0.2910724881500066,-0.24148216009104212,1.1288968324661255 +248301,1,-0.4325091385127145,-0.80775775041602,-0.16028469455143282,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.5613893220144716,1.4044883251190186 +248301,2,-0.4729569847285068,-0.2619623668205428,0.45809556328835566,,,,,,,,,,,,,1.4044883251190186 +248403,0,0.19095919553326762,-0.1952625786238314,-0.4647859241484716,-0.08409336463203088,0.39561354207787724,0.7418646801456215,1.3057140180675306,1.2406702350086316,0.2658605907677399,-0.835055314390411,-1.3476641243075844,0.28831555240026907,0.49778314283978853,0.806708965813594,0.20460009219036931,1.8654093742370605 +248403,1,1.1054229288615007,0.3503818305790114,1.1673413471940615,,,,,,,,,,-1.9017700713146695,-0.3229291202479022,1.1944719937511734,2.268345832824707 +248403,2,0.31418257585760784,0.5943954402418251,0.368093032089145,,,,,,,,,,,,,2.268345832824707 +248501,0,-0.03493941435979663,1.9908418138060184,0.029038120971032973,-0.08409336463203088,0.018458978407257843,-1.8182679561481092,0.028481212147090252,0.15592137353141286,-1.0510058129291326,-0.835055314390411,-1.3476641243075844,-0.9718299928258278,1.267782866548965,0.806708965813594,-0.24148216009104212,1.5715423822402954 +248501,1,0.7209399120179469,1.330346091420961,0.6567159465227176,,,,,,,,,,0.2373400917434395,-0.3229291202479022,0.19112267045651915,1.7891356945037842 +248501,2,0.31418257585760784,1.995708215434791,0.8181056880851983,,,,,,,,,,,,,1.7891356945037842 +249204,0,-0.2608380242528609,-0.8856113341279945,1.3870542450496706,-0.5265295793023037,-0.10725920948294862,-0.1115128652856221,-0.06274970256151263,-0.5069807084824429,-0.5571809115428055,-0.835055314390411,-1.3476641243075844,-1.3918785079011935,0.49778314283978853,-1.388853942113607,-0.6875644123724536,2.5213608741760254 +249204,1,-0.4325091385127145,-0.6295824302629383,-0.16028469455143282,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.059714660367144415,1.781624436378479 +249204,2,-0.5713494298017712,-0.729066625218198,-0.17192215510611902,,,,,,,,,,,,,1.781624436378479 +249205,0,-0.8255845489855216,-1.1157275859627156,-0.9586099692679761,-0.5265295793023037,-0.10725920948294862,-0.1115128652856221,-0.06274970256151263,-0.5069807084824429,-0.5571809115428055,-0.835055314390411,-1.3476641243075844,-1.3918785079011935,0.49778314283978853,-0.2910724881500066,0.20460009219036931,1.8294824361801147 +249205,1,0.8170606662288354,-0.4514071101098565,-0.16028469455143282,,,,,,,,,,0.9503768127628092,-0.3229291202479022,0.4419600012801827,1.9003468751907349 +249205,2,-0.07938720443544948,-0.41766378628642786,-0.5319322799029617,,,,,,,,,,,,,1.9003468751907349 +250101,0,-0.03493941435979663,-0.3103207045411919,0.15249413225090913,-0.23157210285545515,0.6470499178582901,-0.6804312289064511,0.8495594445245161,0.035393722256166354,-0.3925726110806964,-0.835055314390411,-0.9544903321671111,0.7083640674756347,1.267782866548965,-1.388853942113607,0.6506823444717807,0.27013063430786133 +250101,1,0.14421538675261625,0.2612941705024705,0.6567159465227176,,,,,,,,,,0.2373400917434395,-0.3229291202479022,0.6927973321038463,0.20322546362876892 +250101,2,0.2157901307843435,1.2172011181053655,0.9981107504836196,,,,,,,,,,,,,0.20322546362876892 +250502,0,0.7557057202659283,-0.6554950822932735,-0.4647859241484716,0.5058215882616662,1.149922669419116,1.026323861956036,-0.06274970256151263,1.120142583733385,-0.5571809115428055,-0.835055314390411,-1.3476641243075844,-1.8119270229765592,-0.27221658086938805,-1.388853942113607,0.8737234706124865,0.9017882943153381 +250502,1,0.2403361409635047,-1.431371370951806,-0.9772853356255832,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-0.8122266528381351,0.5118231773376465 +250502,2,0.11739768571107917,-0.6512159154852555,-0.35192721750454037,,,,,,,,,,,,,0.5118231773376465 +251401,0,0.9816043301589925,-1.3458438377974367,-1.2055219918277285,1.833130232272485,0.7727681057484966,0.7418646801456215,1.4881758474847362,1.120142583733385,1.0889020930782853,1.5559295959968287,1.7977262128162,-0.5517814777504622,1.267782866548965,1.9044904197771946,3.104134732019544,1.5887019634246826 +251401,1,0.33645689517439314,-0.18414412988023388,-1.2836605760283897,,,,,,,,,,1.663413533782179,0.7456311526478686,1.1944719937511734,1.8439439535140991 +251401,2,-0.37456453965524245,0.04944047211122737,0.09808543849151298,,,,,,,,,,,,,1.8439439535140991 +252101,0,1.0945536351055247,-0.6554950822932735,-0.5882419354283478,-1.1164445321960008,-0.7358501489339809,-0.9648904107168657,0.11971212685569313,0.3367128504442826,-0.8863975124670236,0.36043714080320877,-0.16814274788616518,-1.3918785079011935,0.49778314283978853,-0.2910724881500066,0.20460009219036931,1.8137001991271973 +252101,1,0.8170606662288354,0.5285571507320932,1.882216908133943,,,,,,,,,,0.2373400917434395,0.7456311526478686,1.1944719937511734,1.7720615863800049 +252101,2,1.0029296913704582,0.5943954402418251,0.45809556328835566,,,,,,,,,,,,,1.7720615863800049 +252802,0,-0.7126352440389895,-1.000669460045355,-0.8351539579881,-1.1164445321960008,-1.7415956520556326,-0.6804312289064511,0.5758667003987075,-0.6275083597576895,-0.5571809115428055,-0.23730908679360116,-1.3476641243075844,-0.5517814777504622,-0.27221658086938805,-1.388853942113607,-0.9106055385131593,-0.6931471824645996 +252802,1,-1.4898374348324874,-1.7877220112579697,-1.079410415759852,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.5613893220144716,2.4402341842651367 +252802,2,-1.752058770680943,-1.8968272712123362,-2.151977841488754,,,,,,,,,,,,,2.4402341842651367 +252901,0,-1.3903310737181822,-0.770553208210634,-0.7116979467082238,-0.23157210285545515,-0.9872865247143939,-0.3959720470960366,0.3021739562728989,-0.4467168828448197,-0.5571809115428055,-0.835055314390411,-1.3476641243075844,0.7083640674756347,0.49778314283978853,-1.388853942113607,-0.9106055385131593,1.5700432062149048 +252901,1,-1.201475172199822,-0.80775775041602,-1.590035816431196,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-1.0630639836617988,1.4394233226776123 +252901,2,-1.161704100241357,-1.1183201738829107,-0.5319322799029617,,,,,,,,,,,,,1.4394233226776123 +252902,0,-1.164432463825118,-1.1157275859627156,-0.9586099692679761,-0.23157210285545515,-0.9872865247143939,-0.3959720470960366,0.3021739562728989,-0.4467168828448197,-0.5571809115428055,-0.835055314390411,-1.3476641243075844,0.7083640674756347,0.49778314283978853,1.9044904197771946,-1.133646664653865,1.5579833984375 +252902,1,-1.1053544179889336,-1.2531960507987243,-0.9772853356255832,,,,,,,,,,0.2373400917434395,-1.3914893931436731,-1.0630639836617988,1.8585296869277954 +252902,2,-1.6536663256076787,-1.1183201738829107,-1.9719727790903323,,,,,,,,,,,,,1.8585296869277954 +253604,0,0.19095919553326762,-0.1952625786238314,-0.5882419354283478,-0.8214870557491524,-0.10725920948294862,-0.9648904107168657,-0.42767336139592416,-0.26592540593194997,0.2658605907677399,-0.835055314390411,-0.9544903321671111,-1.3918785079011935,-1.0422163045785646,-0.2910724881500066,-0.9106055385131593,1.69688081741333 +253604,1,0.33645689517439314,-0.4514071101098565,1.9843419882682118,,,,,,,,,,-1.1887333502953,0.7456311526478686,-0.8122266528381351,1.1835016012191772 +253604,2,-0.37456453965524245,-0.8069173349511406,0.008082907292302316,,,,,,,,,,,,,1.1835016012191772 +253803,0,-1.27738176877165,-1.000669460045355,-0.8351539579881,-0.8214870557491524,-1.7415956520556326,-2.3871863197689382,0.11971212685569313,-0.3261892315695732,-1.2156141133912417,-0.835055314390411,-0.16814274788616518,0.28831555240026907,1.267782866548965,-1.388853942113607,-1.3566877907945707,0.9730418920516968 +253803,1,-0.9131129095671567,-0.18414412988023388,-0.8751602554913144,,,,,,,,,,-1.9017700713146695,-1.3914893931436731,-1.0630639836617988,1.7182129621505737 +253803,2,-0.27617209458197817,0.282992601310055,0.09808543849151298,,,,,,,,,,,,,1.7182129621505737 +254401,0,-1.164432463825118,-1.1157275859627156,-0.9586099692679761,0.06338537359139342,0.2698953541876708,0.17294631652479245,1.4881758474847362,1.4214617119215014,-0.06335601015647824,0.9581833684000187,0.6182048363947807,0.7083640674756347,-1.0422163045785646,-1.388853942113607,-0.9106055385131593,2.427276372909546 +254401,1,-0.14414687588004912,-1.3422837108752652,-1.4879107362969273,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.8122266528381351,2.4060819149017334 +254401,2,-0.5713494298017712,-1.040469464149968,-2.331982903887175,,,,,,,,,,,,,2.4060819149017334 +255101,0,1.320452244998589,1.5306093101365763,1.1401422224899183,2.1280877087193333,1.2756408573093225,1.3107830437664505,0.8495594445245161,-0.024870103381456905,2.07655189585094,-0.23730908679360116,-0.9544903321671111,0.28831555240026907,-1.0422163045785646,-0.2910724881500066,0.42764121833107505,1.4684271812438965 +255101,1,0.6248191578070585,0.7958201309617158,0.14609054585137357,,,,,,,,,,0.2373400917434395,-0.3229291202479022,2.699495978693155,2.0198781490325928 +255101,2,0.41257502093087217,0.8279475694406527,-0.981944935899015,,,,,,,,,,,,,2.0198781490325928 +255901,0,-1.27738176877165,-1.230785711880076,-1.0820659805478523,0.358342850038242,1.149922669419116,0.7418646801456215,-0.33644244668732126,-0.08513392901908017,-0.22796431061858732,-0.835055314390411,0.22503104425430823,0.7083640674756347,0.49778314283978853,-0.2910724881500066,0.8737234706124865,0.5032249689102173 +255901,1,-2.643286485363149,-1.8768096713345106,-1.8964110568340025,,,,,,,,,,0.2373400917434395,-1.3914893931436731,0.4419600012801827,0.7554450631141663 +255901,2,-1.161704100241357,-1.1961708836158533,-1.521960123094279,,,,,,,,,,,,,0.7554450631141663 +255902,0,-1.0514831588785858,-1.000669460045355,-0.8351539579881,0.358342850038242,1.149922669419116,0.7418646801456215,-0.33644244668732126,-0.08513392901908017,-0.22796431061858732,-0.835055314390411,0.22503104425430823,0.7083640674756347,-0.27221658086938805,-1.388853942113607,0.20460009219036931,0.7554450631141663 +255902,1,-1.0092336637780452,-1.8768096713345106,-1.6921608965654649,,,,,,,,,,0.9503768127628092,-1.3914893931436731,-0.5613893220144716,0.4119267165660858 +255902,2,-0.8665267650215641,-0.573365205752313,-0.8919424046998043,,,,,,,,,,,,,0.4119267165660858 +256401,0,0.529807110372864,1.7607255619712974,1.3870542450496706,0.358342850038242,0.5213317299680837,-0.3959720470960366,1.4881758474847362,1.4817255375591245,-0.06335601015647824,-2.030547769584031,-1.3476641243075844,-0.5517814777504622,0.49778314283978853,-0.2910724881500066,3.104134732019544,2.1459927558898926 +256401,1,0.33645689517439314,0.4394694906555523,1.371591507462599,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.059714660367144415,1.7227551937103271 +256401,2,-0.27617209458197817,0.5165447305088826,0.5480980944875663,,,,,,,,,,,,,1.7227551937103271 +256403,0,0.19095919553326762,0.2649699250456107,-0.5882419354283478,0.358342850038242,0.5213317299680837,-0.3959720470960366,1.4881758474847362,1.4817255375591245,-0.06335601015647824,-2.030547769584031,-1.3476641243075844,-0.5517814777504622,-1.812216028287741,0.806708965813594,-0.24148216009104212,-0.2544068694114685 +256403,1,-0.04802612166916067,-0.00596880972715211,0.14609054585137357,,,,,,,,,,-1.9017700713146695,0.7456311526478686,0.4419600012801827,2.218092679977417 +256403,2,-0.1777796495087138,-0.4955144960193704,0.008082907292302316,,,,,,,,,,,,,2.218092679977417 +256903,0,-0.37378732919939306,0.6101443027976923,1.1401422224899183,1.833130232272485,1.0242044815289095,1.026323861956036,1.4881758474847362,0.8790872811828919,1.5827269944646125,-0.835055314390411,-0.16814274788616518,0.7083640674756347,1.267782866548965,0.806708965813594,0.8737234706124865,2.6283113956451416 +256903,1,-0.33638838430182605,0.08311885034938876,-0.46665993495423924,,,,,,,,,,0.2373400917434395,0.7456311526478686,0.4419600012801827,2.947028636932373 +256903,2,-0.9649192100948284,-0.10626094735465771,-1.3419550606958577,,,,,,,,,,,,,2.947028636932373 +258801,0,1.8851987697312496,2.566132443392821,1.8808782901691752,1.6856514940490606,1.401359045199529,1.3107830437664505,1.4881758474847362,0.9996149324581385,2.07655189585094,0.36043714080320877,0.6182048363947807,1.1284125825510003,1.267782866548965,0.806708965813594,0.8737234706124865,2.6510133743286133 +258801,1,1.1054229288615007,1.7757843918036655,1.371591507462599,,,,,,,,,,1.663413533782179,-0.3229291202479022,-1.3139013144854623,2.80902361869812 +258801,2,1.4948919167367798,1.295051827838308,0.9981107504836196,,,,,,,,,,,,,2.80902361869812 +259201,0,-0.5996859390924573,-1.1157275859627156,-0.9586099692679761,-0.5265295793023037,0.6470499178582901,0.17294631652479245,1.4881758474847362,0.5175043273571525,-0.3925726110806964,-0.835055314390411,0.22503104425430823,-0.9718299928258278,-1.812216028287741,-1.388853942113607,-0.24148216009104212,1.1223393678665161 +259201,1,-1.201475172199822,-0.09505646980369299,1.2694664273283303,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.059714660367144415,1.4997984170913696 +259201,2,-0.37456453965524245,0.20514189157711243,-0.08191962390690835,,,,,,,,,,,,,1.4997984170913696 +260501,0,0.529807110372864,-0.08020445270647089,0.5228621660905376,-1.1164445321960008,-0.2329773973731551,-0.1115128652856221,-0.1539806172701155,-0.20566158029432668,-1.0510058129291326,0.9581833684000187,-0.9544903321671111,-0.13173296267509654,1.267782866548965,1.9044904197771946,-0.4645232862317478,2.2122840881347656 +260501,1,0.048094632541727786,0.08311885034938876,-0.7730351753570456,,,,,,,,,,1.663413533782179,0.7456311526478686,-0.8122266528381351,1.743966817855835 +260501,2,-0.1777796495087138,0.36084331104299755,0.2780905008899343,,,,,,,,,,,,,1.743966817855835 +260701,0,0.529807110372864,-0.42537883045855246,-0.2178739015887193,1.9806089704959091,1.149922669419116,1.3107830437664505,1.2144831033589276,1.4817255375591245,1.0889020930782853,0.9581833684000187,1.4045524206757267,1.9685096127017316,0.49778314283978853,-1.388853942113607,0.8737234706124865,2.115279197692871 +260701,1,0.4325776493852816,0.08311885034938876,-0.05815961441716403,,,,,,,,,,0.9503768127628092,-0.3229291202479022,3.7028453019878094,2.1371991634368896 +260701,2,0.31418257585760784,-0.4955144960193704,-0.5319322799029617,,,,,,,,,,,,,2.1371991634368896 +260702,0,0.7557057202659283,-1.000669460045355,-0.8351539579881,1.9806089704959091,1.149922669419116,1.3107830437664505,1.2144831033589276,1.4817255375591245,1.0889020930782853,0.9581833684000187,1.4045524206757267,1.9685096127017316,0.49778314283978853,-0.2910724881500066,3.104134732019544,2.1371991634368896 +260702,1,0.7209399120179469,-0.09505646980369299,0.6567159465227176,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,-0.059714660367144415,2.1516969203948975 +260702,2,1.593284361810044,0.43869402077594005,1.178115812882041,,,,,,,,,,,,,2.1516969203948975 +261501,0,-0.2608380242528609,-0.3103207045411919,-0.09441789030884316,0.2108641118148177,1.149922669419116,0.457405498335207,0.028481212147090252,-0.26592540593194997,1.0889020930782853,-0.835055314390411,-0.9544903321671111,-1.3918785079011935,0.49778314283978853,0.806708965813594,-0.6875644123724536,1.747433066368103 +261501,1,-0.9131129095671567,-0.2732317899567748,0.6567159465227176,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.5613893220144716,1.8981175422668457 +261501,2,-1.161704100241357,-0.6512159154852555,-0.08191962390690835,,,,,,,,,,,,,1.8981175422668457 +261503,0,-0.9385338539320537,-1.000669460045355,-0.8351539579881,0.2108641118148177,1.149922669419116,0.457405498335207,0.028481212147090252,-0.26592540593194997,1.0889020930782853,-0.835055314390411,-0.9544903321671111,-1.3918785079011935,-0.27221658086938805,-0.2910724881500066,-0.6875644123724536,1.9763343334197998 +261503,1,-0.6247506469344914,-1.6986343511814288,-1.8964110568340025,,,,,,,,,,0.2373400917434395,-1.3914893931436731,-0.5613893220144716,0.8703630566596985 +261503,2,-0.27617209458197817,-2.130379400411164,-2.331982903887175,,,,,,,,,,,,,0.8703630566596985 +262602,0,1.207502940052057,2.4510743174754603,3.2388944142478127,0.8007790647085149,1.0242044815289095,0.457405498335207,1.1232521886503248,0.6380319786323989,0.7596854921540671,-0.835055314390411,1.0113786285352542,1.1284125825510003,1.267782866548965,0.806708965813594,-0.6875644123724536,2.508848190307617 +262602,1,1.77826820833772,1.5976090716505837,1.0652162670597927,,,,,,,,,,0.9503768127628092,-0.3229291202479022,3.7028453019878094,2.7570302486419678 +262602,2,1.3964994716635155,1.450753247304193,0.908108219284409,,,,,,,,,,,,,2.7570302486419678 +265505,0,-1.5032803786647144,-0.1952625786238314,-0.4647859241484716,-1.2639232704194252,-1.2387229004948068,-1.2493495925272802,-1.0662897643561442,-1.9533125237854012,-1.2156141133912417,-3.8237864523744607,-1.740837916448057,-1.8119270229765592,-0.27221658086938805,-1.388853942113607,-1.3566877907945707,1.2762281894683838 +265505,1,-0.9131129095671567,-0.2732317899567748,-0.05815961441716403,,,,,,,,,,0.2373400917434395,-1.3914893931436731,-0.8122266528381351,1.3806238174438477 +265505,2,-0.6697418748750354,-0.41766378628642786,0.008082907292302316,,,,,,,,,,,,,1.3806238174438477 +266201,0,-1.164432463825118,-1.000669460045355,-0.8351539579881,0.5058215882616662,-0.2329773973731551,-0.9648904107168657,-0.7013661055217327,-0.5672445341200663,0.10125229030563083,-0.23730908679360116,-0.5613165400266386,-0.13173296267509654,-1.0422163045785646,-0.2910724881500066,-0.6875644123724536,0.3314051926136017 +266201,1,-1.6820789432542644,-1.1641083907221836,-0.26240977468570165,,,,,,,,,,-1.1887333502953,0.7456311526478686,-0.310551991190808,0.43594688177108765 +266201,2,-2.637590776340322,-0.8847680446840831,-1.0719474670982256,,,,,,,,,,,,,0.43594688177108765 +266202,0,-1.164432463825118,-1.000669460045355,-0.8351539579881,0.5058215882616662,-0.2329773973731551,-0.9648904107168657,-0.7013661055217327,-0.5672445341200663,0.10125229030563083,-0.23730908679360116,-0.5613165400266386,-0.13173296267509654,-1.0422163045785646,0.806708965813594,-0.4645232862317478,0.43594688177108765 +266202,1,-1.1053544179889336,-0.896845410492561,-0.568785015088508,,,,,,,,,,-1.1887333502953,-0.3229291202479022,1.1944719937511734,0.06490328907966614 +266202,2,-0.37456453965524245,-0.8069173349511406,-0.35192721750454037,,,,,,,,,,,,,0.06490328907966614 +266303,0,-1.164432463825118,-1.1157275859627156,-0.9586099692679761,-1.4114020086428494,-1.3644410883850133,-1.5338087743376947,0.11971212685569313,-0.5069807084824429,-1.2156141133912417,-1.432801541987221,-0.16814274788616518,0.28831555240026907,-0.27221658086938805,-1.388853942113607,-0.9106055385131593,0.8236952424049377 +266303,1,-0.528629892723603,-0.4514071101098565,-1.6921608965654649,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-1.3139013144854623,0.8683277368545532 +266303,2,-0.5713494298017712,-1.040469464149968,-0.6219348111021723,,,,,,,,,,,,,0.8683277368545532 +266304,0,-0.48673663414592516,-0.8856113341279945,-0.7116979467082238,-1.4114020086428494,-1.3644410883850133,-1.5338087743376947,0.11971212685569313,-0.5069807084824429,-1.2156141133912417,-1.432801541987221,-0.16814274788616518,0.28831555240026907,-0.27221658086938805,-0.2910724881500066,-0.4645232862317478,0.7806863784790039 +266304,1,-1.6820789432542644,-1.609546691104888,-1.590035816431196,,,,,,,,,,1.663413533782179,0.7456311526478686,-1.3139013144854623,0.894449770450592 +266304,2,-2.5391983312670576,-2.208230110144106,-2.151977841488754,,,,,,,,,,,,,0.894449770450592 +266902,0,0.529807110372864,0.4950861768803317,0.029038120971032973,-0.8214870557491524,-0.9872865247143939,-0.6804312289064511,-1.0662897643561442,0.15592137353141286,-1.7094390147775689,-0.835055314390411,-0.5613165400266386,-1.3918785079011935,-1.0422163045785646,-1.388853942113607,-1.3566877907945707,1.8219681978225708 +266902,1,0.6248191578070585,1.330346091420961,0.6567159465227176,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.059714660367144415,1.9460279941558838 +266902,2,1.3964994716635155,1.6843053765030207,-0.441929748703751,,,,,,,,,,,,,1.9460279941558838 +267902,0,-0.5996859390924573,1.4155511842192159,0.15249413225090913,-0.23157210285545515,1.0242044815289095,0.457405498335207,-0.06274970256151263,-1.4109380930467919,-0.7217892120049145,-0.23730908679360116,-0.5613165400266386,-0.9718299928258278,-1.812216028287741,-1.388853942113607,-0.24148216009104212,0.7345461249351501 +267902,1,0.2403361409635047,1.0630831111913384,1.4737165875968679,,,,,,,,,,-1.9017700713146695,-0.3229291202479022,1.1944719937511734,0.7856049537658691 +267902,2,-1.161704100241357,0.20514189157711243,2.258146187272569,,,,,,,,,,,,,0.7856049537658691 +268302,0,-1.27738176877165,-0.6554950822932735,-0.7116979467082238,-1.4114020086428494,-1.3644410883850133,-1.8182679561481092,-1.4312134231905558,0.3367128504442826,-1.2156141133912417,-0.835055314390411,-1.3476641243075844,-0.9718299928258278,-0.27221658086938805,-1.388853942113607,1.319805722893898,2.5061264038085938 +268302,1,-1.393716680621599,-1.520459031028347,-0.8751602554913144,,,,,,,,,,0.2373400917434395,1.8141914255436393,-1.0630639836617988,1.259352207183838 +268302,2,-0.4729569847285068,-0.6512159154852555,-0.5319322799029617,,,,,,,,,,,,,1.259352207183838 +268303,0,-0.37378732919939306,-0.8856113341279945,-0.7116979467082238,-1.4114020086428494,-1.3644410883850133,-1.8182679561481092,-1.4312134231905558,0.3367128504442826,-1.2156141133912417,-0.835055314390411,-1.3476641243075844,-0.9718299928258278,-1.812216028287741,-0.2910724881500066,-0.24148216009104212,1.259352207183838 +268303,1,-0.528629892723603,-0.80775775041602,-1.590035816431196,,,,,,,,,,0.2373400917434395,-1.3914893931436731,0.4419600012801827,0.8762017488479614 +268303,2,-0.37456453965524245,-1.6632751420135086,-1.8819702478911218,,,,,,,,,,,,,0.8762017488479614 +268305,0,-0.48673663414592516,-0.3103207045411919,-0.2178739015887193,-1.4114020086428494,-1.3644410883850133,-1.8182679561481092,-1.4312134231905558,0.3367128504442826,-1.2156141133912417,-0.835055314390411,-1.3476641243075844,-0.9718299928258278,1.267782866548965,-0.2910724881500066,-0.24148216009104212,1.7343038320541382 +268305,1,-0.04802612166916067,-0.4514071101098565,0.5545908663884488,,,,,,,,,,0.9503768127628092,-1.3914893931436731,1.1944719937511734,1.9535350799560547 +268305,2,-0.8665267650215641,-0.41766378628642786,-0.17192215510611902,,,,,,,,,,,,,1.9535350799560547 +268901,0,-1.0514831588785858,-1.1157275859627156,-0.9586099692679761,-0.08409336463203088,-0.35869558526336154,0.457405498335207,1.3969449327761334,0.5175043273571525,-0.3925726110806964,-0.23730908679360116,0.22503104425430823,0.28831555240026907,-1.0422163045785646,0.806708965813594,-0.24148216009104212,1.974244475364685 +268901,1,-0.528629892723603,-0.3623194500333156,-0.46665993495423924,,,,,,,,,,0.2373400917434395,-1.3914893931436731,-0.8122266528381351,1.9055811166763306 +268901,2,-0.5713494298017712,1.606454666770078,1.448123406479673,,,,,,,,,,,,,1.9055811166763306 +268902,0,0.529807110372864,-0.1952625786238314,-0.5882419354283478,-0.08409336463203088,-0.35869558526336154,0.457405498335207,1.3969449327761334,0.5175043273571525,-0.3925726110806964,-0.23730908679360116,0.22503104425430823,0.28831555240026907,-0.27221658086938805,-1.388853942113607,-0.9106055385131593,1.9055811166763306 +268902,1,0.33645689517439314,-0.4514071101098565,0.5545908663884488,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-1.0630639836617988,1.868279218673706 +268902,2,-0.07938720443544948,-0.8847680446840831,-0.8919424046998043,,,,,,,,,,,,,1.868279218673706 +269001,0,-1.5032803786647144,0.4950861768803317,1.1401422224899183,-0.37905084107887943,-0.48441377315356804,0.17294631652479245,0.3021739562728989,0.4572405017195292,-0.3925726110806964,0.9581833684000187,0.6182048363947807,-0.5517814777504622,-1.0422163045785646,1.9044904197771946,-0.9106055385131593,2.2296853065490723 +269001,1,-0.4325091385127145,0.3503818305790114,0.6567159465227176,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.5613893220144716,2.8460452556610107 +269001,2,-1.8504512157542075,0.20514189157711243,0.368093032089145,,,,,,,,,,,,,2.8460452556610107 +269002,0,-1.7291789885577786,-1.000669460045355,-0.8351539579881,-0.37905084107887943,-0.48441377315356804,0.17294631652479245,0.3021739562728989,0.4572405017195292,-0.3925726110806964,0.9581833684000187,0.6182048363947807,-0.5517814777504622,-1.0422163045785646,1.9044904197771946,-0.6875644123724536,1.7135076522827148 +269002,1,-1.9704412058869298,-1.431371370951806,-1.590035816431196,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.5613893220144716,1.660278558731079 +269002,2,-2.735983221413586,-2.0525286906782214,-1.521960123094279,,,,,,,,,,,,,1.660278558731079 +269202,0,-0.7126352440389895,-0.42537883045855246,-0.8351539579881,-0.8214870557491524,-0.8615683368241874,-0.6804312289064511,-1.1575206790647472,-0.08513392901908017,-1.0510058129291326,-0.835055314390411,-0.5613165400266386,-0.5517814777504622,-1.0422163045785646,0.806708965813594,-0.24148216009104212,1.30991792678833 +269202,1,-0.8169921553562683,-0.2732317899567748,0.35034070611991114,,,,,,,,,,0.2373400917434395,1.8141914255436393,0.6927973321038463,1.7517145872116089 +269202,2,-0.1777796495087138,1.0614996986394805,0.5480980944875663,,,,,,,,,,,,,1.7517145872116089 +270101,0,0.3039085004797998,0.8402605546324132,0.5228621660905376,-0.37905084107887943,-0.2329773973731551,-0.3959720470960366,0.028481212147090252,0.2764490248066594,-0.06335601015647824,1.5559295959968287,-1.3476641243075844,1.9685096127017316,1.267782866548965,0.806708965813594,-0.4645232862317478,2.74456524848938 +270101,1,0.52869840359617,0.08311885034938876,0.14609054585137357,,,,,,,,,,1.663413533782179,-1.3914893931436731,-0.310551991190808,2.782525062561035 +270101,2,1.6916768068833083,0.7500968597077102,0.8181056880851983,,,,,,,,,,,,,2.782525062561035 +270601,0,-0.5996859390924573,-1.000669460045355,-0.8351539579881,-1.1164445321960008,-1.1130047126046003,-1.2493495925272802,-0.8838279349389385,-0.6275083597576895,0.430468891229849,-2.628293997180841,-0.9544903321671111,-2.2319755380519246,-0.27221658086938805,-0.2910724881500066,-0.6875644123724536,1.0258479118347168 +270601,1,-1.2975959264107106,-0.18414412988023388,-0.16028469455143282,,,,,,,,,,0.2373400917434395,-1.3914893931436731,-0.059714660367144415,1.1536258459091187 +270601,2,-0.07938720443544948,0.5165447305088826,0.45809556328835566,,,,,,,,,,,,,1.1536258459091187 +270901,0,0.7557057202659283,-0.1952625786238314,-0.5882419354283478,-0.08409336463203088,-0.48441377315356804,-0.3959720470960366,-0.518904276104527,-0.08513392901908017,-0.22796431061858732,-1.432801541987221,0.22503104425430823,-0.13173296267509654,-0.27221658086938805,-0.2910724881500066,-0.4645232862317478,0.5082229971885681 +270901,1,0.6248191578070585,0.9739954511147976,0.45246578625417994,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.5613893220144716,0.6017383337020874 +270901,2,0.6093599110774008,-0.028410237621715174,0.18808796969072364,,,,,,,,,,,,,0.6017383337020874 +271001,0,-0.48673663414592516,-0.8856113341279945,-0.8351539579881,-1.2639232704194252,-1.2387229004948068,-1.5338087743376947,-1.1575206790647472,0.035393722256166354,-1.0510058129291326,-0.835055314390411,-1.3476641243075844,-0.13173296267509654,-1.812216028287741,-1.388853942113607,-0.9106055385131593,0.5752089619636536 +271001,1,-0.6247506469344914,-1.1641083907221836,-1.3857856561626585,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.059714660367144415,0.5644810199737549 +271001,2,-0.7681343199482997,-1.3518723030817383,-0.6219348111021723,,,,,,,,,,,,,0.5644810199737549 +272201,0,-0.03493941435979663,1.1854349323844948,0.3994061548106614,-0.674008317525728,-0.35869558526336154,-0.3959720470960366,-0.61013519081313,0.09565754789378961,-1.2156141133912417,0.9581833684000187,-0.5613165400266386,0.28831555240026907,0.49778314283978853,0.806708965813594,0.8737234706124865,1.7332484722137451 +272201,1,0.6248191578070585,0.08311885034938876,1.371591507462599,,,,,,,,,,-1.9017700713146695,-0.3229291202479022,0.4419600012801827,1.512118935585022 +272201,2,-0.27617209458197817,-0.41766378628642786,0.5480980944875663,,,,,,,,,,,,,1.512118935585022 +272301,0,0.19095919553326762,-0.6554950822932735,-0.7116979467082238,-1.5588807468662738,0.5213317299680837,0.17294631652479245,-0.33644244668732126,-0.14539775465670343,-0.06335601015647824,-0.835055314390411,-0.16814274788616518,1.1284125825510003,-0.27221658086938805,0.806708965813594,0.8737234706124865,2.192518949508667 +272301,1,1.4899059457050545,0.9739954511147976,0.35034070611991114,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,0.4419600012801827,2.411360025405884 +272301,2,0.2157901307843435,1.1393504083724229,0.09808543849151298,,,,,,,,,,,,,2.411360025405884 +272302,0,-0.48673663414592516,-0.8856113341279945,-0.7116979467082238,-1.5588807468662738,0.5213317299680837,0.17294631652479245,-0.33644244668732126,-0.14539775465670343,-0.06335601015647824,-0.835055314390411,-0.16814274788616518,1.1284125825510003,-0.27221658086938805,0.806708965813594,0.8737234706124865,2.192518949508667 +272302,1,0.7209399120179469,0.08311885034938876,-0.7730351753570456,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,0.4419600012801827,2.411360025405884 +272302,2,0.2157901307843435,0.5943954402418251,0.7281031568859877,,,,,,,,,,,,,2.411360025405884 +273102,0,-1.164432463825118,0.7252024287150527,-0.5882419354283478,-0.8214870557491524,0.5213317299680837,0.7418646801456215,0.210943041564296,0.5175043273571525,0.7596854921540671,-0.835055314390411,-1.3476641243075844,-0.13173296267509654,-0.27221658086938805,-0.2910724881500066,-0.6875644123724536,1.6930196285247803 +273102,1,-0.33638838430182605,0.7067324708851749,-1.079410415759852,,,,,,,,,,-1.1887333502953,0.7456311526478686,-1.0630639836617988,1.707011103630066 +273102,2,-0.1777796495087138,0.7500968597077102,0.2780905008899343,,,,,,,,,,,,,1.707011103630066 +273702,0,-0.5996859390924573,-0.08020445270647089,0.2759501435307853,1.2432152793787876,0.8984862936387031,0.7418646801456215,0.5758667003987075,1.2406702350086316,1.2535103935403944,0.36043714080320877,1.0113786285352542,0.7083640674756347,-0.27221658086938805,-0.2910724881500066,-0.24148216009104212,2.1201083660125732 +273702,1,0.4325776493852816,0.7067324708851749,1.0652162670597927,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.8122266528381351,2.090804100036621 +273702,2,-0.6697418748750354,-0.18411165708760024,0.9981107504836196,,,,,,,,,,,,,2.090804100036621 +273902,0,4.483032783501489,4.061888080318508,3.485806436807565,1.390694017602212,1.0242044815289095,1.026323861956036,1.4881758474847362,0.5175043273571525,1.0889020930782853,-0.23730908679360116,-0.16814274788616518,-2.2319755380519246,0.49778314283978853,-1.388853942113607,-0.6875644123724536,2.1421117782592773 +273902,1,0.6248191578070585,0.4394694906555523,0.7588410266569864,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.059714660367144415,2.327946901321411 +273902,2,0.41257502093087217,0.8279475694406527,-0.26192468630532967,,,,,,,,,,,,,2.327946901321411 +274301,0,-0.9385338539320537,-0.6554950822932735,-0.4647859241484716,-0.8214870557491524,-0.2329773973731551,-0.1115128652856221,-0.8838279349389385,-0.5672445341200663,-0.8863975124670236,-0.835055314390411,-0.9544903321671111,-2.2319755380519246,0.49778314283978853,-0.2910724881500066,-1.3566877907945707,-0.24699436128139496 +274301,1,-1.585958189043376,-1.431371370951806,-0.6709100952227768,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.5613893220144716,0.37013041973114014 +274301,2,-0.6697418748750354,-1.5075737225476233,-0.8919424046998043,,,,,,,,,,,,,0.37013041973114014 +276901,0,-1.3903310737181822,-1.1157275859627156,-0.9586099692679761,-1.1164445321960008,-1.9930320278360456,-2.102727137958524,-2.1610607408593787,-1.8930486981477779,-0.3925726110806964,-3.226040224777651,0.6182048363947807,1.1284125825510003,-0.27221658086938805,-1.388853942113607,-1.3566877907945707,-0.6931471824645996 +276901,1,-2.643286485363149,-1.8768096713345106,-1.6921608965654649,,,,,,,,,,-1.9017700713146695,-1.3914893931436731,-1.3139013144854623,0.3299475908279419 +276901,2,-2.4408058861937936,-2.0525286906782214,-1.9719727790903323,,,,,,,,,,,,,0.3299475908279419 +278103,0,0.3039085004797998,-0.08020445270647089,0.029038120971032973,0.6533003264850905,0.7727681057484966,0.7418646801456215,0.4846357856901046,1.2406702350086316,-0.22796431061858732,-0.23730908679360116,-0.16814274788616518,0.28831555240026907,-0.27221658086938805,-0.2910724881500066,-0.9106055385131593,1.0409818887710571 +278103,1,0.2403361409635047,-0.4514071101098565,-0.05815961441716403,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.5613893220144716,0.8276761174201965 +278103,2,-0.27617209458197817,-0.41766378628642786,0.368093032089145,,,,,,,,,,,,,0.8276761174201965 +280402,0,0.07800989058673549,-0.5404369563759129,-0.7116979467082238,-1.1164445321960008,-0.7358501489339809,0.17294631652479245,1.1232521886503248,1.3009340606462547,0.2658605907677399,-0.835055314390411,-0.16814274788616518,-0.5517814777504622,0.49778314283978853,-0.2910724881500066,0.8737234706124865,1.90995192527771 +280402,1,-0.04802612166916067,-0.5404947701863974,-0.16028469455143282,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,1.1944719937511734,2.6755118370056152 +280402,2,0.7077523561506651,-0.2619623668205428,-0.17192215510611902,,,,,,,,,,,,,2.6755118370056152 +280902,0,0.7557057202659283,0.4950861768803317,0.5228621660905376,1.6856514940490606,0.8984862936387031,0.7418646801456215,1.3969449327761334,1.4817255375591245,1.9119435953888306,1.5559295959968287,1.7977262128162,1.1284125825510003,0.49778314283978853,0.806708965813594,1.9889291013160153,2.717111587524414 +280902,1,0.6248191578070585,0.17220651042592966,-0.568785015088508,,,,,,,,,,0.9503768127628092,-0.3229291202479022,0.4419600012801827,2.0660202503204346 +280902,2,-0.07938720443544948,0.5943954402418251,0.2780905008899343,,,,,,,,,,,,,2.0660202503204346 +281802,0,2.5628945994104426,1.9908418138060184,2.621614357848432,1.2432152793787876,0.5213317299680837,0.7418646801456215,-0.1539806172701155,-0.38645305720719647,0.2658605907677399,-0.835055314390411,-1.3476641243075844,0.28831555240026907,0.49778314283978853,-0.2910724881500066,0.8737234706124865,2.0044825077056885 +281802,1,-0.04802612166916067,1.419433751497502,0.8609661067912552,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.059714660367144415,2.2808115482330322 +281802,2,0.019005240637814846,1.450753247304193,0.2780905008899343,,,,,,,,,,,,,2.2808115482330322 +282302,0,1.320452244998589,0.9553186805497738,0.893230199930166,0.9482578029319392,1.149922669419116,0.457405498335207,0.940790359233119,1.0598787580957618,0.2658605907677399,-1.432801541987221,0.6182048363947807,1.1284125825510003,-1.812216028287741,0.806708965813594,-0.6875644123724536,1.5383766889572144 +282302,1,1.2015436830723893,0.7067324708851749,2.086467068402481,,,,,,,,,,-1.9017700713146695,1.8141914255436393,-0.310551991190808,1.365315318107605 +282302,2,-0.1777796495087138,0.6722461499747677,1.8981360624757264,,,,,,,,,,,,,1.365315318107605 +282601,0,-0.2608380242528609,-1.000669460045355,-0.8351539579881,0.06338537359139342,0.8984862936387031,0.17294631652479245,0.3021739562728989,0.5175043273571525,-0.22796431061858732,0.9581833684000187,0.22503104425430823,1.1284125825510003,1.267782866548965,-0.2910724881500066,0.20460009219036931,0.8285142183303833 +282601,1,-1.201475172199822,-0.2732317899567748,-1.079410415759852,,,,,,,,,,1.663413533782179,-0.3229291202479022,1.1944719937511734,1.401822566986084 +282601,2,-0.27617209458197817,1.0614996986394805,-0.441929748703751,,,,,,,,,,,,,1.401822566986084 +282802,0,-1.3903310737181822,1.0703768064671344,1.1401422224899183,-0.37905084107887943,-0.35869558526336154,-1.2493495925272802,-0.06274970256151263,-0.6877721853953127,-1.0510058129291326,0.36043714080320877,-1.740837916448057,-0.5517814777504622,-1.812216028287741,-0.2910724881500066,-0.24148216009104212,0.6682090759277344 +282802,1,-0.9131129095671567,-0.18414412988023388,0.14609054585137357,,,,,,,,,,-1.1887333502953,-1.3914893931436731,2.4486586478694914,0.8506286144256592 +282802,2,-1.6536663256076787,-0.18411165708760024,-0.35192721750454037,,,,,,,,,,,,,0.8506286144256592 +283502,0,0.07800989058673549,1.7607255619712974,1.757422278889299,0.06338537359139342,0.5213317299680837,0.17294631652479245,-0.518904276104527,1.1804064093710083,-0.5571809115428055,0.36043714080320877,1.4045524206757267,0.28831555240026907,-1.0422163045785646,-0.2910724881500066,-0.6875644123724536,1.9289238452911377 +283502,1,0.2403361409635047,1.330346091420961,1.2694664273283303,,,,,,,,,,-1.1887333502953,-1.3914893931436731,0.4419600012801827,2.096202850341797 +283502,2,0.41257502093087217,0.6722461499747677,1.6281284688780944,,,,,,,,,,,,,2.096202850341797 +284102,0,0.07800989058673549,0.7252024287150527,1.8808782901691752,1.9806089704959091,1.401359045199529,1.026323861956036,1.4881758474847362,2.084363793935357,1.7473352949267216,1.5559295959968287,1.7977262128162,-0.5517814777504622,1.267782866548965,0.806708965813594,3.104134732019544,2.357661485671997 +284102,1,1.0093021746506123,0.8849077910382567,1.5758416677311367,,,,,,,,,,0.9503768127628092,0.7456311526478686,2.4486586478694914,2.504253387451172 +284102,2,0.31418257585760784,0.9836489889065378,1.6281284688780944,,,,,,,,,,,,,2.504253387451172 +284103,0,0.19095919553326762,-1.000669460045355,-0.8351539579881,1.9806089704959091,1.401359045199529,1.026323861956036,1.4881758474847362,2.084363793935357,1.7473352949267216,1.5559295959968287,1.7977262128162,-0.5517814777504622,0.49778314283978853,0.806708965813594,0.8737234706124865,2.504253387451172 +284103,1,0.33645689517439314,0.08311885034938876,-0.9772853356255832,,,,,,,,,,0.9503768127628092,-0.3229291202479022,1.1944719937511734,2.590221405029297 +284103,2,-0.07938720443544948,-0.41766378628642786,0.09808543849151298,,,,,,,,,,,,,2.590221405029297 +287701,0,0.07800989058673549,0.7252024287150527,1.5105102563295467,1.6856514940490606,1.401359045199529,1.026323861956036,1.2144831033589276,0.5777681529947757,0.7596854921540671,0.36043714080320877,0.6182048363947807,1.548461097626366,1.267782866548965,-0.2910724881500066,-0.4645232862317478,2.4399569034576416 +287701,1,-0.24026763009093757,1.1521707712678793,1.371591507462599,,,,,,,,,,-1.1887333502953,0.7456311526478686,-0.310551991190808,2.6243011951446533 +287701,2,1.298107026590251,1.450753247304193,1.2681183440812516,,,,,,,,,,,,,2.6243011951446533 +287805,0,-1.6162296836112464,-1.1157275859627156,-0.9586099692679761,-0.9689657939725767,-2.621622967287078,-2.671645501579353,-2.799677143819599,-2.7970060827121266,-0.7217892120049145,0.36043714080320877,-1.740837916448057,-0.5517814777504622,-1.0422163045785646,-1.388853942113607,-1.3566877907945707,0.13484059274196625 +287805,1,-1.393716680621599,-1.0750207306456427,-1.2836605760283897,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,-1.3139013144854623,0.5785989165306091 +287805,2,-2.5391983312670576,-0.18411165708760024,-1.4319575918950684,,,,,,,,,,,,,0.5785989165306091 +294601,0,0.7557057202659283,1.1854349323844948,1.1401422224899183,1.390694017602212,0.6470499178582901,0.7418646801456215,0.7583285298159133,0.8790872811828919,1.7473352949267216,-0.835055314390411,-0.16814274788616518,-0.13173296267509654,0.49778314283978853,0.806708965813594,-0.24148216009104212,2.312692403793335 +294601,1,1.6821474541268315,1.5976090716505837,0.5545908663884488,,,,,,,,,,-0.47569662927593015,1.8141914255436393,-0.5613893220144716,2.3137216567993164 +294601,2,1.6916768068833083,1.9178575057018483,0.908108219284409,,,,,,,,,,,,,2.3137216567993164 +296101,0,1.0945536351055247,0.14991179912825014,0.2759501435307853,1.2432152793787876,0.6470499178582901,1.3107830437664505,-0.2452115319787184,0.2764490248066594,1.0889020930782853,0.9581833684000187,-0.9544903321671111,-0.9718299928258278,0.49778314283978853,-1.388853942113607,0.42764121833107505,2.702605724334717 +296101,1,0.2403361409635047,-0.09505646980369299,0.04396546571710477,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.059714660367144415,2.995732307434082 +296101,2,2.085246587176366,0.43869402077594005,0.638100625686777,,,,,,,,,,,,,2.995732307434082 +296401,0,1.207502940052057,0.6101443027976923,0.15249413225090913,0.358342850038242,0.6470499178582901,0.7418646801456215,1.3969449327761334,0.7585596299076455,0.2658605907677399,0.9581833684000187,1.0113786285352542,1.1284125825510003,1.267782866548965,-0.2910724881500066,0.20460009219036931,2.8989408016204834 +296401,1,0.8170606662288354,0.08311885034938876,0.6567159465227176,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,0.4419600012801827,2.789398431777954 +296401,2,-0.4729569847285068,-0.028410237621715174,0.45809556328835566,,,,,,,,,,,,,2.789398431777954 +299002,0,0.07800989058673549,0.9553186805497738,-0.7116979467082238,0.6533003264850905,0.39561354207787724,1.026323861956036,0.3934048709815018,0.2161851991690361,1.2535103935403944,-0.835055314390411,1.0113786285352542,-0.5517814777504622,0.49778314283978853,0.806708965813594,0.20460009219036931,1.9792346954345703 +299002,1,0.33645689517439314,0.7958201309617158,-1.2836605760283897,,,,,,,,,,0.2373400917434395,0.7456311526478686,2.197821317045828,1.8104342222213745 +299002,2,0.11739768571107917,-0.41766378628642786,0.8181056880851983,,,,,,,,,,,,,1.8104342222213745 +302301,0,-0.2608380242528609,-0.3103207045411919,-0.4647859241484716,-0.08409336463203088,0.2698953541876708,-0.1115128652856221,0.4846357856901046,0.6380319786323989,-0.3925726110806964,-1.432801541987221,-1.740837916448057,-1.3918785079011935,0.49778314283978853,0.806708965813594,-0.9106055385131593,2.2343530654907227 +302301,1,-0.24026763009093757,-0.80775775041602,-1.3857856561626585,,,,,,,,,,0.2373400917434395,-0.3229291202479022,0.4419600012801827,2.345892906188965 +302301,2,-0.07938720443544948,-0.9626187544170256,-0.35192721750454037,,,,,,,,,,,,,2.345892906188965 +305702,0,1.9981480746777818,3.256481198896984,2.004334301449051,-1.2639232704194252,0.2698953541876708,0.7418646801456215,-0.518904276104527,0.15592137353141286,-1.3802224138533508,-0.835055314390411,-0.5613165400266386,-1.3918785079011935,-1.0422163045785646,0.806708965813594,0.8737234706124865,1.7005776166915894 +305702,1,0.048094632541727786,-0.00596880972715211,-0.16028469455143282,,,,,,,,,,-1.9017700713146695,-1.3914893931436731,-0.8122266528381351,1.798677921295166 +305702,2,-0.5713494298017712,-0.028410237621715174,-0.08191962390690835,,,,,,,,,,,,,1.798677921295166 +305804,0,-0.5996859390924573,-0.6554950822932735,-0.4647859241484716,0.06338537359139342,0.6470499178582901,-0.1115128652856221,1.1232521886503248,0.8790872811828919,0.10125229030563083,-0.835055314390411,-0.9544903321671111,-2.2319755380519246,0.49778314283978853,-1.388853942113607,1.319805722893898,2.504253387451172 +305804,1,-0.4325091385127145,-0.00596880972715211,0.45246578625417994,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,2.197821317045828,2.502408504486084 +305804,2,0.31418257585760784,0.1272911818441699,-0.08191962390690835,,,,,,,,,,,,,2.502408504486084 +307901,0,1.8851987697312496,0.03485367321088963,0.15249413225090913,1.2432152793787876,1.0242044815289095,0.17294631652479245,0.5758667003987075,0.2161851991690361,0.595077191691958,-0.23730908679360116,0.22503104425430823,1.548461097626366,-0.27221658086938805,-0.2910724881500066,-0.9106055385131593,1.5535916090011597 +307901,1,1.2015436830723893,1.0630831111913384,0.45246578625417994,,,,,,,,,,0.2373400917434395,0.7456311526478686,1.1944719937511734,1.5944350957870483 +307901,2,0.019005240637814846,0.20514189157711243,0.7281031568859877,,,,,,,,,,,,,1.5944350957870483 +308101,0,2.336995989517378,1.0703768064671344,2.1277903127289273,0.06338537359139342,0.8984862936387031,0.17294631652479245,0.7583285298159133,0.9996149324581385,0.595077191691958,-0.23730908679360116,-0.5613165400266386,-0.13173296267509654,0.49778314283978853,0.806708965813594,0.8737234706124865,1.7605624198913574 +308101,1,0.7209399120179469,1.330346091420961,1.4737165875968679,,,,,,,,,,1.663413533782179,2.88275169843941,0.4419600012801827,1.619914174079895 +308101,2,0.5109674660041365,0.5165447305088826,1.178115812882041,,,,,,,,,,,,,1.619914174079895 +309302,0,-1.8421282935043108,-1.1157275859627156,-0.9586099692679761,-0.8214870557491524,-0.8615683368241874,-0.6804312289064511,-0.06274970256151263,-0.20566158029432668,-0.3925726110806964,-0.835055314390411,-0.5613165400266386,0.7083640674756347,0.49778314283978853,-0.2910724881500066,-0.4645232862317478,1.8567993640899658 +309302,1,-2.643286485363149,-1.9658973314110515,-2.10066121710254,,,,,,,,,,0.9503768127628092,1.8141914255436393,1.1944719937511734,2.0291919708251953 +309302,2,-3.227945446779908,-2.441782239342934,-2.5119879662855964,,,,,,,,,,,,,2.0291919708251953 +309802,0,0.6427564153193962,1.1854349323844948,0.893230199930166,1.390694017602212,1.0242044815289095,1.026323861956036,1.2144831033589276,0.8790872811828919,1.0889020930782853,0.9581833684000187,0.6182048363947807,-1.3918785079011935,-0.27221658086938805,-0.2910724881500066,-0.24148216009104212,2.30010724067688 +309802,1,1.2976644372832777,0.2612941705024705,0.6567159465227176,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.8122266528381351,1.8788613080978394 +309802,2,1.3964994716635155,0.5165447305088826,0.09808543849151298,,,,,,,,,,,,,1.8788613080978394 +310103,0,0.4168578054263319,-0.3103207045411919,-0.4647859241484716,0.5058215882616662,0.7727681057484966,0.457405498335207,0.028481212147090252,-0.5069807084824429,-0.3925726110806964,0.9581833684000187,-2.13401170858853,-1.8119270229765592,0.49778314283978853,0.806708965813594,0.8737234706124865,0.2278168648481369 +310103,1,1.3937851914941661,0.2612941705024705,-0.46665993495423924,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,0.4419600012801827,0.3576681613922119 +310103,2,2.3804239223961585,-0.573365205752313,0.09808543849151298,,,,,,,,,,,,,0.3576681613922119 +311101,0,-0.2608380242528609,0.7252024287150527,0.893230199930166,1.9806089704959091,0.5213317299680837,1.3107830437664505,1.3057140180675306,0.09565754789378961,0.430468891229849,-0.835055314390411,0.22503104425430823,0.28831555240026907,0.49778314283978853,-0.2910724881500066,-0.4645232862317478,2.2004055976867676 +311101,1,-0.24026763009093757,0.5285571507320932,0.04396546571710477,,,,,,,,,,-1.9017700713146695,-1.3914893931436731,-0.5613893220144716,1.982546091079712 +311101,2,-0.37456453965524245,0.36084331104299755,0.368093032089145,,,,,,,,,,,,,1.982546091079712 +311102,0,1.207502940052057,1.645667436053937,2.2512463240088034,1.9806089704959091,0.5213317299680837,1.3107830437664505,1.3057140180675306,0.09565754789378961,0.430468891229849,-0.835055314390411,0.22503104425430823,0.28831555240026907,0.49778314283978853,-0.2910724881500066,0.20460009219036931,1.577911138534546 +311102,1,1.6821474541268315,0.17220651042592966,0.6567159465227176,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.059714660367144415,1.7022401094436646 +311102,2,0.6093599110774008,0.6722461499747677,2.978166436866254,,,,,,,,,,,,,1.7022401094436646 +312001,0,1.0945536351055247,1.3004930583018552,2.1277903127289273,-0.9689657939725767,0.1441771662974643,0.7418646801456215,-0.2452115319787184,1.120142583733385,-1.2156141133912417,-0.835055314390411,0.22503104425430823,-0.9718299928258278,-0.27221658086938805,0.806708965813594,0.20460009219036931,1.8690358400344849 +312001,1,1.1054229288615007,0.3503818305790114,1.4737165875968679,,,,,,,,,,-1.9017700713146695,-0.3229291202479022,0.4419600012801827,2.1672868728637695 +312001,2,1.298107026590251,0.1272911818441699,0.7281031568859877,,,,,,,,,,,,,2.1672868728637695 +315101,0,-1.164432463825118,-0.5404369563759129,-0.09441789030884316,-0.8214870557491524,0.1441771662974643,0.17294631652479245,1.4881758474847362,0.9393511068205153,0.10125229030563083,-0.835055314390411,-0.16814274788616518,-1.8119270229765592,-0.27221658086938805,0.806708965813594,-0.4645232862317478,1.883164644241333 +315101,1,-1.7781996974651528,-0.80775775041602,-1.079410415759852,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.5613893220144716,2.1604819297790527 +315101,2,-0.5713494298017712,0.5165447305088826,-0.6219348111021723,,,,,,,,,,,,,2.1604819297790527 +315102,0,-0.7126352440389895,-0.42537883045855246,-0.2178739015887193,-0.8214870557491524,0.1441771662974643,0.17294631652479245,1.4881758474847362,0.9393511068205153,0.10125229030563083,-0.835055314390411,-0.16814274788616518,-1.8119270229765592,-0.27221658086938805,0.806708965813594,-0.24148216009104212,1.883164644241333 +315102,1,-0.04802612166916067,-0.5404947701863974,0.45246578625417994,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.5613893220144716,2.1604819297790527 +315102,2,-1.5552738805344144,-0.8069173349511406,-0.7119373423013831,,,,,,,,,,,,,2.1604819297790527 +316202,0,0.9816043301589925,-0.5404369563759129,-0.5882419354283478,2.1280877087193333,1.0242044815289095,0.7418646801456215,1.1232521886503248,1.0598787580957618,1.9119435953888306,-0.23730908679360116,-0.16814274788616518,-0.13173296267509654,0.49778314283978853,0.806708965813594,1.7658879751753094,2.2751617431640625 +316202,1,0.9131814204397238,0.3503818305790114,0.35034070611991114,,,,,,,,,,0.9503768127628092,0.7456311526478686,2.4486586478694914,2.2474722862243652 +316202,2,1.7900692519565728,0.04944047211122737,1.5381259376788836,,,,,,,,,,,,,2.2474722862243652 +316401,0,1.7722494647847176,0.2649699250456107,0.3994061548106614,-1.2639232704194252,-0.35869558526336154,-0.6804312289064511,-1.5224443378991586,-0.5069807084824429,-0.8863975124670236,-0.835055314390411,-0.16814274788616518,-0.5517814777504622,0.49778314283978853,-0.2910724881500066,0.20460009219036931,2.0035743713378906 +316401,1,1.2976644372832777,-0.18414412988023388,0.04396546571710477,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.310551991190808,0.8454303741455078 +316401,2,0.31418257585760784,0.282992601310055,-0.08191962390690835,,,,,,,,,,,,,0.8454303741455078 +316501,0,1.5463508548916531,0.4950861768803317,1.2635982337697944,-0.23157210285545515,0.2698953541876708,-0.6804312289064511,0.210943041564296,-0.6877721853953127,-0.06335601015647824,-0.835055314390411,-0.16814274788616518,-0.9718299928258278,0.49778314283978853,-0.2910724881500066,-0.9106055385131593,2.0513575077056885 +316501,1,0.33645689517439314,-0.3623194500333156,0.6567159465227176,,,,,,,,,,0.9503768127628092,-0.3229291202479022,2.4486586478694914,1.2509961128234863 +316501,2,0.6093599110774008,0.36084331104299755,0.2780905008899343,,,,,,,,,,,,,1.2509961128234863 +316503,0,0.4168578054263319,0.03485367321088963,-0.2178739015887193,-0.23157210285545515,0.2698953541876708,-0.6804312289064511,0.210943041564296,-0.6877721853953127,-0.06335601015647824,-0.835055314390411,-0.16814274788616518,-0.9718299928258278,0.49778314283978853,-0.2910724881500066,-0.24148216009104212,1.4145385026931763 +316503,1,0.14421538675261625,1.419433751497502,0.5545908663884488,,,,,,,,,,1.663413533782179,-0.3229291202479022,0.4419600012801827,2.1168458461761475 +316503,2,-0.9649192100948284,0.20514189157711243,-0.35192721750454037,,,,,,,,,,,,,2.1168458461761475 +319802,0,0.8686550252124604,0.03485367321088963,0.15249413225090913,0.358342850038242,1.0242044815289095,0.7418646801456215,0.3934048709815018,0.5777681529947757,1.0889020930782853,0.36043714080320877,-0.5613165400266386,1.1284125825510003,-0.27221658086938805,0.806708965813594,-0.4645232862317478,1.990103006362915 +319802,1,0.14421538675261625,-0.00596880972715211,-0.6709100952227768,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.5613893220144716,2.0023252964019775 +319802,2,0.019005240637814846,-0.028410237621715174,1.718131000077305,,,,,,,,,,,,,2.0023252964019775 +320102,0,1.8851987697312496,1.1854349323844948,1.5105102563295467,1.6856514940490606,1.149922669419116,0.7418646801456215,-0.1539806172701155,-0.26592540593194997,1.7473352949267216,1.5559295959968287,0.6182048363947807,0.28831555240026907,-0.27221658086938805,-0.2910724881500066,0.8737234706124865,1.3488645553588867 +320102,1,0.7209399120179469,0.8849077910382567,1.5758416677311367,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,0.9436346629275099,1.9990390539169312 +320102,2,0.8061448012239295,1.0614996986394805,0.5480980944875663,,,,,,,,,,,,,1.9990390539169312 +320601,0,-1.0514831588785858,-0.8856113341279945,-0.2178739015887193,0.06338537359139342,0.018458978407257843,0.7418646801456215,0.028481212147090252,0.3367128504442826,-0.5571809115428055,-0.835055314390411,-0.9544903321671111,-1.3918785079011935,-0.27221658086938805,0.806708965813594,-0.6875644123724536,2.4297170639038086 +320601,1,-0.33638838430182605,-0.9859330705691017,0.24821562598564237,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-1.0630639836617988,1.982364535331726 +320601,2,0.8061448012239295,-0.729066625218198,-0.6219348111021723,,,,,,,,,,,,,1.982364535331726 +322501,0,0.3039085004797998,1.0703768064671344,-0.2178739015887193,0.5058215882616662,0.8984862936387031,1.3107830437664505,1.4881758474847362,1.3009340606462547,1.5827269944646125,1.5559295959968287,1.0113786285352542,-0.13173296267509654,0.49778314283978853,-1.388853942113607,-0.24148216009104212,2.219636917114258 +322501,1,0.4325776493852816,0.7067324708851749,1.0652162670597927,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.059714660367144415,2.178631067276001 +322501,2,1.3964994716635155,0.36084331104299755,0.8181056880851983,,,,,,,,,,,,,2.178631067276001 +322502,0,0.19095919553326762,0.03485367321088963,-0.3413299128685955,0.5058215882616662,0.8984862936387031,1.3107830437664505,1.4881758474847362,1.3009340606462547,1.5827269944646125,1.5559295959968287,1.0113786285352542,-0.13173296267509654,0.49778314283978853,0.806708965813594,0.8737234706124865,2.178631067276001 +322502,1,0.4325776493852816,0.08311885034938876,0.45246578625417994,,,,,,,,,,0.2373400917434395,0.7456311526478686,0.4419600012801827,2.077982187271118 +322502,2,0.7077523561506651,0.5165447305088826,-0.26192468630532967,,,,,,,,,,,,,2.077982187271118 +322503,0,1.0945536351055247,1.7607255619712974,0.5228621660905376,0.5058215882616662,0.8984862936387031,1.3107830437664505,1.4881758474847362,1.3009340606462547,1.5827269944646125,1.5559295959968287,1.0113786285352542,-0.13173296267509654,-0.27221658086938805,0.806708965813594,0.20460009219036931,2.077982187271118 +322503,1,0.048094632541727786,1.6866967317271246,0.45246578625417994,,,,,,,,,,-0.47569662927593015,0.7456311526478686,1.1944719937511734,1.9513272047042847 +322503,2,0.2157901307843435,2.384961764099504,0.7281031568859877,,,,,,,,,,,,,1.9513272047042847 +322505,0,-0.48673663414592516,-0.770553208210634,-0.7116979467082238,0.5058215882616662,0.8984862936387031,1.3107830437664505,1.4881758474847362,1.3009340606462547,1.5827269944646125,1.5559295959968287,1.0113786285352542,-0.13173296267509654,1.267782866548965,-1.388853942113607,-0.24148216009104212,2.275500535964966 +322505,1,0.2403361409635047,-0.5404947701863974,-0.9772853356255832,,,,,,,,,,0.9503768127628092,-0.3229291202479022,3.7028453019878094,0.5103175640106201 +322505,2,1.4948919167367798,0.43869402077594005,0.7281031568859877,,,,,,,,,,,,,0.5103175640106201 +324202,0,0.3039085004797998,0.6101443027976923,0.2759501435307853,0.358342850038242,0.7727681057484966,0.457405498335207,0.940790359233119,0.5175043273571525,-0.06335601015647824,-0.23730908679360116,-0.9544903321671111,1.548461097626366,-1.0422163045785646,0.806708965813594,-0.24148216009104212,1.9758213758468628 +324202,1,0.048094632541727786,1.419433751497502,0.35034070611991114,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.5613893220144716,2.1420512199401855 +324202,2,0.11739768571107917,0.9836489889065378,0.008082907292302316,,,,,,,,,,,,,2.1420512199401855 +324401,0,1.4334015499451211,1.3004930583018552,0.3994061548106614,0.5058215882616662,0.6470499178582901,1.026323861956036,-0.42767336139592416,0.15592137353141286,1.4181186940025035,0.9581833684000187,1.0113786285352542,0.28831555240026907,1.267782866548965,0.806708965813594,-0.9106055385131593,2.345892906188965 +324401,1,1.0093021746506123,1.419433751497502,0.963091186925524,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.8122266528381351,1.9301546812057495 +324401,2,1.6916768068833083,1.5286039570371357,0.8181056880851983,,,,,,,,,,,,,1.9301546812057495 +324802,0,0.19095919553326762,0.03485367321088963,0.5228621660905376,0.8007790647085149,0.5213317299680837,0.457405498335207,0.3934048709815018,0.3367128504442826,1.5827269944646125,0.36043714080320877,-0.5613165400266386,-1.3918785079011935,0.49778314283978853,-0.2910724881500066,-0.24148216009104212,2.0354888439178467 +324802,1,0.14421538675261625,-0.18414412988023388,0.04396546571710477,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.8122266528381351,2.3102200031280518 +324802,2,-0.1777796495087138,0.36084331104299755,0.008082907292302316,,,,,,,,,,,,,2.3102200031280518 +325003,0,-0.8255845489855216,2.566132443392821,2.745070369128308,1.9806089704959091,1.401359045199529,1.3107830437664505,0.8495594445245161,0.7585596299076455,1.9119435953888306,-0.835055314390411,-0.5613165400266386,0.7083640674756347,-0.27221658086938805,0.806708965813594,-0.4645232862317478,1.3250024318695068 +325003,1,0.9131814204397238,2.577573332492533,1.6779667478654055,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.5613893220144716,2.2522380352020264 +325003,2,0.9045372462971938,1.295051827838308,0.5480980944875663,,,,,,,,,,,,,2.2522380352020264 +325004,0,0.9816043301589925,0.8402605546324132,1.1401422224899183,1.9806089704959091,1.401359045199529,1.3107830437664505,0.8495594445245161,0.7585596299076455,1.9119435953888306,-0.835055314390411,-0.5613165400266386,0.7083640674756347,-0.27221658086938805,-0.2910724881500066,-0.24148216009104212,2.2522380352020264 +325004,1,-0.528629892723603,0.7067324708851749,0.45246578625417994,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,1.1944719937511734,1.7187941074371338 +325004,2,-1.0633116551680928,0.5165447305088826,0.09808543849151298,,,,,,,,,,,,,1.7187941074371338 +325201,0,-0.9385338539320537,-1.230785711880076,-1.0820659805478523,-0.37905084107887943,-0.8615683368241874,0.17294631652479245,1.3969449327761334,0.2764490248066594,-0.5571809115428055,-0.835055314390411,-0.9544903321671111,-0.5517814777504622,-0.27221658086938805,-1.388853942113607,-0.24148216009104212,1.0613034963607788 +325201,1,-0.528629892723603,-1.520459031028347,-1.7942859766997337,,,,,,,,,,0.9503768127628092,-1.3914893931436731,-0.8122266528381351,1.1699161529541016 +325201,2,-0.8665267650215641,-1.8968272712123362,-1.7019651854927003,,,,,,,,,,,,,1.1699161529541016 +325402,0,1.6593001598381854,-0.3103207045411919,-0.4647859241484716,0.5058215882616662,-0.2329773973731551,1.026323861956036,1.4881758474847362,0.8790872811828919,0.430468891229849,-0.23730908679360116,-1.3476641243075844,-0.13173296267509654,-0.27221658086938805,-1.388853942113607,-0.6875644123724536,1.945996880531311 +325402,1,1.5860266999159431,-0.00596880972715211,1.0652162670597927,,,,,,,,,,-1.9017700713146695,-1.3914893931436731,-1.3139013144854623,2.013136386871338 +325402,2,1.9868541421031014,-0.33981307655348536,0.7281031568859877,,,,,,,,,,,,,2.013136386871338 +326805,0,-1.5032803786647144,-1.1157275859627156,-0.9586099692679761,-0.5265295793023037,-1.2387229004948068,-1.5338087743376947,-0.61013519081313,-0.3261892315695732,-0.5571809115428055,-1.432801541987221,-1.3476641243075844,-0.9718299928258278,0.49778314283978853,3.002271873740795,-1.3566877907945707,0.09782905876636505 +326805,1,-1.585958189043376,-0.7186700903394792,-1.2836605760283897,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-1.3139013144854623,1.259723424911499 +326805,2,-1.2600965453146213,-0.8069173349511406,-0.8919424046998043,,,,,,,,,,,,,1.259723424911499 +328702,0,0.6427564153193962,0.7252024287150527,0.2759501435307853,0.2108641118148177,-0.9872865247143939,-0.1115128652856221,-1.0662897643561442,-1.2904104417715454,0.10125229030563083,0.9581833684000187,-0.9544903321671111,-0.13173296267509654,-0.27221658086938805,-0.2910724881500066,-0.9106055385131593,2.0513789653778076 +328702,1,1.2976644372832777,0.08311885034938876,0.04396546571710477,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,0.4419600012801827,1.749560832977295 +328702,2,-0.37456453965524245,0.20514189157711243,0.18808796969072364,,,,,,,,,,,,,1.749560832977295 +330303,0,1.0945536351055247,0.14991179912825014,0.7697741886502898,2.1280877087193333,1.0242044815289095,1.3107830437664505,1.2144831033589276,0.035393722256166354,2.07655189585094,1.5559295959968287,1.0113786285352542,0.28831555240026907,0.49778314283978853,-0.2910724881500066,-0.018441033950336395,2.4231276512145996 +330303,1,0.2403361409635047,-0.09505646980369299,0.04396546571710477,,,,,,,,,,-1.1887333502953,-0.3229291202479022,2.197821317045828,2.4247069358825684 +330303,2,1.1997145815169867,0.282992601310055,0.908108219284409,,,,,,,,,,,,,2.4247069358825684 +330401,0,0.19095919553326762,0.03485367321088963,0.2759501435307853,1.0957365411553635,1.401359045199529,0.457405498335207,-0.42767336139592416,0.3367128504442826,1.4181186940025035,0.9581833684000187,0.22503104425430823,0.7083640674756347,-0.27221658086938805,-0.2910724881500066,-0.6875644123724536,1.9241365194320679 +330401,1,0.9131814204397238,0.4394694906555523,0.7588410266569864,,,,,,,,,,-1.9017700713146695,-0.3229291202479022,-0.8122266528381351,2.2664687633514404 +330401,2,-4.605439677805609,-3.9987964340017847,-4.132033527871388,,,,,,,,,,,,,2.2664687633514404 +334201,0,0.19095919553326762,-0.6554950822932735,0.6463181773704137,-0.9689657939725767,0.39561354207787724,0.17294631652479245,-0.33644244668732126,0.8188234555452687,-1.3802224138533508,1.5559295959968287,0.6182048363947807,-0.5517814777504622,-0.27221658086938805,0.806708965813594,-0.24148216009104212,1.769005537033081 +334201,1,0.7209399120179469,-0.7186700903394792,-0.16028469455143282,,,,,,,,,,0.2373400917434395,0.7456311526478686,0.4419600012801827,1.7558012008666992 +334201,2,-0.37456453965524245,-0.4955144960193704,-0.08191962390690835,,,,,,,,,,,,,1.7558012008666992 +334701,0,-0.37378732919939306,-0.1952625786238314,-0.8351539579881,0.2108641118148177,1.149922669419116,0.17294631652479245,0.5758667003987075,0.3969766760819059,-0.22796431061858732,0.9581833684000187,1.0113786285352542,1.9685096127017316,0.49778314283978853,-0.2910724881500066,0.20460009219036931,1.8728997707366943 +334701,1,0.8170606662288354,-0.5404947701863974,0.35034070611991114,,,,,,,,,,0.2373400917434395,0.7456311526478686,0.4419600012801827,1.885725498199463 +334701,2,0.41257502093087217,-0.18411165708760024,0.18808796969072364,,,,,,,,,,,,,1.885725498199463 +335001,0,0.529807110372864,0.8402605546324132,2.2512463240088034,0.5058215882616662,0.2698953541876708,-0.3959720470960366,-0.33644244668732126,-0.14539775465670343,1.2535103935403944,0.36043714080320877,-0.16814274788616518,0.28831555240026907,1.267782866548965,-1.388853942113607,-0.4645232862317478,1.4585497379302979 +335001,1,1.2976644372832777,0.7958201309617158,1.2694664273283303,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-0.5613893220144716,1.717049479484558 +335001,2,0.31418257585760784,0.282992601310055,0.008082907292302316,,,,,,,,,,,,,1.717049479484558 +335501,0,0.07800989058673549,-0.42537883045855246,-0.3413299128685955,1.2432152793787876,0.8984862936387031,0.457405498335207,1.4881758474847362,2.265155270848227,0.9242937926161762,1.5559295959968287,0.6182048363947807,1.1284125825510003,0.49778314283978853,-0.2910724881500066,-0.24148216009104212,2.713841676712036 +335501,1,-0.04802612166916067,-0.09505646980369299,0.45246578625417994,,,,,,,,,,-0.47569662927593015,0.7456311526478686,1.1944719937511734,2.995732307434082 +335501,2,0.019005240637814846,-0.33981307655348536,0.008082907292302316,,,,,,,,,,,,,2.995732307434082 +336002,0,-1.27738176877165,-1.230785711880076,-1.0820659805478523,0.06338537359139342,0.39561354207787724,0.17294631652479245,0.210943041564296,-0.5069807084824429,0.9242937926161762,-0.835055314390411,-0.9544903321671111,-0.5517814777504622,1.267782866548965,0.806708965813594,3.104134732019544,1.4701085090637207 +336002,1,-0.14414687588004912,-1.609546691104888,-1.3857856561626585,,,,,,,,,,1.663413533782179,0.7456311526478686,-1.3139013144854623,1.8103207349777222 +336002,2,-0.5713494298017712,-1.9746779809452786,-1.6119626542934897,,,,,,,,,,,,,1.8103207349777222 +336902,0,-0.2608380242528609,-1.000669460045355,-0.8351539579881,1.833130232272485,1.401359045199529,0.7418646801456215,0.11971212685569313,0.6380319786323989,1.9119435953888306,0.36043714080320877,0.6182048363947807,0.28831555240026907,1.267782866548965,0.806708965813594,0.8737234706124865,2.9252729415893555 +336902,1,-0.04802612166916067,-0.5404947701863974,-0.9772853356255832,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.059714660367144415,2.995732307434082 +336902,2,0.41257502093087217,-0.573365205752313,-0.08191962390690835,,,,,,,,,,,,,2.995732307434082 +338701,0,1.7722494647847176,0.9553186805497738,2.3747023352886796,0.8007790647085149,1.149922669419116,0.17294631652479245,0.3934048709815018,0.7585596299076455,1.0889020930782853,-0.23730908679360116,-0.5613165400266386,-1.3918785079011935,0.49778314283978853,-0.2910724881500066,-0.24148216009104212,1.5807307958602905 +338701,1,1.2015436830723893,1.330346091420961,0.963091186925524,,,,,,,,,,0.9503768127628092,0.7456311526478686,1.1944719937511734,1.537781000137329 +338701,2,0.8061448012239295,0.5165447305088826,2.1681436560733585,,,,,,,,,,,,,1.537781000137329 +338702,0,2.1110973796243138,1.4155511842192159,2.621614357848432,0.8007790647085149,1.149922669419116,0.17294631652479245,0.3934048709815018,0.7585596299076455,1.0889020930782853,-0.23730908679360116,-0.5613165400266386,-1.3918785079011935,0.49778314283978853,-0.2910724881500066,-0.4645232862317478,1.5807307958602905 +338702,1,1.8743889625486083,1.330346091420961,2.5970924690738246,,,,,,,,,,0.9503768127628092,0.7456311526478686,1.6961466553985005,1.537781000137329 +338702,2,1.3964994716635155,0.7500968597077102,1.988138593674937,,,,,,,,,,,,,1.537781000137329 +339301,0,1.207502940052057,1.5306093101365763,2.2512463240088034,-1.2639232704194252,0.2698953541876708,-0.9648904107168657,-0.33644244668732126,-0.6877721853953127,-0.5571809115428055,1.5559295959968287,1.7977262128162,-0.5517814777504622,0.49778314283978853,0.806708965813594,-0.6875644123724536,2.361442804336548 +339301,1,2.3549927336030505,1.5085214115740428,0.6567159465227176,,,,,,,,,,-0.47569662927593015,0.7456311526478686,0.4419600012801827,2.0335779190063477 +339301,2,1.4948919167367798,1.3729025375712505,0.45809556328835566,,,,,,,,,,,,,2.0335779190063477 +340202,0,0.4168578054263319,1.1854349323844948,0.6463181773704137,0.358342850038242,0.7727681057484966,0.457405498335207,1.0320212739417218,0.9393511068205153,0.430468891229849,-0.835055314390411,-1.3476641243075844,-0.9718299928258278,1.267782866548965,-1.388853942113607,1.7658879751753094,2.4643607139587402 +340202,1,1.2015436830723893,0.6176448108086341,1.2694664273283303,,,,,,,,,,1.663413533782179,-1.3914893931436731,-0.5613893220144716,2.5002925395965576 +340202,2,0.9045372462971938,0.5165447305088826,0.9981107504836196,,,,,,,,,,,,,2.5002925395965576 +341302,0,0.3039085004797998,-0.1952625786238314,-0.09441789030884316,1.9806089704959091,1.0242044815289095,0.7418646801456215,0.940790359233119,1.3009340606462547,1.5827269944646125,1.5559295959968287,1.0113786285352542,-1.3918785079011935,-0.27221658086938805,0.806708965813594,0.20460009219036931,2.1657187938690186 +341302,1,0.048094632541727786,0.08311885034938876,0.24821562598564237,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.5613893220144716,2.203946828842163 +341302,2,-0.37456453965524245,-0.028410237621715174,0.008082907292302316,,,,,,,,,,,,,2.203946828842163 +341601,0,0.07800989058673549,0.8402605546324132,0.7697741886502898,0.06338537359139342,0.6470499178582901,0.7418646801456215,0.940790359233119,1.9035723170224874,-1.0510058129291326,0.9581833684000187,-0.16814274788616518,1.1284125825510003,1.267782866548965,0.806708965813594,-0.6875644123724536,2.995732307434082 +341601,1,0.2403361409635047,0.5285571507320932,0.5545908663884488,,,,,,,,,,0.9503768127628092,0.7456311526478686,0.6927973321038463,2.520127534866333 +341601,2,-0.27617209458197817,0.6722461499747677,0.2780905008899343,,,,,,,,,,,,,2.520127534866333 +342301,0,0.4168578054263319,0.4950861768803317,0.5228621660905376,1.6856514940490606,1.2756408573093225,0.7418646801456215,1.3969449327761334,1.3009340606462547,1.7473352949267216,0.36043714080320877,0.6182048363947807,1.548461097626366,0.49778314283978853,0.806708965813594,-0.6875644123724536,2.380889654159546 +342301,1,0.7209399120179469,0.8849077910382567,0.45246578625417994,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.8122266528381351,2.6711392402648926 +342301,2,1.6916768068833083,1.1393504083724229,1.718131000077305,,,,,,,,,,,,,2.6711392402648926 +342302,0,-0.03493941435979663,0.14991179912825014,1.5105102563295467,1.6856514940490606,1.2756408573093225,0.7418646801456215,1.3969449327761334,1.3009340606462547,1.7473352949267216,0.36043714080320877,0.6182048363947807,1.548461097626366,0.49778314283978853,0.806708965813594,-0.9106055385131593,2.380889654159546 +342302,1,0.4325776493852816,1.0630831111913384,1.1673413471940615,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.8122266528381351,2.6711392402648926 +342302,2,-0.07938720443544948,0.6722461499747677,0.368093032089145,,,,,,,,,,,,,2.6711392402648926 +342603,0,1.5463508548916531,0.3800280509629712,0.5228621660905376,1.390694017602212,1.0242044815289095,1.3107830437664505,0.940790359233119,0.9393511068205153,1.7473352949267216,1.5559295959968287,1.0113786285352542,1.548461097626366,0.49778314283978853,-0.2910724881500066,-0.4645232862317478,2.995732307434082 +342603,1,2.4511134878139393,0.3503818305790114,1.2694664273283303,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.8122266528381351,2.995732307434082 +342603,2,2.085246587176366,1.3729025375712505,1.988138593674937,,,,,,,,,,,,,2.995732307434082 +342801,0,1.8851987697312496,2.9113068211449025,4.843822560886203,1.9806089704959091,1.401359045199529,1.3107830437664505,1.3969449327761334,0.8188234555452687,1.5827269944646125,0.36043714080320877,1.4045524206757267,0.28831555240026907,1.267782866548965,0.806708965813594,-0.9106055385131593,2.995732307434082 +342801,1,2.7394757504466045,3.3793622731814015,2.1885921485367494,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.8122266528381351,2.641754150390625 +342801,2,1.7900692519565728,2.462812473832446,2.0781411248741475,,,,,,,,,,,,,2.641754150390625 +342802,0,0.4168578054263319,0.4950861768803317,0.5228621660905376,1.9806089704959091,1.401359045199529,1.3107830437664505,1.3969449327761334,0.8188234555452687,1.5827269944646125,0.36043714080320877,1.4045524206757267,0.28831555240026907,1.267782866548965,1.9044904197771946,-1.133646664653865,2.641754150390625 +342802,1,1.5860266999159431,0.9739954511147976,1.0652162670597927,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.5613893220144716,2.7415497303009033 +342802,2,1.4948919167367798,1.0614996986394805,1.448123406479673,,,,,,,,,,,,,2.7415497303009033 +342901,0,1.4334015499451211,2.105899939723379,2.621614357848432,2.1280877087193333,1.401359045199529,0.7418646801456215,1.0320212739417218,1.361197886283878,1.4181186940025035,-0.835055314390411,-0.16814274788616518,1.1284125825510003,1.267782866548965,0.806708965813594,-0.9106055385131593,1.2027058601379395 +342901,1,0.4325776493852816,1.2412584313444202,1.882216908133943,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.8122266528381351,2.138601779937744 +342901,2,1.4948919167367798,1.1393504083724229,1.988138593674937,,,,,,,,,,,,,2.138601779937744 +342902,0,1.4334015499451211,1.5306093101365763,2.2512463240088034,2.1280877087193333,1.401359045199529,0.7418646801456215,1.0320212739417218,1.361197886283878,1.4181186940025035,-0.835055314390411,-0.16814274788616518,1.1284125825510003,1.267782866548965,-0.2910724881500066,-1.133646664653865,1.2027058601379395 +342902,1,0.8170606662288354,0.7067324708851749,2.2907172286710185,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-1.0630639836617988,2.138601779937744 +342902,2,0.9045372462971938,0.5943954402418251,1.718131000077305,,,,,,,,,,,,,2.138601779937744 +342904,0,0.529807110372864,-0.6554950822932735,-0.5882419354283478,2.1280877087193333,1.401359045199529,0.7418646801456215,1.0320212739417218,1.361197886283878,1.4181186940025035,-0.835055314390411,-0.16814274788616518,1.1284125825510003,0.49778314283978853,-0.2910724881500066,-0.9106055385131593,2.619781732559204 +342904,1,0.33645689517439314,-0.5404947701863974,-0.9772853356255832,,,,,,,,,,1.663413533782179,0.7456311526478686,-0.5613893220144716,2.506767988204956 +342904,2,-0.27617209458197817,-0.33981307655348536,-0.441929748703751,,,,,,,,,,,,,2.506767988204956 +343001,0,1.5463508548916531,0.8402605546324132,1.2635982337697944,2.1280877087193333,1.401359045199529,1.026323861956036,1.3969449327761334,1.9035723170224874,2.07655189585094,0.36043714080320877,-1.3476641243075844,0.28831555240026907,1.267782866548965,0.806708965813594,0.42764121833107505,2.094464063644409 +343001,1,0.4325776493852816,0.7958201309617158,1.371591507462599,,,,,,,,,,0.9503768127628092,1.8141914255436393,-0.059714660367144415,1.9216480255126953 +343001,2,1.3964994716635155,0.7500968597077102,1.178115812882041,,,,,,,,,,,,,1.9216480255126953 +343004,0,0.3039085004797998,0.6101443027976923,0.3994061548106614,2.1280877087193333,1.401359045199529,1.026323861956036,1.3969449327761334,1.9035723170224874,2.07655189585094,0.36043714080320877,-1.3476641243075844,0.28831555240026907,0.49778314283978853,0.806708965813594,-0.4645232862317478,2.345892906188965 +343004,1,1.1054229288615007,-0.00596880972715211,0.14609054585137357,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.059714660367144415,1.8270138502120972 +343004,2,0.8061448012239295,-0.18411165708760024,0.2780905008899343,,,,,,,,,,,,,1.8270138502120972 +343005,0,1.320452244998589,-0.6554950822932735,-0.7116979467082238,2.1280877087193333,1.401359045199529,1.026323861956036,1.3969449327761334,1.9035723170224874,2.07655189585094,0.36043714080320877,-1.3476641243075844,0.28831555240026907,1.267782866548965,-0.2910724881500066,-0.6875644123724536,1.8270138502120972 +343005,1,1.77826820833772,-0.7186700903394792,0.35034070611991114,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.5613893220144716,2.261077880859375 +343005,2,0.8061448012239295,-0.573365205752313,-0.17192215510611902,,,,,,,,,,,,,2.261077880859375 +343008,0,-0.37378732919939306,-0.6554950822932735,-0.3413299128685955,2.1280877087193333,1.401359045199529,1.026323861956036,1.3969449327761334,1.9035723170224874,2.07655189585094,0.36043714080320877,-1.3476641243075844,0.28831555240026907,1.267782866548965,0.806708965813594,-0.6875644123724536,2.182009220123291 +343008,1,1.1054229288615007,0.08311885034938876,0.04396546571710477,,,,,,,,,,1.663413533782179,0.7456311526478686,0.4419600012801827,2.1472718715667725 +343008,2,0.11739768571107917,-0.33981307655348536,0.45809556328835566,,,,,,,,,,,,,2.1472718715667725 +343203,0,0.19095919553326762,1.7607255619712974,2.1277903127289273,1.9806089704959091,1.2756408573093225,1.026323861956036,1.0320212739417218,0.2764490248066594,1.7473352949267216,-0.835055314390411,-0.9544903321671111,-0.9718299928258278,-2.5822157519969178,0.806708965813594,-0.6875644123724536,2.286059856414795 +343203,1,0.2403361409635047,0.4394694906555523,0.6567159465227176,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.310551991190808,2.4651904106140137 +343203,2,-0.5713494298017712,-0.41766378628642786,0.638100625686777,,,,,,,,,,,,,2.4651904106140137 +344602,0,0.4168578054263319,-0.1952625786238314,-0.3413299128685955,-0.08409336463203088,0.7727681057484966,0.7418646801456215,0.5758667003987075,0.3367128504442826,-0.22796431061858732,1.5559295959968287,1.4045524206757267,0.28831555240026907,-1.812216028287741,0.806708965813594,0.8737234706124865,-0.17892752587795258 +344602,1,1.2015436830723893,0.08311885034938876,0.45246578625417994,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,1.1944719937511734,1.0046143531799316 +344602,2,0.2157901307843435,0.5943954402418251,-0.17192215510611902,,,,,,,,,,,,,1.0046143531799316 +344703,0,-1.3903310737181822,-1.460901963714797,-1.3289780031076046,-1.2639232704194252,-1.9930320278360456,-0.6804312289064511,-1.4312134231905558,-1.9533125237854012,-0.8863975124670236,1.5559295959968287,-0.16814274788616518,-1.3918785079011935,-2.5822157519969178,-0.2910724881500066,-1.133646664653865,1.9592450857162476 +344703,1,-2.1626827143087066,-1.6986343511814288,-1.590035816431196,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.059714660367144415,1.8744919300079346 +344703,2,-0.7681343199482997,-2.130379400411164,-2.151977841488754,,,,,,,,,,,,,1.8744919300079346 +345802,0,-0.03493941435979663,1.645667436053937,0.029038120971032973,-0.674008317525728,-0.48441377315356804,0.17294631652479245,-0.42767336139592416,0.2764490248066594,-1.0510058129291326,0.36043714080320877,1.0113786285352542,-1.3918785079011935,-1.0422163045785646,-0.2910724881500066,-0.6875644123724536,2.2808115482330322 +345802,1,0.2403361409635047,0.2612941705024705,-0.05815961441716403,,,,,,,,,,-1.9017700713146695,-0.3229291202479022,0.4419600012801827,1.926398754119873 +345802,2,-0.07938720443544948,2.151409634900676,0.008082907292302316,,,,,,,,,,,,,1.926398754119873 +345803,0,-0.7126352440389895,0.7252024287150527,0.893230199930166,-0.674008317525728,-0.48441377315356804,0.17294631652479245,-0.42767336139592416,0.2764490248066594,-1.0510058129291326,0.36043714080320877,1.0113786285352542,-1.3918785079011935,0.49778314283978853,0.806708965813594,-0.24148216009104212,2.2808115482330322 +345803,1,-0.33638838430182605,1.2412584313444202,-0.7730351753570456,,,,,,,,,,-1.9017700713146695,-0.3229291202479022,-0.5613893220144716,1.926398754119873 +345803,2,-0.9649192100948284,0.8279475694406527,0.09808543849151298,,,,,,,,,,,,,1.926398754119873 +346501,0,0.3039085004797998,1.3004930583018552,1.3870542450496706,1.5381727558256364,0.7727681057484966,0.7418646801456215,0.7583285298159133,0.3969766760819059,1.0889020930782853,0.9581833684000187,1.0113786285352542,0.28831555240026907,0.49778314283978853,-0.2910724881500066,-1.133646664653865,1.7980340719223022 +346501,1,1.0093021746506123,1.5085214115740428,1.0652162670597927,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-0.8122266528381351,1.7835195064544678 +346501,2,0.31418257585760784,0.6722461499747677,0.45809556328835566,,,,,,,,,,,,,1.7835195064544678 +346503,0,1.4334015499451211,1.1854349323844948,2.1277903127289273,1.5381727558256364,0.7727681057484966,0.7418646801456215,0.7583285298159133,0.3969766760819059,1.0889020930782853,0.9581833684000187,1.0113786285352542,0.28831555240026907,0.49778314283978853,-1.388853942113607,-1.133646664653865,2.3729214668273926 +346503,1,0.9131814204397238,0.7958201309617158,1.2694664273283303,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-0.8122266528381351,0.5113371014595032 +346503,2,0.9045372462971938,0.7500968597077102,1.448123406479673,,,,,,,,,,,,,0.5113371014595032 +346902,0,2.44994529446391,1.3004930583018552,2.868526380408184,1.6856514940490606,1.149922669419116,1.3107830437664505,0.940790359233119,1.4817255375591245,1.9119435953888306,0.9581833684000187,0.22503104425430823,1.1284125825510003,-1.812216028287741,0.806708965813594,-0.24148216009104212,2.3107686042785645 +346902,1,1.4899059457050545,1.8648720518802064,0.8609661067912552,,,,,,,,,,-1.9017700713146695,-0.3229291202479022,-0.8122266528381351,2.3030176162719727 +346902,2,1.6916768068833083,2.0735589251677333,0.2780905008899343,,,,,,,,,,,,,2.3030176162719727 +347601,0,0.9816043301589925,0.14991179912825014,0.029038120971032973,-1.1164445321960008,0.018458978407257843,0.17294631652479245,-0.1539806172701155,-0.26592540593194997,-0.06335601015647824,-0.835055314390411,-0.9544903321671111,-0.5517814777504622,0.49778314283978853,0.806708965813594,-0.24148216009104212,1.102941870689392 +347601,1,-0.14414687588004912,0.4394694906555523,0.963091186925524,,,,,,,,,,0.9503768127628092,-1.3914893931436731,0.4419600012801827,1.8279719352722168 +347601,2,-0.6697418748750354,0.43869402077594005,1.5381259376788836,,,,,,,,,,,,,1.8279719352722168 +349102,0,-1.27738176877165,-0.3103207045411919,-0.2178739015887193,-0.23157210285545515,-0.6101319610437744,-0.3959720470960366,0.210943041564296,0.2161851991690361,-0.7217892120049145,-0.23730908679360116,0.22503104425430823,-0.5517814777504622,-0.27221658086938805,-0.2910724881500066,-0.9106055385131593,2.166635274887085 +349102,1,-0.6247506469344914,-0.18414412988023388,0.6567159465227176,,,,,,,,,,0.9503768127628092,-1.3914893931436731,0.6927973321038463,1.9808478355407715 +349102,2,-1.3584889903878858,-0.18411165708760024,0.09808543849151298,,,,,,,,,,,,,1.9808478355407715 +350201,0,0.8686550252124604,0.6101443027976923,0.5228621660905376,0.5058215882616662,0.5213317299680837,0.457405498335207,0.3934048709815018,1.2406702350086316,-0.3925726110806964,1.5559295959968287,0.22503104425430823,0.7083640674756347,-1.0422163045785646,0.806708965813594,-0.6875644123724536,2.39080548286438 +350201,1,0.048094632541727786,0.3503818305790114,0.7588410266569864,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.5613893220144716,2.5496721267700195 +350201,2,-0.6697418748750354,0.43869402077594005,0.9981107504836196,,,,,,,,,,,,,2.5496721267700195 +350202,0,0.07800989058673549,-0.08020445270647089,0.15249413225090913,0.5058215882616662,0.5213317299680837,0.457405498335207,0.3934048709815018,1.2406702350086316,-0.3925726110806964,1.5559295959968287,0.22503104425430823,0.7083640674756347,-0.27221658086938805,-0.2910724881500066,0.20460009219036931,2.6109731197357178 +350202,1,0.4325776493852816,-0.3623194500333156,-0.26240977468570165,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.310551991190808,2.5663986206054688 +350202,2,-0.4729569847285068,0.1272911818441699,0.638100625686777,,,,,,,,,,,,,2.5663986206054688 +350602,0,0.19095919553326762,-0.08020445270647089,-0.3413299128685955,0.9482578029319392,1.2756408573093225,1.026323861956036,0.3021739562728989,-0.08513392901908017,0.9242937926161762,-0.23730908679360116,1.0113786285352542,1.1284125825510003,-0.27221658086938805,0.806708965813594,0.8737234706124865,2.326242446899414 +350602,1,0.8170606662288354,-0.18414412988023388,-0.568785015088508,,,,,,,,,,0.2373400917434395,-0.3229291202479022,3.7028453019878094,0.03645429387688637 +350602,2,0.8061448012239295,-0.41766378628642786,0.09808543849151298,,,,,,,,,,,,,0.03645429387688637 +350603,0,0.3039085004797998,0.14991179912825014,0.5228621660905376,0.9482578029319392,1.2756408573093225,1.026323861956036,0.3021739562728989,-0.08513392901908017,0.9242937926161762,-0.23730908679360116,1.0113786285352542,1.1284125825510003,-0.27221658086938805,0.806708965813594,0.8737234706124865,2.326242446899414 +350603,1,1.970509716759497,2.132135032109829,1.1673413471940615,,,,,,,,,,0.2373400917434395,-0.3229291202479022,0.4419600012801827,0.03645429387688637 +350603,2,0.2157901307843435,-0.18411165708760024,0.2780905008899343,,,,,,,,,,,,,0.03645429387688637 +352202,0,0.529807110372864,0.9553186805497738,-0.2178739015887193,-0.8214870557491524,-0.9872865247143939,-2.102727137958524,-0.9750588496475414,-2.134104000698271,-0.8863975124670236,-0.835055314390411,-1.3476641243075844,-0.5517814777504622,0.49778314283978853,-1.388853942113607,-0.9106055385131593,2.064629077911377 +352202,1,0.52869840359617,0.6176448108086341,-0.36453485481997044,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.310551991190808,2.5910074710845947 +352202,2,0.8061448012239295,0.1272911818441699,0.008082907292302316,,,,,,,,,,,,,2.5910074710845947 +353202,0,-0.8255845489855216,-1.000669460045355,-0.8351539579881,0.358342850038242,0.5213317299680837,1.026323861956036,1.4881758474847362,0.7585596299076455,-0.5571809115428055,0.9581833684000187,1.0113786285352542,-0.13173296267509654,1.267782866548965,0.806708965813594,0.8737234706124865,1.6536773443222046 +353202,1,0.33645689517439314,-1.2531960507987243,-0.46665993495423924,,,,,,,,,,0.9503768127628092,-0.3229291202479022,0.4419600012801827,0.6565077304840088 +353202,2,-0.4729569847285068,-0.9626187544170256,-0.5319322799029617,,,,,,,,,,,,,0.6565077304840088 +353204,0,-0.37378732919939306,-0.8856113341279945,-0.7116979467082238,0.358342850038242,0.5213317299680837,1.026323861956036,1.4881758474847362,0.7585596299076455,-0.5571809115428055,0.9581833684000187,1.0113786285352542,-0.13173296267509654,0.49778314283978853,-1.388853942113607,0.8737234706124865,2.1532981395721436 +353204,1,0.6248191578070585,0.17220651042592966,-0.36453485481997044,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,0.4419600012801827,2.1158957481384277 +353204,2,0.2157901307843435,0.1272911818441699,-0.08191962390690835,,,,,,,,,,,,,2.1158957481384277 +354303,0,-0.7126352440389895,-1.1157275859627156,-0.9586099692679761,-0.08409336463203088,-0.8615683368241874,-1.2493495925272802,-0.33644244668732126,-0.20566158029432668,-0.3925726110806964,0.36043714080320877,-0.16814274788616518,0.28831555240026907,-1.812216028287741,-0.2910724881500066,-0.4645232862317478,0.6399627923965454 +354303,1,-0.8169921553562683,-0.3623194500333156,0.24821562598564237,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.8122266528381351,0.8063516616821289 +354303,2,-0.5713494298017712,-0.729066625218198,-0.35192721750454037,,,,,,,,,,,,,0.8063516616821289 +354501,0,1.9981480746777818,1.5306093101365763,1.5105102563295467,-0.8214870557491524,0.2698953541876708,0.17294631652479245,0.028481212147090252,-0.024870103381456905,-0.3925726110806964,1.5559295959968287,1.0113786285352542,0.7083640674756347,0.49778314283978853,0.806708965813594,-0.018441033950336395,2.137608051300049 +354501,1,0.9131814204397238,1.5976090716505837,0.8609661067912552,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.310551991190808,2.3348352909088135 +354501,2,0.5109674660041365,0.6722461499747677,0.368093032089145,,,,,,,,,,,,,2.3348352909088135 +355201,0,-0.5996859390924573,-1.1157275859627156,-0.9586099692679761,0.8007790647085149,0.8984862936387031,0.457405498335207,1.1232521886503248,0.8790872811828919,1.4181186940025035,1.5559295959968287,1.4045524206757267,1.1284125825510003,1.267782866548965,-0.2910724881500066,3.104134732019544,2.1955909729003906 +355201,1,0.2403361409635047,-0.7186700903394792,-0.6709100952227768,,,,,,,,,,0.9503768127628092,0.7456311526478686,0.4419600012801827,2.2943034172058105 +355201,2,0.41257502093087217,-0.573365205752313,-0.17192215510611902,,,,,,,,,,,,,2.2943034172058105 +355701,0,-0.48673663414592516,-0.42537883045855246,0.3994061548106614,-0.674008317525728,-0.6101319610437744,0.17294631652479245,-0.518904276104527,0.09565754789378961,0.2658605907677399,-0.23730908679360116,-0.9544903321671111,-0.5517814777504622,1.267782866548965,-0.2910724881500066,-1.133646664653865,1.8914084434509277 +355701,1,-1.393716680621599,-0.2732317899567748,0.24821562598564237,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.5613893220144716,1.7443128824234009 +355701,2,-2.2440209960472646,-0.2619623668205428,-0.26192468630532967,,,,,,,,,,,,,1.7443128824234009 +355703,0,-1.164432463825118,-1.3458438377974367,-1.2055219918277285,-0.674008317525728,-0.6101319610437744,0.17294631652479245,-0.518904276104527,0.09565754789378961,0.2658605907677399,-0.23730908679360116,-0.9544903321671111,-0.5517814777504622,0.49778314283978853,-0.2910724881500066,-0.6875644123724536,1.7443128824234009 +355703,1,-1.2975959264107106,-0.80775775041602,-0.26240977468570165,,,,,,,,,,0.2373400917434395,-1.3914893931436731,-0.8122266528381351,1.7558012008666992 +355703,2,-1.8504512157542075,-0.33981307655348536,-0.981944935899015,,,,,,,,,,,,,1.7558012008666992 +355801,0,1.0945536351055247,-1.1157275859627156,-0.9586099692679761,0.8007790647085149,0.018458978407257843,1.026323861956036,1.3969449327761334,1.361197886283878,0.9242937926161762,-0.835055314390411,-0.9544903321671111,-0.9718299928258278,-0.27221658086938805,0.806708965813594,-0.24148216009104212,1.9216480255126953 +355801,1,0.6248191578070585,0.5285571507320932,1.2694664273283303,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.8122266528381351,2.453618288040161 +355801,2,0.019005240637814846,0.5943954402418251,0.368093032089145,,,,,,,,,,,,,2.453618288040161 +356502,0,-1.164432463825118,-1.000669460045355,-0.8351539579881,1.390694017602212,0.8984862936387031,1.026323861956036,1.4881758474847362,1.4214617119215014,1.7473352949267216,0.36043714080320877,0.22503104425430823,1.9685096127017316,0.49778314283978853,-0.2910724881500066,-0.9106055385131593,1.2153352499008179 +356502,1,-0.6247506469344914,-0.6295824302629383,0.45246578625417994,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.059714660367144415,1.3106164932250977 +356502,2,-1.6536663256076787,-0.028410237621715174,0.8181056880851983,,,,,,,,,,,,,1.3106164932250977 +356601,0,-0.03493941435979663,0.8402605546324132,0.6463181773704137,0.8007790647085149,0.8984862936387031,0.457405498335207,0.940790359233119,0.4572405017195292,0.2658605907677399,-0.835055314390411,-0.16814274788616518,-0.13173296267509654,-0.27221658086938805,-1.388853942113607,-0.24148216009104212,1.5101048946380615 +356601,1,0.4325776493852816,0.8849077910382567,1.5758416677311367,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.059714660367144415,1.9973127841949463 +356601,2,-0.07938720443544948,0.9057982791735953,0.18808796969072364,,,,,,,,,,,,,1.9973127841949463 +356602,0,-0.37378732919939306,0.2649699250456107,0.893230199930166,0.8007790647085149,0.8984862936387031,0.457405498335207,0.940790359233119,0.4572405017195292,0.2658605907677399,-0.835055314390411,-0.16814274788616518,-0.13173296267509654,-0.27221658086938805,-1.388853942113607,-0.6875644123724536,2.0262656211853027 +356602,1,0.8170606662288354,0.4394694906555523,0.35034070611991114,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-0.5613893220144716,2.008892059326172 +356602,2,0.11739768571107917,0.5165447305088826,0.7281031568859877,,,,,,,,,,,,,2.008892059326172 +356603,0,-0.03493941435979663,-0.08020445270647089,0.3994061548106614,0.8007790647085149,0.8984862936387031,0.457405498335207,0.940790359233119,0.4572405017195292,0.2658605907677399,-0.835055314390411,-0.16814274788616518,-0.13173296267509654,-0.27221658086938805,-1.388853942113607,-0.9106055385131593,2.008892059326172 +356603,1,0.14421538675261625,0.7958201309617158,0.6567159465227176,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,-0.5613893220144716,2.096665620803833 +356603,2,0.019005240637814846,0.5165447305088826,1.8981360624757264,,,,,,,,,,,,,2.096665620803833 +359703,0,-1.0514831588785858,-1.460901963714797,-1.3289780031076046,0.358342850038242,1.149922669419116,0.17294631652479245,0.5758667003987075,0.2161851991690361,1.0889020930782853,0.36043714080320877,-0.5613165400266386,-0.9718299928258278,-1.0422163045785646,-0.2910724881500066,0.20460009219036931,1.7749511003494263 +359703,1,-1.393716680621599,-1.520459031028347,-1.590035816431196,,,,,,,,,,0.9503768127628092,0.7456311526478686,1.1944719937511734,1.7780998945236206 +359703,2,-1.5552738805344144,-2.286080819877049,-1.9719727790903323,,,,,,,,,,,,,1.7780998945236206 +359704,0,1.207502940052057,0.14991179912825014,-0.3413299128685955,0.358342850038242,1.149922669419116,0.17294631652479245,0.5758667003987075,0.2161851991690361,1.0889020930782853,0.36043714080320877,-0.5613165400266386,-0.9718299928258278,0.49778314283978853,0.806708965813594,0.8737234706124865,1.7780998945236206 +359704,1,0.8170606662288354,-0.09505646980369299,-0.26240977468570165,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-1.0630639836617988,0.18666033446788788 +359704,2,1.1013221364437225,-0.573365205752313,0.2780905008899343,,,,,,,,,,,,,0.18666033446788788 +360102,0,0.8686550252124604,0.6101443027976923,2.004334301449051,1.5381727558256364,0.7727681057484966,0.457405498335207,1.3057140180675306,1.9035723170224874,1.5827269944646125,0.9581833684000187,1.4045524206757267,0.28831555240026907,1.267782866548965,0.806708965813594,-0.6875644123724536,2.3417599201202393 +360102,1,0.14421538675261625,0.17220651042592966,-0.6709100952227768,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.5613893220144716,2.3465776443481445 +360102,2,0.9045372462971938,1.995708215434791,1.718131000077305,,,,,,,,,,,,,2.3465776443481445 +360301,0,-0.9385338539320537,-1.000669460045355,-0.8351539579881,0.358342850038242,0.39561354207787724,1.026323861956036,0.940790359233119,1.1804064093710083,0.595077191691958,-0.835055314390411,-1.3476641243075844,0.28831555240026907,-1.0422163045785646,-0.2910724881500066,-1.133646664653865,1.9232232570648193 +360301,1,-0.14414687588004912,-0.09505646980369299,-0.16028469455143282,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.5613893220144716,1.456284761428833 +360301,2,-0.5713494298017712,0.04944047211122737,-0.17192215510611902,,,,,,,,,,,,,1.456284761428833 +360303,0,-0.8255845489855216,-1.230785711880076,-1.0820659805478523,0.358342850038242,0.39561354207787724,1.026323861956036,0.940790359233119,1.1804064093710083,0.595077191691958,-0.835055314390411,-1.3476641243075844,0.28831555240026907,-0.27221658086938805,-0.2910724881500066,-1.133646664653865,2.182210683822632 +360303,1,-1.201475172199822,-0.6295824302629383,-1.2836605760283897,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-1.0630639836617988,2.1514432430267334 +360303,2,-0.27617209458197817,-0.41766378628642786,-0.5319322799029617,,,,,,,,,,,,,2.1514432430267334 +360901,0,-0.2608380242528609,-0.08020445270647089,0.2759501435307853,-0.37905084107887943,1.2756408573093225,0.457405498335207,0.4846357856901046,-0.26592540593194997,0.10125229030563083,-0.23730908679360116,-0.9544903321671111,-0.13173296267509654,-0.27221658086938805,-0.2910724881500066,-0.4645232862317478,1.9205257892608643 +360901,1,0.7209399120179469,0.17220651042592966,0.35034070611991114,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.5613893220144716,1.797853708267212 +360901,2,0.7077523561506651,0.1272911818441699,0.368093032089145,,,,,,,,,,,,,1.797853708267212 +360903,0,-0.03493941435979663,-0.8856113341279945,-0.7116979467082238,-0.37905084107887943,1.2756408573093225,0.457405498335207,0.4846357856901046,-0.26592540593194997,0.10125229030563083,-0.23730908679360116,-0.9544903321671111,-0.13173296267509654,0.49778314283978853,-0.2910724881500066,-0.9106055385131593,1.620093584060669 +360903,1,-0.04802612166916067,-0.09505646980369299,0.14609054585137357,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,-0.8122266528381351,1.6910876035690308 +360903,2,0.11739768571107917,-0.2619623668205428,-0.6219348111021723,,,,,,,,,,,,,1.6910876035690308 +361101,0,0.529807110372864,-0.8856113341279945,-0.8351539579881,0.5058215882616662,0.1441771662974643,0.17294631652479245,0.5758667003987075,0.6982958042700221,0.595077191691958,-0.23730908679360116,0.6182048363947807,-0.13173296267509654,0.49778314283978853,-0.2910724881500066,0.8737234706124865,2.2931275367736816 +361101,1,0.8170606662288354,0.08311885034938876,0.45246578625417994,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.8122266528381351,2.2545337677001953 +361101,2,0.31418257585760784,0.20514189157711243,-0.26192468630532967,,,,,,,,,,,,,2.2545337677001953 +361102,0,-1.27738176877165,-1.000669460045355,-0.8351539579881,0.5058215882616662,0.1441771662974643,0.17294631652479245,0.5758667003987075,0.6982958042700221,0.595077191691958,-0.23730908679360116,0.6182048363947807,-0.13173296267509654,0.49778314283978853,-0.2910724881500066,-0.24148216009104212,2.2545337677001953 +361102,1,-0.528629892723603,1.0630831111913384,0.5545908663884488,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.8122266528381351,1.973534107208252 +361102,2,-0.27617209458197817,0.43869402077594005,0.18808796969072364,,,,,,,,,,,,,1.973534107208252 +361301,0,-0.2608380242528609,-0.1952625786238314,0.029038120971032973,1.2432152793787876,1.401359045199529,1.026323861956036,0.8495594445245161,0.3367128504442826,0.2658605907677399,-0.23730908679360116,-1.740837916448057,1.1284125825510003,0.49778314283978853,-0.2910724881500066,0.8737234706124865,1.9892631769180298 +361301,1,0.4325776493852816,0.4394694906555523,0.35034070611991114,,,,,,,,,,-1.1887333502953,0.7456311526478686,1.1944719937511734,2.09648060798645 +361301,2,0.6093599110774008,0.7500968597077102,-0.08191962390690835,,,,,,,,,,,,,2.09648060798645 +362602,0,-0.5996859390924573,-1.1157275859627156,-0.9586099692679761,0.06338537359139342,1.0242044815289095,0.7418646801456215,1.2144831033589276,0.15592137353141286,-0.22796431061858732,-0.835055314390411,-0.9544903321671111,-0.5517814777504622,-1.0422163045785646,0.806708965813594,0.20460009219036931,1.4595760107040405 +362602,1,-0.4325091385127145,-1.6986343511814288,-0.36453485481997044,,,,,,,,,,1.663413533782179,0.7456311526478686,1.1944719937511734,1.640062928199768 +362602,2,0.6093599110774008,-0.8847680446840831,0.008082907292302316,,,,,,,,,,,,,1.640062928199768 +364101,0,0.3039085004797998,1.1854349323844948,2.4981583465685557,0.6533003264850905,0.39561354207787724,0.17294631652479245,-0.61013519081313,0.6982958042700221,0.10125229030563083,0.36043714080320877,-0.5613165400266386,0.28831555240026907,-1.812216028287741,-0.2910724881500066,0.8737234706124865,2.386503219604492 +364101,1,0.7209399120179469,1.2412584313444202,0.963091186925524,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,1.1944719937511734,1.5333211421966553 +364101,2,-0.37456453965524245,0.8279475694406527,1.988138593674937,,,,,,,,,,,,,1.5333211421966553 +365001,0,-1.27738176877165,-1.000669460045355,-0.8351539579881,0.06338537359139342,0.2698953541876708,-0.1115128652856221,0.4846357856901046,1.602253188834371,-0.3925726110806964,0.9581833684000187,1.7977262128162,0.28831555240026907,1.267782866548965,-0.2910724881500066,-0.6875644123724536,1.5726954936981201 +365001,1,-1.0092336637780452,-0.80775775041602,-0.36453485481997044,,,,,,,,,,0.9503768127628092,-0.3229291202479022,1.1944719937511734,1.6208003759384155 +365001,2,-0.7681343199482997,-0.573365205752313,-0.17192215510611902,,,,,,,,,,,,,1.6208003759384155 +365002,0,-0.5996859390924573,-0.5404369563759129,-0.4647859241484716,0.06338537359139342,0.2698953541876708,-0.1115128652856221,0.4846357856901046,1.602253188834371,-0.3925726110806964,0.9581833684000187,1.7977262128162,0.28831555240026907,0.49778314283978853,-0.2910724881500066,0.8737234706124865,1.6208003759384155 +365002,1,-0.14414687588004912,-0.9859330705691017,-0.8751602554913144,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.8122266528381351,2.350102663040161 +365002,2,0.2157901307843435,-0.6512159154852555,0.368093032089145,,,,,,,,,,,,,2.350102663040161 +365502,0,-0.14788871930632877,-0.08020445270647089,-0.3413299128685955,-0.37905084107887943,-1.3644410883850133,-0.3959720470960366,0.11971212685569313,0.3367128504442826,-0.5571809115428055,-0.23730908679360116,1.0113786285352542,-0.13173296267509654,0.49778314283978853,0.806708965813594,-0.4645232862317478,2.1316261291503906 +365502,1,-0.4325091385127145,0.08311885034938876,0.45246578625417994,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.8122266528381351,1.8498271703720093 +365502,2,-0.37456453965524245,0.04944047211122737,1.178115812882041,,,,,,,,,,,,,1.8498271703720093 +366101,0,-0.5996859390924573,0.2649699250456107,0.15249413225090913,-0.37905084107887943,0.2698953541876708,0.457405498335207,-0.42767336139592416,-0.14539775465670343,-0.3925726110806964,-0.835055314390411,-0.16814274788616518,0.7083640674756347,1.267782866548965,0.806708965813594,-0.6875644123724536,1.7194336652755737 +366101,1,0.33645689517439314,0.17220651042592966,0.24821562598564237,,,,,,,,,,1.663413533782179,0.7456311526478686,-0.059714660367144415,1.7525019645690918 +366101,2,-0.1777796495087138,-0.4955144960193704,-0.7119373423013831,,,,,,,,,,,,,1.7525019645690918 +366301,0,0.3039085004797998,-0.42537883045855246,-0.5882419354283478,0.6533003264850905,0.7727681057484966,0.457405498335207,1.3969449327761334,1.6625170144719943,1.7473352949267216,0.36043714080320877,-0.16814274788616518,0.28831555240026907,1.267782866548965,1.9044904197771946,0.8737234706124865,2.316704034805298 +366301,1,1.6821474541268315,-0.2732317899567748,-0.7730351753570456,,,,,,,,,,1.663413533782179,0.7456311526478686,-0.5613893220144716,2.440580129623413 +366301,2,1.4948919167367798,-0.729066625218198,0.008082907292302316,,,,,,,,,,,,,2.440580129623413 +367701,0,0.19095919553326762,-0.770553208210634,-0.3413299128685955,1.0957365411553635,1.149922669419116,1.026323861956036,1.4881758474847362,0.9393511068205153,2.07655189585094,0.36043714080320877,-0.16814274788616518,-0.9718299928258278,-0.27221658086938805,1.9044904197771946,3.104134732019544,2.5150914192199707 +367701,1,0.33645689517439314,-0.00596880972715211,0.04396546571710477,,,,,,,,,,-0.47569662927593015,1.8141914255436393,-0.059714660367144415,2.4513912200927734 +367701,2,0.11739768571107917,0.1272911818441699,0.8181056880851983,,,,,,,,,,,,,2.4513912200927734 +367702,0,0.9816043301589925,0.3800280509629712,-0.2178739015887193,1.0957365411553635,1.149922669419116,1.026323861956036,1.4881758474847362,0.9393511068205153,2.07655189585094,0.36043714080320877,-0.16814274788616518,-0.9718299928258278,1.267782866548965,1.9044904197771946,-0.018441033950336395,2.695869207382202 +367702,1,0.4325776493852816,0.17220651042592966,0.6567159465227176,,,,,,,,,,0.2373400917434395,1.8141914255436393,0.4419600012801827,1.9582409858703613 +367702,2,1.1997145815169867,0.43869402077594005,0.45809556328835566,,,,,,,,,,,,,1.9582409858703613 +367901,0,0.529807110372864,-1.000669460045355,-0.8351539579881,0.06338537359139342,0.2698953541876708,1.026323861956036,1.3057140180675306,1.4214617119215014,0.9242937926161762,1.5559295959968287,0.22503104425430823,0.7083640674756347,0.49778314283978853,-0.2910724881500066,0.8737234706124865,2.00026273727417 +367901,1,-0.7208714011453798,-0.9859330705691017,1.371591507462599,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.059714660367144415,1.8131392002105713 +367901,2,-0.27617209458197817,0.6722461499747677,0.9981107504836196,,,,,,,,,,,,,1.8131392002105713 +369701,0,-0.37378732919939306,-0.770553208210634,-0.5882419354283478,-0.08409336463203088,-1.2387229004948068,-1.2493495925272802,1.3969449327761334,-1.4712019186844152,-0.8863975124670236,-0.835055314390411,0.22503104425430823,-1.8119270229765592,-0.27221658086938805,0.806708965813594,-0.24148216009104212,0.546037495136261 +369701,1,0.14421538675261625,-0.4514071101098565,-1.1815354958941209,,,,,,,,,,-1.1887333502953,0.7456311526478686,-0.8122266528381351,0.4208196699619293 +369701,2,0.2157901307843435,-0.41766378628642786,-0.981944935899015,,,,,,,,,,,,,0.4208196699619293 +369704,0,-1.164432463825118,-0.5404369563759129,-0.7116979467082238,-0.08409336463203088,-1.2387229004948068,-1.2493495925272802,1.3969449327761334,-1.4712019186844152,-0.8863975124670236,-0.835055314390411,0.22503104425430823,-1.8119270229765592,-0.27221658086938805,1.9044904197771946,-0.24148216009104212,0.006005931179970503 +369704,1,-0.6247506469344914,0.6176448108086341,0.14609054585137357,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.310551991190808,0.14306415617465973 +369704,2,-0.8665267650215641,0.36084331104299755,0.09808543849151298,,,,,,,,,,,,,0.14306415617465973 +370502,0,-0.2608380242528609,-0.08020445270647089,-0.3413299128685955,0.9482578029319392,0.7727681057484966,1.3107830437664505,0.6670976151073104,0.7585596299076455,-0.22796431061858732,-0.835055314390411,-0.9544903321671111,0.28831555240026907,0.49778314283978853,1.9044904197771946,0.20460009219036931,2.3928020000457764 +370502,1,-0.528629892723603,0.8849077910382567,0.8609661067912552,,,,,,,,,,0.2373400917434395,0.7456311526478686,0.4419600012801827,1.951032042503357 +370502,2,-0.1777796495087138,0.5165447305088826,0.008082907292302316,,,,,,,,,,,,,1.951032042503357 +371501,0,-0.48673663414592516,-1.000669460045355,-0.8351539579881,1.5381727558256364,1.0242044815289095,1.3107830437664505,1.3969449327761334,1.0598787580957618,0.595077191691958,0.9581833684000187,-0.16814274788616518,1.1284125825510003,1.267782866548965,-0.2910724881500066,0.8737234706124865,1.4690967798233032 +371501,1,-0.528629892723603,-0.3623194500333156,0.963091186925524,,,,,,,,,,1.663413533782179,-0.3229291202479022,-0.5613893220144716,1.7570639848709106 +371501,2,0.6093599110774008,-0.33981307655348536,0.8181056880851983,,,,,,,,,,,,,1.7570639848709106 +371502,0,-0.7126352440389895,-1.000669460045355,-0.8351539579881,1.5381727558256364,1.0242044815289095,1.3107830437664505,1.3969449327761334,1.0598787580957618,0.595077191691958,0.9581833684000187,-0.16814274788616518,1.1284125825510003,1.267782866548965,-0.2910724881500066,-0.4645232862317478,1.7570639848709106 +371502,1,-0.8169921553562683,-0.7186700903394792,0.24821562598564237,,,,,,,,,,1.663413533782179,0.7456311526478686,0.19112267045651915,1.310645580291748 +371502,2,0.31418257585760784,0.20514189157711243,0.908108219284409,,,,,,,,,,,,,1.310645580291748 +371902,0,0.19095919553326762,0.14991179912825014,0.6463181773704137,-0.23157210285545515,0.1441771662974643,-0.6804312289064511,-0.7013661055217327,-0.4467168828448197,0.10125229030563083,0.36043714080320877,-1.3476641243075844,-1.3918785079011935,-0.27221658086938805,-0.2910724881500066,0.8737234706124865,0.7557929158210754 +371902,1,-0.24026763009093757,-0.3623194500333156,-0.36453485481997044,,,,,,,,,,0.2373400917434395,1.8141914255436393,1.1944719937511734,0.9921917915344238 +371902,2,-0.9649192100948284,-0.18411165708760024,-0.26192468630532967,,,,,,,,,,,,,0.9921917915344238 +372602,0,1.4334015499451211,-0.08020445270647089,-0.2178739015887193,0.358342850038242,1.2756408573093225,1.026323861956036,1.2144831033589276,0.3367128504442826,0.430468891229849,-0.835055314390411,-0.16814274788616518,-0.13173296267509654,-0.27221658086938805,-0.2910724881500066,-0.24148216009104212,2.3459150791168213 +372602,1,-0.7208714011453798,-0.3623194500333156,-0.568785015088508,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.5613893220144716,2.4317307472229004 +372602,2,-0.27617209458197817,-0.33981307655348536,-0.7119373423013831,,,,,,,,,,,,,2.4317307472229004 +372903,0,-1.27738176877165,-1.6910182155495181,-1.575890025667357,0.2108641118148177,0.7727681057484966,0.457405498335207,-0.33644244668732126,-0.5672445341200663,0.430468891229849,0.9581833684000187,-0.16814274788616518,-0.13173296267509654,-1.0422163045785646,-0.2910724881500066,-0.9106055385131593,0.6481906771659851 +372903,1,-1.4898374348324874,-1.431371370951806,-1.2836605760283897,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.5613893220144716,0.4209933280944824 +372903,2,-1.8504512157542075,-0.573365205752313,-0.5319322799029617,,,,,,,,,,,,,0.4209933280944824 +373602,0,2.1110973796243138,0.14991179912825014,-0.4647859241484716,0.5058215882616662,1.0242044815289095,1.026323861956036,0.8495594445245161,0.2161851991690361,0.430468891229849,0.36043714080320877,0.22503104425430823,-0.13173296267509654,0.49778314283978853,-0.2910724881500066,-0.24148216009104212,1.9859296083450317 +373602,1,1.3937851914941661,0.2612941705024705,1.882216908133943,,,,,,,,,,0.9503768127628092,-1.3914893931436731,1.1944719937511734,1.8328126668930054 +373602,2,1.6916768068833083,2.462812473832446,1.178115812882041,,,,,,,,,,,,,1.8328126668930054 +373701,0,-1.3903310737181822,-0.08020445270647089,-0.7116979467082238,0.8007790647085149,0.2698953541876708,0.17294631652479245,0.6670976151073104,0.5175043273571525,-0.3925726110806964,0.36043714080320877,0.6182048363947807,1.1284125825510003,1.267782866548965,0.806708965813594,-0.4645232862317478,2.2613625526428223 +373701,1,-0.14414687588004912,-0.9859330705691017,-0.05815961441716403,,,,,,,,,,1.663413533782179,0.7456311526478686,0.4419600012801827,2.2412171363830566 +373701,2,-0.1777796495087138,-0.8069173349511406,-1.251952529496647,,,,,,,,,,,,,2.2412171363830566 +374001,0,-0.5996859390924573,0.9553186805497738,-0.4647859241484716,-0.674008317525728,-0.8615683368241874,-1.8182679561481092,-0.1539806172701155,-0.14539775465670343,-0.22796431061858732,-0.23730908679360116,-0.5613165400266386,-1.3918785079011935,0.49778314283978853,-1.388853942113607,-0.9106055385131593,1.235137939453125 +374001,1,-0.24026763009093757,-0.4514071101098565,-0.26240977468570165,,,,,,,,,,0.2373400917434395,2.88275169843941,-0.8122266528381351,1.6508764028549194 +374001,2,0.41257502093087217,0.282992601310055,0.2780905008899343,,,,,,,,,,,,,1.6508764028549194 +374002,0,0.8686550252124604,-0.08020445270647089,-0.5882419354283478,-0.674008317525728,-0.8615683368241874,-1.8182679561481092,-0.1539806172701155,-0.14539775465670343,-0.22796431061858732,-0.23730908679360116,-0.5613165400266386,-1.3918785079011935,-0.27221658086938805,-0.2910724881500066,-0.6875644123724536,1.6508764028549194 +374002,1,0.048094632541727786,0.2612941705024705,0.8609661067912552,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-0.310551991190808,1.6335792541503906 +374002,2,0.6093599110774008,-0.4955144960193704,-0.08191962390690835,,,,,,,,,,,,,1.6335792541503906 +374601,0,0.6427564153193962,0.4950861768803317,1.016686211210042,-0.8214870557491524,0.7727681057484966,-0.1115128652856221,0.028481212147090252,0.6380319786323989,-1.0510058129291326,-0.835055314390411,-1.3476641243075844,-1.8119270229765592,-0.27221658086938805,0.806708965813594,0.8737234706124865,2.0023252964019775 +374601,1,0.9131814204397238,0.2612941705024705,-0.16028469455143282,,,,,,,,,,0.2373400917434395,1.8141914255436393,-0.8122266528381351,2.071876049041748 +374601,2,0.41257502093087217,0.5943954402418251,0.2780905008899343,,,,,,,,,,,,,2.071876049041748 +374603,0,0.3039085004797998,0.9553186805497738,1.3870542450496706,-0.8214870557491524,0.7727681057484966,-0.1115128652856221,0.028481212147090252,0.6380319786323989,-1.0510058129291326,-0.835055314390411,-1.3476641243075844,-1.8119270229765592,-1.0422163045785646,3.002271873740795,0.8737234706124865,2.3044207096099854 +374603,1,1.6821474541268315,1.6866967317271246,1.0652162670597927,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.059714660367144415,2.7559139728546143 +374603,2,2.085246587176366,0.9836489889065378,0.45809556328835566,,,,,,,,,,,,,2.7559139728546143 +377002,0,-0.03493941435979663,-1.000669460045355,-0.8351539579881,0.5058215882616662,0.5213317299680837,0.7418646801456215,0.210943041564296,0.9393511068205153,0.2658605907677399,1.5559295959968287,1.4045524206757267,0.7083640674756347,0.49778314283978853,-0.2910724881500066,-0.24148216009104212,1.804591417312622 +377002,1,0.9131814204397238,-0.4514071101098565,0.24821562598564237,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.059714660367144415,2.0588855743408203 +377002,2,-0.5713494298017712,-0.4955144960193704,0.18808796969072364,,,,,,,,,,,,,2.0588855743408203 +377103,0,-0.03493941435979663,-0.42537883045855246,-0.3413299128685955,1.0957365411553635,0.39561354207787724,1.026323861956036,1.1232521886503248,1.1804064093710083,1.5827269944646125,-0.23730908679360116,-1.3476641243075844,-1.3918785079011935,-0.27221658086938805,-0.2910724881500066,0.8737234706124865,1.3846526145935059 +377103,1,-0.04802612166916067,0.17220651042592966,0.35034070611991114,,,,,,,,,,0.2373400917434395,0.7456311526478686,0.4419600012801827,1.6207859516143799 +377103,2,-0.27617209458197817,1.5286039570371357,-0.08191962390690835,,,,,,,,,,,,,1.6207859516143799 +377201,0,-0.8255845489855216,-1.1157275859627156,-0.9586099692679761,0.2108641118148177,0.7727681057484966,0.7418646801456215,0.3934048709815018,0.6982958042700221,0.430468891229849,0.9581833684000187,0.6182048363947807,-0.9718299928258278,0.49778314283978853,1.9044904197771946,0.20460009219036931,1.3550971746444702 +377201,1,-0.24026763009093757,-1.520459031028347,-0.46665993495423924,,,,,,,,,,0.9503768127628092,1.8141914255436393,-0.5613893220144716,1.437592625617981 +377201,2,0.2157901307843435,-1.1961708836158533,-0.441929748703751,,,,,,,,,,,,,1.437592625617981 +378601,0,-1.0514831588785858,1.1854349323844948,0.893230199930166,-0.5265295793023037,0.018458978407257843,0.17294631652479245,0.028481212147090252,-0.9288274879458058,-0.7217892120049145,-0.835055314390411,-0.16814274788616518,1.9685096127017316,0.49778314283978853,-1.388853942113607,-0.9106055385131593,1.9674564599990845 +378601,1,0.52869840359617,0.7958201309617158,1.0652162670597927,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.5613893220144716,1.8467730283737183 +378601,2,-0.07938720443544948,0.20514189157711243,0.5480980944875663,,,,,,,,,,,,,1.8467730283737183 +379002,0,-0.7126352440389895,-1.000669460045355,-0.8351539579881,-0.23157210285545515,-0.2329773973731551,0.457405498335207,-0.8838279349389385,-0.6877721853953127,0.2658605907677399,-0.835055314390411,1.0113786285352542,-0.13173296267509654,-0.27221658086938805,-0.2910724881500066,-0.6875644123724536,2.0226292610168457 +379002,1,0.52869840359617,-0.7186700903394792,0.24821562598564237,,,,,,,,,,0.2373400917434395,-1.3914893931436731,-0.8122266528381351,1.792592167854309 +379002,2,-0.1777796495087138,-0.6512159154852555,0.368093032089145,,,,,,,,,,,,,1.792592167854309 +379103,0,1.6593001598381854,0.14991179912825014,0.15249413225090913,1.390694017602212,0.8984862936387031,0.7418646801456215,1.4881758474847362,0.7585596299076455,1.2535103935403944,0.9581833684000187,-0.5613165400266386,1.548461097626366,1.267782866548965,0.806708965813594,1.7658879751753094,2.995732307434082 +379103,1,1.1054229288615007,0.5285571507320932,1.1673413471940615,,,,,,,,,,0.9503768127628092,-0.3229291202479022,0.4419600012801827,2.702275276184082 +379103,2,1.4948919167367798,1.295051827838308,0.638100625686777,,,,,,,,,,,,,2.702275276184082 +379701,0,0.3039085004797998,-0.08020445270647089,-0.4647859241484716,1.390694017602212,1.149922669419116,0.7418646801456215,0.4846357856901046,0.9996149324581385,0.9242937926161762,-0.23730908679360116,0.6182048363947807,-2.2319755380519246,0.49778314283978853,1.9044904197771946,3.104134732019544,2.0105955600738525 +379701,1,0.2403361409635047,0.17220651042592966,0.8609661067912552,,,,,,,,,,0.9503768127628092,0.7456311526478686,1.1944719937511734,2.3077685832977295 +379701,2,-0.1777796495087138,1.2172011181053655,0.7281031568859877,,,,,,,,,,,,,2.3077685832977295 +379801,0,0.9816043301589925,3.256481198896984,2.004334301449051,0.5058215882616662,0.1441771662974643,0.457405498335207,1.3057140180675306,1.843308491384864,0.10125229030563083,0.36043714080320877,1.4045524206757267,-0.13173296267509654,1.267782866548965,0.806708965813594,0.8737234706124865,2.2294747829437256 +379801,1,0.4325776493852816,2.3103103522629107,1.371591507462599,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.059714660367144415,2.463927745819092 +379801,2,0.019005240637814846,1.0614996986394805,0.45809556328835566,,,,,,,,,,,,,2.463927745819092 +380401,0,1.0945536351055247,-0.1952625786238314,-0.09441789030884316,1.6856514940490606,1.401359045199529,0.457405498335207,0.6670976151073104,0.2161851991690361,1.2535103935403944,0.9581833684000187,1.0113786285352542,1.1284125825510003,1.267782866548965,0.806708965813594,0.8737234706124865,1.64962637424469 +380401,1,0.2403361409635047,0.7958201309617158,0.24821562598564237,,,,,,,,,,0.9503768127628092,0.7456311526478686,1.1944719937511734,2.056382656097412 +380401,2,0.6093599110774008,1.606454666770078,2.1681436560733585,,,,,,,,,,,,,2.056382656097412 +381201,0,1.7722494647847176,0.6101443027976923,2.1277903127289273,2.1280877087193333,1.401359045199529,1.3107830437664505,1.3969449327761334,1.9638361426601105,2.07655189585094,1.5559295959968287,1.7977262128162,1.9685096127017316,1.267782866548965,0.806708965813594,0.8737234706124865,2.995732307434082 +381201,1,0.9131814204397238,1.2412584313444202,2.086467068402481,,,,,,,,,,0.2373400917434395,0.7456311526478686,1.1944719937511734,2.158076763153076 +381201,2,0.7077523561506651,0.9057982791735953,1.6281284688780944,,,,,,,,,,,,,2.158076763153076 +381903,0,-0.9385338539320537,-0.3103207045411919,-0.09441789030884316,-1.1164445321960008,-1.2387229004948068,-0.6804312289064511,-0.8838279349389385,-0.8685636623081825,-0.5571809115428055,-0.835055314390411,-0.9544903321671111,-0.13173296267509654,-1.812216028287741,-0.2910724881500066,-1.3566877907945707,1.102951169013977 +381903,1,-0.6247506469344914,0.08311885034938876,-0.36453485481997044,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-1.0630639836617988,1.7378169298171997 +381903,2,0.5109674660041365,-0.4955144960193704,-0.17192215510611902,,,,,,,,,,,,,1.7378169298171997 +381904,0,0.6427564153193962,0.03485367321088963,0.15249413225090913,-1.1164445321960008,-1.2387229004948068,-0.6804312289064511,-0.8838279349389385,-0.8685636623081825,-0.5571809115428055,-0.835055314390411,-0.9544903321671111,-0.13173296267509654,0.49778314283978853,-0.2910724881500066,-1.133646664653865,1.7378169298171997 +381904,1,0.6248191578070585,-0.2732317899567748,-0.05815961441716403,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-1.0630639836617988,1.5590909719467163 +381904,2,-0.7681343199482997,0.36084331104299755,0.09808543849151298,,,,,,,,,,,,,1.5590909719467163 +384202,0,1.8851987697312496,0.7252024287150527,-0.09441789030884316,0.358342850038242,0.39561354207787724,0.7418646801456215,-0.8838279349389385,-0.26592540593194997,0.2658605907677399,-0.835055314390411,-1.3476641243075844,-0.5517814777504622,0.49778314283978853,-0.2910724881500066,-0.24148216009104212,-0.3430551588535309 +384202,1,1.5860266999159431,0.8849077910382567,0.8609661067912552,,,,,,,,,,0.2373400917434395,-0.3229291202479022,2.4486586478694914,-0.6713234186172485 +384202,2,1.593284361810044,1.606454666770078,1.6281284688780944,,,,,,,,,,,,,-0.6713234186172485 +385102,0,1.9981480746777818,0.6101443027976923,0.15249413225090913,-0.23157210285545515,0.2698953541876708,0.457405498335207,0.3934048709815018,-1.4109380930467919,-0.8863975124670236,-0.835055314390411,-0.16814274788616518,0.28831555240026907,-1.812216028287741,-0.2910724881500066,-0.24148216009104212,1.9572726488113403 +385102,1,0.33645689517439314,0.9739954511147976,1.0652162670597927,,,,,,,,,,-1.1887333502953,0.7456311526478686,0.19112267045651915,2.08242130279541 +385102,2,1.1013221364437225,-0.33981307655348536,0.5480980944875663,,,,,,,,,,,,,2.08242130279541 +385301,0,2.336995989517378,1.875783687888658,1.6339662676094229,1.9806089704959091,0.8984862936387031,1.026323861956036,-0.33644244668732126,0.8188234555452687,1.9119435953888306,-0.835055314390411,-0.5613165400266386,1.1284125825510003,1.267782866548965,-0.2910724881500066,0.20460009219036931,1.852005958557129 +385301,1,1.77826820833772,1.6866967317271246,2.1885921485367494,,,,,,,,,,1.663413533782179,-0.3229291202479022,2.197821317045828,2.0444176197052 +385301,2,1.7900692519565728,2.2292603446336186,3.068168968065465,,,,,,,,,,,,,2.0444176197052 +387702,0,2.336995989517378,2.4510743174754603,2.4981583465685557,0.6533003264850905,1.149922669419116,1.3107830437664505,1.3969449327761334,0.5777681529947757,1.0889020930782853,1.5559295959968287,1.4045524206757267,1.1284125825510003,-1.812216028287741,0.806708965813594,0.8737234706124865,2.523668050765991 +387702,1,1.2015436830723893,0.9739954511147976,0.963091186925524,,,,,,,,,,-1.9017700713146695,0.7456311526478686,-0.5613893220144716,0.5763617157936096 +387702,2,1.3964994716635155,0.7500968597077102,0.638100625686777,,,,,,,,,,,,,0.5763617157936096 +388901,0,1.6593001598381854,0.03485367321088963,0.3994061548106614,0.6533003264850905,1.401359045199529,1.026323861956036,0.210943041564296,0.3367128504442826,0.7596854921540671,0.36043714080320877,-0.16814274788616518,0.7083640674756347,1.267782866548965,-0.2910724881500066,-0.24148216009104212,1.743966817855835 +388901,1,1.8743889625486083,1.1521707712678793,0.7588410266569864,,,,,,,,,,0.2373400917434395,0.7456311526478686,0.4419600012801827,1.7368788719177246 +388901,2,0.8061448012239295,1.0614996986394805,0.45809556328835566,,,,,,,,,,,,,1.7368788719177246 +389904,0,0.7557057202659283,0.2649699250456107,0.5228621660905376,0.5058215882616662,0.6470499178582901,1.026323861956036,1.2144831033589276,0.8188234555452687,-0.06335601015647824,-0.23730908679360116,1.4045524206757267,0.28831555240026907,1.267782866548965,0.806708965813594,0.20460009219036931,2.757091760635376 +389904,1,1.4899059457050545,1.2412584313444202,1.4737165875968679,,,,,,,,,,1.663413533782179,0.7456311526478686,2.197821317045828,2.814704179763794 +389904,2,1.3964994716635155,0.43869402077594005,0.5480980944875663,,,,,,,,,,,,,2.814704179763794 +391301,0,0.6427564153193962,0.8402605546324132,1.8808782901691752,1.2432152793787876,0.8984862936387031,1.026323861956036,0.210943041564296,0.3969766760819059,2.07655189585094,-0.835055314390411,-0.16814274788616518,-0.5517814777504622,-0.27221658086938805,1.9044904197771946,-0.24148216009104212,2.4296512603759766 +391301,1,1.8743889625486083,0.3503818305790114,1.1673413471940615,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.8122266528381351,2.647099018096924 +391301,2,1.298107026590251,-0.18411165708760024,0.45809556328835566,,,,,,,,,,,,,2.647099018096924 +391801,0,2.336995989517378,1.5306093101365763,2.2512463240088034,2.1280877087193333,1.401359045199529,1.3107830437664505,0.8495594445245161,0.6982958042700221,2.07655189585094,0.9581833684000187,-0.9544903321671111,0.7083640674756347,1.267782866548965,1.9044904197771946,0.20460009219036931,2.5554604530334473 +391801,1,2.835596504657493,0.5285571507320932,1.1673413471940615,,,,,,,,,,1.663413533782179,0.7456311526478686,-0.5613893220144716,2.2843964099884033 +391801,2,3.167563482982273,1.5286039570371357,2.0781411248741475,,,,,,,,,,,,,2.2843964099884033 +392201,0,2.224046684570846,3.0263649470622633,2.3747023352886796,1.2432152793787876,1.401359045199529,1.026323861956036,0.210943041564296,-0.08513392901908017,1.0889020930782853,1.5559295959968287,1.0113786285352542,1.1284125825510003,1.267782866548965,0.806708965813594,1.7658879751753094,1.8687939643859863 +392201,1,1.2015436830723893,2.22122269218637,1.882216908133943,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.059714660367144415,1.8571891784667969 +392201,2,0.5109674660041365,0.9057982791735953,0.7281031568859877,,,,,,,,,,,,,1.8571891784667969 +392301,0,1.4334015499451211,0.9553186805497738,0.3994061548106614,0.8007790647085149,0.39561354207787724,-0.1115128652856221,0.4846357856901046,-0.20566158029432668,0.9242937926161762,-0.835055314390411,-1.3476641243075844,-0.13173296267509654,1.267782866548965,-0.2910724881500066,1.7658879751753094,2.6046924591064453 +392301,1,-0.14414687588004912,0.17220651042592966,0.24821562598564237,,,,,,,,,,0.2373400917434395,0.7456311526478686,1.6961466553985005,2.379566192626953 +392301,2,1.298107026590251,1.2172011181053655,0.8181056880851983,,,,,,,,,,,,,2.379566192626953 +392302,0,1.7722494647847176,1.3004930583018552,-0.09441789030884316,0.8007790647085149,0.39561354207787724,-0.1115128652856221,0.4846357856901046,-0.20566158029432668,0.9242937926161762,-0.835055314390411,-1.3476641243075844,-0.13173296267509654,0.49778314283978853,0.806708965813594,1.7658879751753094,2.379566192626953 +392302,1,1.970509716759497,0.7958201309617158,0.45246578625417994,,,,,,,,,,-1.1887333502953,-1.3914893931436731,2.197821317045828,2.6233017444610596 +392302,2,1.7900692519565728,1.9178575057018483,2.7081588432686226,,,,,,,,,,,,,2.6233017444610596 +394402,0,-0.8255845489855216,-0.5404369563759129,-0.5882419354283478,-1.1164445321960008,-0.9872865247143939,-1.5338087743376947,-1.8873679967335701,-0.5672445341200663,-0.8863975124670236,-0.835055314390411,-0.16814274788616518,0.28831555240026907,-1.0422163045785646,-0.2910724881500066,-0.24148216009104212,0.03350917249917984 +394402,1,-1.2975959264107106,-0.2732317899567748,0.35034070611991114,,,,,,,,,,1.663413533782179,-0.3229291202479022,-0.5613893220144716,-0.6931471824645996 +394402,2,-0.7681343199482997,-0.4955144960193704,-0.08191962390690835,,,,,,,,,,,,,-0.6931471824645996 +395301,0,0.8686550252124604,-0.42537883045855246,-0.09441789030884316,0.358342850038242,-1.4901592762752198,0.17294631652479245,0.4846357856901046,0.3969766760819059,1.0889020930782853,-0.23730908679360116,-0.16814274788616518,-0.9718299928258278,-1.0422163045785646,0.806708965813594,-0.6875644123724536,2.4882946014404297 +395301,1,0.6248191578070585,-0.7186700903394792,-1.2836605760283897,,,,,,,,,,-1.1887333502953,2.88275169843941,-0.8122266528381351,2.3939902782440186 +395301,2,-0.07938720443544948,-0.41766378628642786,0.008082907292302316,,,,,,,,,,,,,2.3939902782440186 +395303,0,-0.7126352440389895,-0.3103207045411919,-0.4647859241484716,0.358342850038242,-1.4901592762752198,0.17294631652479245,0.4846357856901046,0.3969766760819059,1.0889020930782853,-0.23730908679360116,-0.16814274788616518,-0.9718299928258278,-0.27221658086938805,0.806708965813594,-1.133646664653865,2.6311542987823486 +395303,1,0.048094632541727786,3.7357129134875646,0.6567159465227176,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.310551991190808,1.9712965488433838 +395303,2,-0.4729569847285068,0.9057982791735953,0.09808543849151298,,,,,,,,,,,,,1.9712965488433838 +395304,0,-0.2608380242528609,-0.1952625786238314,-0.5882419354283478,0.358342850038242,-1.4901592762752198,0.17294631652479245,0.4846357856901046,0.3969766760819059,1.0889020930782853,-0.23730908679360116,-0.16814274788616518,-0.9718299928258278,-1.0422163045785646,0.806708965813594,-0.24148216009104212,1.9712965488433838 +395304,1,0.048094632541727786,-0.6295824302629383,0.35034070611991114,,,,,,,,,,-1.9017700713146695,0.7456311526478686,-0.8122266528381351,2.4788014888763428 +395304,2,-0.1777796495087138,-1.1183201738829107,0.008082907292302316,,,,,,,,,,,,,2.4788014888763428 +396401,0,-0.2608380242528609,-0.42537883045855246,-0.3413299128685955,1.2432152793787876,1.149922669419116,1.026323861956036,0.940790359233119,1.2406702350086316,1.2535103935403944,1.5559295959968287,1.7977262128162,1.1284125825510003,1.267782866548965,0.806708965813594,0.20460009219036931,2.3854928016662598 +396401,1,0.8170606662288354,0.7067324708851749,0.45246578625417994,,,,,,,,,,0.9503768127628092,0.7456311526478686,1.1944719937511734,2.533055305480957 +396401,2,0.9045372462971938,1.2172011181053655,0.09808543849151298,,,,,,,,,,,,,2.533055305480957 +396402,0,1.5463508548916531,-0.3103207045411919,-0.2178739015887193,1.2432152793787876,1.149922669419116,1.026323861956036,0.940790359233119,1.2406702350086316,1.2535103935403944,1.5559295959968287,1.7977262128162,1.1284125825510003,0.49778314283978853,0.806708965813594,0.8737234706124865,2.533055305480957 +396402,1,0.9131814204397238,-0.7186700903394792,-0.36453485481997044,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.059714660367144415,2.5320653915405273 +396402,2,0.41257502093087217,-0.729066625218198,-0.35192721750454037,,,,,,,,,,,,,2.5320653915405273 +397201,0,2.1110973796243138,1.7607255619712974,0.7697741886502898,0.9482578029319392,1.0242044815289095,1.3107830437664505,1.3057140180675306,0.9393511068205153,0.595077191691958,-0.835055314390411,1.0113786285352542,0.7083640674756347,0.49778314283978853,0.806708965813594,0.8737234706124865,1.5515949726104736 +397201,1,1.77826820833772,0.7958201309617158,0.24821562598564237,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.059714660367144415,1.5729546546936035 +397201,2,0.8061448012239295,0.5943954402418251,1.0881132816828303,,,,,,,,,,,,,1.5729546546936035 +399502,0,0.8686550252124604,2.3360161915581,1.6339662676094229,-0.5265295793023037,-0.7358501489339809,-0.1115128652856221,0.11971212685569313,-0.14539775465670343,-0.7217892120049145,-0.23730908679360116,1.4045524206757267,-1.8119270229765592,-2.5822157519969178,0.806708965813594,-0.24148216009104212,1.8687939643859863 +399502,1,1.3937851914941661,0.8849077910382567,1.882216908133943,,,,,,,,,,-1.9017700713146695,-0.3229291202479022,-1.0630639836617988,2.2894840240478516 +399502,2,-0.07938720443544948,0.7500968597077102,0.368093032089145,,,,,,,,,,,,,2.2894840240478516 +400202,0,0.529807110372864,0.4950861768803317,2.2512463240088034,-1.2639232704194252,-0.35869558526336154,0.7418646801456215,1.2144831033589276,0.8188234555452687,0.430468891229849,0.9581833684000187,-0.5613165400266386,-0.13173296267509654,0.49778314283978853,-0.2910724881500066,0.8737234706124865,1.666351318359375 +400202,1,0.6248191578070585,1.330346091420961,1.6779667478654055,,,,,,,,,,-1.1887333502953,-1.3914893931436731,1.1944719937511734,0.7907203435897827 +400202,2,0.5109674660041365,0.8279475694406527,1.3581208752804623,,,,,,,,,,,,,0.7907203435897827 +401902,0,1.9981480746777818,2.105899939723379,1.1401422224899183,1.6856514940490606,1.149922669419116,1.026323861956036,1.2144831033589276,0.5175043273571525,1.9119435953888306,0.9581833684000187,0.22503104425430823,1.548461097626366,-0.27221658086938805,0.806708965813594,1.7658879751753094,2.8181228637695312 +401902,1,1.3937851914941661,2.4884856724159925,1.882216908133943,,,,,,,,,,0.2373400917434395,0.7456311526478686,1.1944719937511734,2.989089250564575 +401902,2,1.3964994716635155,1.6843053765030207,2.528153780870201,,,,,,,,,,,,,2.989089250564575 +402301,0,0.3039085004797998,1.4155511842192159,1.8808782901691752,1.6856514940490606,1.0242044815289095,1.026323861956036,1.4881758474847362,1.1804064093710083,1.7473352949267216,0.9581833684000187,0.6182048363947807,1.548461097626366,0.49778314283978853,0.806708965813594,0.20460009219036931,2.6204519271850586 +402301,1,0.6248191578070585,1.330346091420961,0.7588410266569864,,,,,,,,,,0.2373400917434395,-1.3914893931436731,0.4419600012801827,2.6113314628601074 +402301,2,1.7900692519565728,1.2172011181053655,0.2780905008899343,,,,,,,,,,,,,2.6113314628601074 +403801,0,-0.03493941435979663,-0.3103207045411919,0.15249413225090913,-0.5265295793023037,0.1441771662974643,0.17294631652479245,-1.5224443378991586,-0.8685636623081825,-0.7217892120049145,0.9581833684000187,-0.9544903321671111,-0.5517814777504622,0.49778314283978853,0.806708965813594,1.7658879751753094,2.034792423248291 +403801,1,-0.6247506469344914,-0.5404947701863974,0.24821562598564237,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.059714660367144415,1.5737087726593018 +403801,2,-0.07938720443544948,-0.10626094735465771,-0.441929748703751,,,,,,,,,,,,,1.5737087726593018 +405002,0,1.5463508548916531,0.14991179912825014,0.893230199930166,0.06338537359139342,0.8984862936387031,1.3107830437664505,0.4846357856901046,1.0598787580957618,-0.5571809115428055,-0.835055314390411,-0.16814274788616518,-0.13173296267509654,1.267782866548965,-0.2910724881500066,1.9889291013160153,2.26753830909729 +405002,1,0.6248191578070585,-0.18414412988023388,-0.46665993495423924,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.5613893220144716,2.1929972171783447 +405002,2,1.1013221364437225,0.20514189157711243,-0.17192215510611902,,,,,,,,,,,,,2.1929972171783447 +406503,0,0.3039085004797998,0.6101443027976923,0.15249413225090913,0.2108641118148177,0.2698953541876708,1.3107830437664505,-0.2452115319787184,-0.08513392901908017,0.2658605907677399,-2.030547769584031,-1.3476641243075844,-0.5517814777504622,1.267782866548965,-0.2910724881500066,0.20460009219036931,2.2362797260284424 +406503,1,0.2403361409635047,0.7067324708851749,1.371591507462599,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,2.197821317045828,2.506270170211792 +406503,2,-0.07938720443544948,0.20514189157711243,-0.08191962390690835,,,,,,,,,,,,,2.506270170211792 +407101,0,1.9981480746777818,0.14991179912825014,0.029038120971032973,-1.2639232704194252,-1.3644410883850133,-0.1115128652856221,-0.9750588496475414,-0.3261892315695732,-0.7217892120049145,-0.23730908679360116,1.0113786285352542,-0.5517814777504622,-1.0422163045785646,-1.388853942113607,-1.133646664653865,1.8768951892852783 +407101,1,0.52869840359617,0.3503818305790114,0.35034070611991114,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.8122266528381351,1.2309811115264893 +407101,2,-0.07938720443544948,-0.10626094735465771,0.008082907292302316,,,,,,,,,,,,,1.2309811115264893 +407702,0,-0.7126352440389895,-0.1952625786238314,-0.09441789030884316,0.2108641118148177,0.8984862936387031,0.17294631652479245,1.4881758474847362,0.5175043273571525,1.5827269944646125,-0.835055314390411,-0.16814274788616518,-0.13173296267509654,-1.0422163045785646,-0.2910724881500066,-0.24148216009104212,1.0660737752914429 +407702,1,-1.8743204516760412,-1.431371370951806,-1.6921608965654649,,,,,,,,,,-1.1887333502953,-0.3229291202479022,1.1944719937511734,0.8419532775878906 +407702,2,-0.7681343199482997,-1.1961708836158533,-1.0719474670982256,,,,,,,,,,,,,0.8419532775878906 +409501,0,2.44994529446391,0.2649699250456107,0.5228621660905376,0.2108641118148177,0.1441771662974643,1.026323861956036,1.2144831033589276,1.0598787580957618,1.9119435953888306,0.36043714080320877,-1.3476641243075844,0.7083640674756347,0.49778314283978853,0.806708965813594,-0.018441033950336395,-0.19010883569717407 +409501,1,0.2403361409635047,1.5976090716505837,0.7588410266569864,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.059714660367144415,2.9676480293273926 +409501,2,1.593284361810044,0.8279475694406527,0.9981107504836196,,,,,,,,,,,,,2.9676480293273926 +410801,0,-0.37378732919939306,-0.42537883045855246,-0.4647859241484716,0.8007790647085149,0.6470499178582901,0.457405498335207,0.11971212685569313,0.6380319786323989,0.595077191691958,1.5559295959968287,1.7977262128162,-0.13173296267509654,0.49778314283978853,0.806708965813594,-0.6875644123724536,1.7181367874145508 +410801,1,-0.33638838430182605,-0.80775775041602,-0.16028469455143282,,,,,,,,,,0.9503768127628092,-0.3229291202479022,3.7028453019878094,1.8166335821151733 +410801,2,0.41257502093087217,-0.18411165708760024,0.368093032089145,,,,,,,,,,,,,1.8166335821151733 +410902,0,0.07800989058673549,1.3004930583018552,0.6463181773704137,1.390694017602212,0.7727681057484966,0.7418646801456215,0.028481212147090252,0.15592137353141286,1.9119435953888306,-0.835055314390411,-0.5613165400266386,0.28831555240026907,1.267782866548965,-0.2910724881500066,-0.6875644123724536,1.6708627939224243 +410902,1,0.4325776493852816,0.8849077910382567,0.6567159465227176,,,,,,,,,,0.2373400917434395,0.7456311526478686,0.4419600012801827,1.6642892360687256 +410902,2,0.8061448012239295,0.36084331104299755,0.09808543849151298,,,,,,,,,,,,,1.6642892360687256 +411001,0,0.07800989058673549,-0.3103207045411919,0.5228621660905376,0.2108641118148177,-0.35869558526336154,0.17294631652479245,-0.42767336139592416,-0.08513392901908017,-1.0510058129291326,0.9581833684000187,0.22503104425430823,-1.8119270229765592,0.49778314283978853,0.806708965813594,0.8737234706124865,0.610198974609375 +411001,1,-0.24026763009093757,-0.18414412988023388,-0.8751602554913144,,,,,,,,,,0.9503768127628092,0.7456311526478686,1.1944719937511734,-0.3973500728607178 +411001,2,-0.37456453965524245,-0.41766378628642786,-0.441929748703751,,,,,,,,,,,,,-0.3973500728607178 +411002,0,-0.37378732919939306,-0.770553208210634,-0.8351539579881,0.2108641118148177,-0.35869558526336154,0.17294631652479245,-0.42767336139592416,-0.08513392901908017,-1.0510058129291326,0.9581833684000187,0.22503104425430823,-1.8119270229765592,0.49778314283978853,-1.388853942113607,-0.24148216009104212,0.5800528526306152 +411002,1,0.048094632541727786,-0.3623194500333156,-0.568785015088508,,,,,,,,,,0.9503768127628092,-1.3914893931436731,0.19112267045651915,1.820347547531128 +411002,2,-0.27617209458197817,-0.729066625218198,0.18808796969072364,,,,,,,,,,,,,1.820347547531128 +412301,0,-0.8255845489855216,-0.3103207045411919,-0.09441789030884316,-0.37905084107887943,-1.4901592762752198,-1.5338087743376947,-2.069829826150776,-1.3506742674091685,-0.7217892120049145,0.36043714080320877,-1.3476641243075844,-0.5517814777504622,0.49778314283978853,-0.2910724881500066,-1.133646664653865,0.7248023152351379 +412301,1,-1.0092336637780452,-0.6295824302629383,-0.8751602554913144,,,,,,,,,,1.663413533782179,0.7456311526478686,-0.059714660367144415,0.19906748831272125 +412301,2,-1.0633116551680928,-0.8847680446840831,-0.26192468630532967,,,,,,,,,,,,,0.19906748831272125 +412302,0,0.4168578054263319,-0.42537883045855246,-0.2178739015887193,-0.37905084107887943,-1.4901592762752198,-1.5338087743376947,-2.069829826150776,-1.3506742674091685,-0.7217892120049145,0.36043714080320877,-1.3476641243075844,-0.5517814777504622,-1.0422163045785646,0.806708965813594,-0.24148216009104212,1.012588620185852 +412302,1,0.048094632541727786,-1.0750207306456427,0.14609054585137357,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.5613893220144716,0.7100828886032104 +412302,2,0.31418257585760784,-0.6512159154852555,-0.981944935899015,,,,,,,,,,,,,0.7100828886032104 +413302,0,0.6427564153193962,0.03485367321088963,-0.4647859241484716,-0.674008317525728,-0.7358501489339809,-2.102727137958524,-1.7049061673163644,-1.1698827904962987,-0.3925726110806964,-0.835055314390411,-0.9544903321671111,-1.8119270229765592,-1.0422163045785646,-0.2910724881500066,0.20460009219036931,2.51191782951355 +413302,1,0.6248191578070585,0.17220651042592966,0.8609661067912552,,,,,,,,,,0.2373400917434395,-0.3229291202479022,1.1944719937511734,2.2837376594543457 +413302,2,1.3964994716635155,0.1272911818441699,-0.8019398735005937,,,,,,,,,,,,,2.2837376594543457 +413303,0,-0.03493941435979663,-0.3103207045411919,-3.0573621610258708,-0.674008317525728,-0.7358501489339809,-2.102727137958524,-1.7049061673163644,-1.1698827904962987,-0.3925726110806964,-0.835055314390411,-0.9544903321671111,-1.8119270229765592,-0.27221658086938805,0.806708965813594,-0.24148216009104212,2.365140438079834 +413303,1,-0.6247506469344914,-0.18414412988023388,-0.6709100952227768,,,,,,,,,,0.9503768127628092,0.7456311526478686,1.1944719937511734,2.2968735694885254 +413303,2,0.31418257585760784,-0.33981307655348536,-0.08191962390690835,,,,,,,,,,,,,2.2968735694885254 +413602,0,-0.37378732919939306,-1.000669460045355,-0.8351539579881,-0.8214870557491524,-2.118750215726252,-2.102727137958524,-0.2452115319787184,-1.3506742674091685,-1.2156141133912417,-1.432801541987221,-1.3476641243075844,-0.9718299928258278,0.49778314283978853,-0.2910724881500066,-1.3566877907945707,1.4455662965774536 +413602,1,-1.201475172199822,-1.0750207306456427,-1.2836605760283897,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,0.19112267045651915,1.309178113937378 +413602,2,0.11739768571107917,-0.8069173349511406,-0.5319322799029617,,,,,,,,,,,,,1.309178113937378 +414201,0,-0.14788871930632877,1.5306093101365763,0.15249413225090913,-0.8214870557491524,0.018458978407257843,0.17294631652479245,-0.9750588496475414,-0.748036011032936,-0.5571809115428055,-0.835055314390411,-0.9544903321671111,-0.13173296267509654,0.49778314283978853,-1.388853942113607,-1.133646664653865,-0.15278279781341553 +414201,1,0.4325776493852816,0.4394694906555523,1.5758416677311367,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.059714660367144415,1.0959265232086182 +414201,2,-0.4729569847285068,0.43869402077594005,0.09808543849151298,,,,,,,,,,,,,1.0959265232086182 +414803,0,-0.48673663414592516,-0.8856113341279945,-0.7116979467082238,-0.9689657939725767,0.2698953541876708,-0.3959720470960366,0.3934048709815018,0.7585596299076455,0.2658605907677399,-0.23730908679360116,-0.16814274788616518,0.28831555240026907,1.267782866548965,0.806708965813594,0.20460009219036931,2.0188655853271484 +414803,1,0.048094632541727786,0.5285571507320932,0.7588410266569864,,,,,,,,,,0.2373400917434395,0.7456311526478686,0.19112267045651915,1.9993517398834229 +414803,2,0.2157901307843435,1.3729025375712505,0.368093032089145,,,,,,,,,,,,,1.9993517398834229 +415403,0,-0.5996859390924573,0.7252024287150527,-0.09441789030884316,-0.23157210285545515,0.018458978407257843,1.026323861956036,0.028481212147090252,0.5777681529947757,-0.5571809115428055,-0.835055314390411,-0.16814274788616518,0.28831555240026907,1.267782866548965,-0.2910724881500066,1.9889291013160153,2.995732307434082 +415403,1,0.33645689517439314,0.4394694906555523,0.5545908663884488,,,,,,,,,,1.663413533782179,0.7456311526478686,-0.059714660367144415,2.995732307434082 +415403,2,0.6093599110774008,0.6722461499747677,0.638100625686777,,,,,,,,,,,,,2.995732307434082 +416301,0,-0.14788871930632877,-0.770553208210634,-0.7116979467082238,0.358342850038242,0.8984862936387031,1.3107830437664505,-0.42767336139592416,0.2161851991690361,0.595077191691958,-0.835055314390411,-0.5613165400266386,-0.9718299928258278,1.267782866548965,0.806708965813594,3.104134732019544,2.0854475498199463 +416301,1,0.33645689517439314,0.5285571507320932,1.0652162670597927,,,,,,,,,,1.663413533782179,-1.3914893931436731,0.4419600012801827,1.9101778268814087 +416301,2,1.1997145815169867,1.5286039570371357,0.7281031568859877,,,,,,,,,,,,,1.9101778268814087 +417003,0,0.529807110372864,0.8402605546324132,2.2512463240088034,1.5381727558256364,0.8984862936387031,-0.3959720470960366,0.5758667003987075,0.6982958042700221,1.0889020930782853,1.5559295959968287,1.4045524206757267,-0.13173296267509654,-1.0422163045785646,0.806708965813594,-0.4645232862317478,2.3039286136627197 +417003,1,0.048094632541727786,1.419433751497502,0.8609661067912552,,,,,,,,,,-0.47569662927593015,1.8141914255436393,1.1944719937511734,2.893328905105591 +417003,2,-0.5713494298017712,0.5165447305088826,-0.35192721750454037,,,,,,,,,,,,,2.893328905105591 +417803,0,0.6427564153193962,-0.5404369563759129,-0.3413299128685955,-1.2639232704194252,-1.9930320278360456,-1.5338087743376947,-1.7049061673163644,-2.2546316519735177,-0.8863975124670236,-2.030547769584031,-0.9544903321671111,0.7083640674756347,-0.27221658086938805,-1.388853942113607,-0.6875644123724536,-0.5100955963134766 +417803,1,-1.1053544179889336,-0.5404947701863974,-0.9772853356255832,,,,,,,,,,0.9503768127628092,-1.3914893931436731,-0.5613893220144716,-0.6931471824645996 +417803,2,-0.5713494298017712,-0.573365205752313,-0.8919424046998043,,,,,,,,,,,,,-0.6931471824645996 +418001,0,1.207502940052057,0.2649699250456107,0.15249413225090913,0.5058215882616662,0.5213317299680837,-0.9648904107168657,-0.42767336139592416,-0.38645305720719647,0.2658605907677399,-0.835055314390411,-0.9544903321671111,-0.5517814777504622,-2.5822157519969178,-1.388853942113607,-0.9106055385131593,1.3867257833480835 +418001,1,-0.14414687588004912,0.7067324708851749,1.1673413471940615,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-1.0630639836617988,1.5039221048355103 +418001,2,0.8061448012239295,0.6722461499747677,1.178115812882041,,,,,,,,,,,,,1.5039221048355103 +418002,0,-0.9385338539320537,-0.8856113341279945,-0.8351539579881,0.5058215882616662,0.5213317299680837,-0.9648904107168657,-0.42767336139592416,-0.38645305720719647,0.2658605907677399,-0.835055314390411,-0.9544903321671111,-0.5517814777504622,-1.812216028287741,-0.2910724881500066,-0.9106055385131593,1.5154399871826172 +418002,1,-0.4325091385127145,-0.00596880972715211,-0.8751602554913144,,,,,,,,,,-1.9017700713146695,-0.3229291202479022,-1.3139013144854623,1.568289875984192 +418002,2,-0.07938720443544948,0.36084331104299755,0.09808543849151298,,,,,,,,,,,,,1.568289875984192 +418003,0,-0.8255845489855216,-1.000669460045355,-0.8351539579881,0.5058215882616662,0.5213317299680837,-0.9648904107168657,-0.42767336139592416,-0.38645305720719647,0.2658605907677399,-0.835055314390411,-0.9544903321671111,-0.5517814777504622,-1.812216028287741,-0.2910724881500066,-0.24148216009104212,1.568289875984192 +418003,1,0.33645689517439314,-0.7186700903394792,-0.36453485481997044,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.8122266528381351,1.6957805156707764 +418003,2,0.019005240637814846,-0.9626187544170256,-0.8019398735005937,,,,,,,,,,,,,1.6957805156707764 +418202,0,-0.2608380242528609,-0.1952625786238314,-0.09441789030884316,-1.2639232704194252,-0.6101319610437744,-0.3959720470960366,-0.61013519081313,0.4572405017195292,-0.8863975124670236,-0.23730908679360116,0.6182048363947807,-0.13173296267509654,-1.0422163045785646,0.806708965813594,-0.4645232862317478,2.2121410369873047 +418202,1,0.2403361409635047,-0.4514071101098565,0.35034070611991114,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.5613893220144716,2.1635935306549072 +418202,2,0.11739768571107917,-0.2619623668205428,1.0881132816828303,,,,,,,,,,,,,2.1635935306549072 +418602,0,0.19095919553326762,-0.42537883045855246,0.5228621660905376,1.0957365411553635,0.018458978407257843,0.457405498335207,-0.9750588496475414,1.120142583733385,1.2535103935403944,0.36043714080320877,1.7977262128162,1.1284125825510003,0.49778314283978853,0.806708965813594,0.20460009219036931,2.300654172897339 +418602,1,0.7209399120179469,0.4394694906555523,0.35034070611991114,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.059714660367144415,2.5585708618164062 +418602,2,0.31418257585760784,1.295051827838308,0.7281031568859877,,,,,,,,,,,,,2.5585708618164062 +419201,0,1.5463508548916531,-0.42537883045855246,-0.3413299128685955,0.9482578029319392,0.5213317299680837,0.457405498335207,0.7583285298159133,1.4817255375591245,1.9119435953888306,0.36043714080320877,-0.16814274788616518,-0.5517814777504622,1.267782866548965,3.002271873740795,0.8737234706124865,2.995732307434082 +419201,1,0.7209399120179469,0.17220651042592966,0.04396546571710477,,,,,,,,,,1.663413533782179,1.8141914255436393,3.7028453019878094,2.995732307434082 +419201,2,0.2157901307843435,0.1272911818441699,0.18808796969072364,,,,,,,,,,,,,2.995732307434082 +419202,0,-0.8255845489855216,-0.42537883045855246,-0.09441789030884316,0.9482578029319392,0.5213317299680837,0.457405498335207,0.7583285298159133,1.4817255375591245,1.9119435953888306,0.36043714080320877,-0.16814274788616518,-0.5517814777504622,0.49778314283978853,-0.2910724881500066,2.211970227456721,2.995732307434082 +419202,1,-0.14414687588004912,-0.00596880972715211,0.5545908663884488,,,,,,,,,,0.2373400917434395,0.7456311526478686,3.7028453019878094,2.995732307434082 +419202,2,1.298107026590251,0.8279475694406527,1.5381259376788836,,,,,,,,,,,,,2.995732307434082 +420001,0,-0.8255845489855216,-0.1952625786238314,-0.3413299128685955,-0.674008317525728,-1.3644410883850133,-1.2493495925272802,-0.61013519081313,-0.4467168828448197,-0.7217892120049145,0.9581833684000187,1.0113786285352542,-0.9718299928258278,0.49778314283978853,-0.2910724881500066,1.319805722893898,0.9975906014442444 +420001,1,-1.0092336637780452,-0.9859330705691017,-0.05815961441716403,,,,,,,,,,1.663413533782179,0.7456311526478686,-1.3139013144854623,1.7189950942993164 +420001,2,-0.5713494298017712,-0.9626187544170256,-1.3419550606958577,,,,,,,,,,,,,1.7189950942993164 +421205,0,-1.164432463825118,1.5306093101365763,2.1277903127289273,-0.08409336463203088,-0.7358501489339809,-0.3959720470960366,0.3934048709815018,-0.3261892315695732,-0.5571809115428055,-0.23730908679360116,1.7977262128162,-0.5517814777504622,0.49778314283978853,-1.388853942113607,0.20460009219036931,1.3567883968353271 +421205,1,0.6248191578070585,2.3103103522629107,1.0652162670597927,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.059714660367144415,1.2650938034057617 +421205,2,0.8061448012239295,0.9057982791735953,0.638100625686777,,,,,,,,,,,,,1.2650938034057617 +421901,0,1.6593001598381854,0.8402605546324132,1.5105102563295467,-0.9689657939725767,0.018458978407257843,-0.1115128652856221,0.210943041564296,0.2764490248066594,0.10125229030563083,-0.835055314390411,0.22503104425430823,0.7083640674756347,-1.0422163045785646,0.806708965813594,0.8737234706124865,0.9504891037940979 +421901,1,0.2403361409635047,1.2412584313444202,1.1673413471940615,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.059714660367144415,1.4498093128204346 +421901,2,-0.07938720443544948,0.43869402077594005,0.638100625686777,,,,,,,,,,,,,1.4498093128204346 +422002,0,0.6427564153193962,-0.08020445270647089,0.029038120971032973,0.2108641118148177,0.6470499178582901,0.17294631652479245,-0.06274970256151263,-0.748036011032936,-0.5571809115428055,0.9581833684000187,1.0113786285352542,-0.9718299928258278,0.49778314283978853,1.9044904197771946,-0.4645232862317478,2.1227493286132812 +422002,1,0.4325776493852816,0.08311885034938876,0.24821562598564237,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.059714660367144415,-0.5868620276451111 +422002,2,0.2157901307843435,-0.10626094735465771,-0.35192721750454037,,,,,,,,,,,,,-0.5868620276451111 +422003,0,0.3039085004797998,-0.8856113341279945,-0.5882419354283478,0.2108641118148177,0.6470499178582901,0.17294631652479245,-0.06274970256151263,-0.748036011032936,-0.5571809115428055,0.9581833684000187,1.0113786285352542,-0.9718299928258278,0.49778314283978853,1.9044904197771946,-0.24148216009104212,-0.5868620276451111 +422003,1,0.2403361409635047,-0.5404947701863974,0.7588410266569864,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,0.6927973321038463,1.1758886575698853 +422003,2,0.41257502093087217,0.1272911818441699,0.638100625686777,,,,,,,,,,,,,1.1758886575698853 +422301,0,-0.9385338539320537,-0.6554950822932735,-0.5882419354283478,-0.9689657939725767,0.5213317299680837,0.17294631652479245,-0.9750588496475414,-0.5069807084824429,0.10125229030563083,-0.835055314390411,-0.16814274788616518,0.7083640674756347,-0.27221658086938805,-0.2910724881500066,-0.24148216009104212,2.995732307434082 +422301,1,-1.1053544179889336,-0.00596880972715211,0.8609661067912552,,,,,,,,,,0.9503768127628092,0.7456311526478686,0.19112267045651915,2.995732307434082 +422301,2,0.41257502093087217,0.9836489889065378,1.3581208752804623,,,,,,,,,,,,,2.995732307434082 +422401,0,0.4168578054263319,-0.08020445270647089,-0.8351539579881,0.8007790647085149,1.401359045199529,0.7418646801456215,1.2144831033589276,0.15592137353141286,1.0889020930782853,0.36043714080320877,0.22503104425430823,0.7083640674756347,0.49778314283978853,0.806708965813594,0.20460009219036931,2.995732307434082 +422401,1,0.4325776493852816,0.7958201309617158,0.6567159465227176,,,,,,,,,,0.9503768127628092,0.7456311526478686,1.1944719937511734,2.995732307434082 +422401,2,0.9045372462971938,1.5286039570371357,1.988138593674937,,,,,,,,,,,,,2.995732307434082 +422701,0,-0.14788871930632877,-0.3103207045411919,-0.09441789030884316,1.0957365411553635,1.0242044815289095,1.3107830437664505,0.7583285298159133,0.4572405017195292,1.0889020930782853,-0.23730908679360116,-0.5613165400266386,1.1284125825510003,1.267782866548965,0.806708965813594,1.7658879751753094,2.5399203300476074 +422701,1,0.4325776493852816,0.4394694906555523,-0.26240977468570165,,,,,,,,,,0.9503768127628092,-0.3229291202479022,0.4419600012801827,2.7019448280334473 +422701,2,-0.37456453965524245,0.282992601310055,-0.08191962390690835,,,,,,,,,,,,,2.7019448280334473 +423102,0,-0.5996859390924573,-0.6554950822932735,-0.4647859241484716,0.06338537359139342,0.2698953541876708,1.026323861956036,-0.9750588496475414,-0.6877721853953127,-1.0510058129291326,-1.432801541987221,-1.740837916448057,-0.9718299928258278,0.49778314283978853,-0.2910724881500066,3.104134732019544,0.5852506756782532 +423102,1,0.2403361409635047,-1.609546691104888,-0.16028469455143282,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.310551991190808,0.3044434189796448 +423102,2,0.41257502093087217,-0.8847680446840831,0.18808796969072364,,,,,,,,,,,,,0.3044434189796448 +423204,0,0.6427564153193962,-0.1952625786238314,0.2759501435307853,0.358342850038242,1.401359045199529,0.7418646801456215,0.028481212147090252,0.3367128504442826,-0.22796431061858732,1.5559295959968287,1.0113786285352542,1.1284125825510003,0.49778314283978853,-1.388853942113607,0.8737234706124865,1.1011650562286377 +423204,1,-0.33638838430182605,0.8849077910382567,0.6567159465227176,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-0.310551991190808,1.7029812335968018 +423204,2,-0.37456453965524245,0.5165447305088826,0.09808543849151298,,,,,,,,,,,,,1.7029812335968018 +423602,0,0.9816043301589925,1.3004930583018552,1.8808782901691752,1.5381727558256364,1.149922669419116,1.026323861956036,1.4881758474847362,0.5175043273571525,1.4181186940025035,0.9581833684000187,1.4045524206757267,-0.5517814777504622,-1.0422163045785646,-0.2910724881500066,-0.6875644123724536,2.0581302642822266 +423602,1,1.1054229288615007,0.8849077910382567,0.8609661067912552,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.8122266528381351,2.1919236183166504 +423602,2,-0.07938720443544948,1.7621560862359633,0.2780905008899343,,,,,,,,,,,,,2.1919236183166504 +426204,0,0.19095919553326762,-0.42537883045855246,-0.7116979467082238,0.5058215882616662,0.2698953541876708,0.457405498335207,0.11971212685569313,-1.7725210468725314,-0.7217892120049145,0.9581833684000187,1.0113786285352542,-0.5517814777504622,0.49778314283978853,0.806708965813594,-0.018441033950336395,1.4177618026733398 +426204,1,0.14421538675261625,-0.7186700903394792,-0.7730351753570456,,,,,,,,,,1.663413533782179,-0.3229291202479022,0.19112267045651915,1.258180022239685 +426204,2,-0.6697418748750354,-0.8847680446840831,-1.0719474670982256,,,,,,,,,,,,,1.258180022239685 +427002,0,-1.3903310737181822,-0.5404369563759129,-0.8351539579881,-0.674008317525728,-0.9872865247143939,0.17294631652479245,-2.069829826150776,-0.4467168828448197,-0.22796431061858732,1.5559295959968287,1.7977262128162,1.548461097626366,0.49778314283978853,-1.388853942113607,3.104134732019544,1.8667798042297363 +427002,1,-1.9704412058869298,-0.7186700903394792,-0.36453485481997044,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,1.1944719937511734,1.6456503868103027 +427002,2,-1.161704100241357,-0.8847680446840831,0.09808543849151298,,,,,,,,,,,,,1.6456503868103027 +427003,0,-1.27738176877165,-0.770553208210634,-0.8351539579881,-0.674008317525728,-0.9872865247143939,0.17294631652479245,-2.069829826150776,-0.4467168828448197,-0.22796431061858732,1.5559295959968287,1.7977262128162,1.548461097626366,-0.27221658086938805,-0.2910724881500066,3.104134732019544,0.2308487594127655 +427003,1,-0.9131129095671567,-0.4514071101098565,-0.9772853356255832,,,,,,,,,,0.9503768127628092,0.7456311526478686,1.1944719937511734,0.40980395674705505 +427003,2,-0.1777796495087138,-0.6512159154852555,-0.441929748703751,,,,,,,,,,,,,0.40980395674705505 +428202,0,-0.03493941435979663,-0.1952625786238314,-0.4647859241484716,-0.5265295793023037,0.1441771662974643,0.17294631652479245,1.3969449327761334,0.035393722256166354,0.10125229030563083,0.9581833684000187,0.6182048363947807,-0.5517814777504622,-1.0422163045785646,-0.2910724881500066,-0.4645232862317478,2.1316261291503906 +428202,1,-0.9131129095671567,-0.18414412988023388,-0.568785015088508,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-0.5613893220144716,2.1857995986938477 +428202,2,-0.37456453965524245,0.20514189157711243,0.18808796969072364,,,,,,,,,,,,,2.1857995986938477 +429001,0,0.529807110372864,0.4950861768803317,1.1401422224899183,1.2432152793787876,1.2756408573093225,1.026323861956036,0.6670976151073104,1.2406702350086316,2.07655189585094,0.36043714080320877,-0.16814274788616518,0.28831555240026907,0.49778314283978853,-0.2910724881500066,0.8737234706124865,2.0590553283691406 +429001,1,1.0093021746506123,0.3503818305790114,0.24821562598564237,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,3.7028453019878094,2.2547924518585205 +429001,2,1.298107026590251,0.282992601310055,-0.26192468630532967,,,,,,,,,,,,,2.2547924518585205 +429201,0,0.7557057202659283,1.875783687888658,2.1277903127289273,0.8007790647085149,0.2698953541876708,1.3107830437664505,0.210943041564296,0.4572405017195292,1.0889020930782853,1.5559295959968287,1.7977262128162,1.9685096127017316,0.49778314283978853,-0.2910724881500066,-0.6875644123724536,2.2915284633636475 +429201,1,0.33645689517439314,1.419433751497502,1.5758416677311367,,,,,,,,,,0.2373400917434395,-1.3914893931436731,-0.5613893220144716,2.25608229637146 +429201,2,2.3804239223961585,1.8400067959689057,1.5381259376788836,,,,,,,,,,,,,2.25608229637146 +431901,0,-1.0514831588785858,-0.770553208210634,-0.4647859241484716,-0.08409336463203088,0.5213317299680837,0.457405498335207,0.5758667003987075,0.6982958042700221,0.2658605907677399,-0.23730908679360116,0.22503104425430823,-0.13173296267509654,1.267782866548965,0.806708965813594,-0.24148216009104212,1.986107587814331 +431901,1,-1.585958189043376,-1.6986343511814288,-1.9985361369682713,,,,,,,,,,1.663413533782179,-1.3914893931436731,0.4419600012801827,1.8892632722854614 +431901,2,-3.523122781999701,-1.8968272712123362,-2.151977841488754,,,,,,,,,,,,,1.8892632722854614 +432001,0,-0.2608380242528609,-0.3103207045411919,0.029038120971032973,0.2108641118148177,0.018458978407257843,0.7418646801456215,0.6670976151073104,0.3969766760819059,-0.3925726110806964,0.9581833684000187,-0.16814274788616518,1.1284125825510003,1.267782866548965,0.806708965813594,0.20460009219036931,2.237460136413574 +432001,1,0.9131814204397238,0.2612941705024705,0.45246578625417994,,,,,,,,,,1.663413533782179,-0.3229291202479022,0.4419600012801827,2.0188655853271484 +432001,2,-0.1777796495087138,0.20514189157711243,-1.521960123094279,,,,,,,,,,,,,2.0188655853271484 +432303,0,-1.5032803786647144,-1.000669460045355,-0.8351539579881,-0.08409336463203088,0.5213317299680837,0.457405498335207,-0.33644244668732126,0.09565754789378961,-0.7217892120049145,0.9581833684000187,0.22503104425430823,-1.8119270229765592,0.49778314283978853,-0.2910724881500066,3.104134732019544,1.3856761455535889 +432303,1,-1.2975959264107106,-0.5404947701863974,-0.9772853356255832,,,,,,,,,,0.2373400917434395,0.7456311526478686,0.6927973321038463,1.3697717189788818 +432303,2,-0.9649192100948284,-0.6512159154852555,0.5480980944875663,,,,,,,,,,,,,1.3697717189788818 +432304,0,1.8851987697312496,-0.42537883045855246,-0.7116979467082238,-0.08409336463203088,0.5213317299680837,0.457405498335207,-0.33644244668732126,0.09565754789378961,-0.7217892120049145,0.9581833684000187,0.22503104425430823,-1.8119270229765592,-0.27221658086938805,0.806708965813594,-0.018441033950336395,1.3697717189788818 +432304,1,0.2403361409635047,-0.2732317899567748,-0.46665993495423924,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.310551991190808,1.4837558269500732 +432304,2,1.0029296913704582,0.1272911818441699,-0.441929748703751,,,,,,,,,,,,,1.4837558269500732 +433701,0,-0.7126352440389895,0.7252024287150527,0.3994061548106614,0.5058215882616662,1.0242044815289095,0.7418646801456215,-0.7925970202303356,0.2161851991690361,0.595077191691958,-0.835055314390411,-0.5613165400266386,-0.13173296267509654,0.49778314283978853,-0.2910724881500066,-0.6875644123724536,1.492652416229248 +433701,1,1.0093021746506123,0.2612941705024705,0.7588410266569864,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.310551991190808,2.0390443801879883 +433701,2,-0.07938720443544948,1.1393504083724229,0.368093032089145,,,,,,,,,,,,,2.0390443801879883 +433901,0,1.207502940052057,0.3800280509629712,1.6339662676094229,0.6533003264850905,0.5213317299680837,0.17294631652479245,1.2144831033589276,0.9996149324581385,0.7596854921540671,0.9581833684000187,0.22503104425430823,-0.13173296267509654,-0.27221658086938805,0.806708965813594,-0.6875644123724536,1.858985424041748 +433901,1,2.4511134878139393,0.5285571507320932,0.5545908663884488,,,,,,,,,,0.2373400917434395,-0.3229291202479022,0.4419600012801827,2.1054115295410156 +433901,2,1.4948919167367798,0.7500968597077102,2.258146187272569,,,,,,,,,,,,,2.1054115295410156 +434101,0,-0.03493941435979663,2.105899939723379,1.8808782901691752,-0.23157210285545515,-0.9872865247143939,-1.5338087743376947,-0.7013661055217327,-1.0493551392210523,-0.7217892120049145,-0.23730908679360116,0.22503104425430823,-0.9718299928258278,1.267782866548965,-1.388853942113607,-1.133646664653865,1.1090941429138184 +434101,1,0.048094632541727786,0.08311885034938876,-0.16028469455143282,,,,,,,,,,0.9503768127628092,-1.3914893931436731,0.4419600012801827,1.021496057510376 +434101,2,0.11739768571107917,0.04944047211122737,0.368093032089145,,,,,,,,,,,,,1.021496057510376 +435201,0,-0.9385338539320537,-0.42537883045855246,-0.4647859241484716,1.2432152793787876,1.2756408573093225,0.7418646801456215,-0.2452115319787184,0.09565754789378961,1.5827269944646125,0.36043714080320877,1.0113786285352542,-0.13173296267509654,1.267782866548965,-0.2910724881500066,1.7658879751753094,2.995732307434082 +435201,1,0.2403361409635047,0.3503818305790114,0.45246578625417994,,,,,,,,,,0.9503768127628092,0.7456311526478686,0.4419600012801827,1.7214014530181885 +435201,2,0.7077523561506651,2.151409634900676,0.18808796969072364,,,,,,,,,,,,,1.7214014530181885 +435202,0,0.529807110372864,1.4155511842192159,1.3870542450496706,1.2432152793787876,1.2756408573093225,0.7418646801456215,-0.2452115319787184,0.09565754789378961,1.5827269944646125,0.36043714080320877,1.0113786285352542,-0.13173296267509654,0.49778314283978853,-0.2910724881500066,0.20460009219036931,1.7214014530181885 +435202,1,0.9131814204397238,0.9739954511147976,0.6567159465227176,,,,,,,,,,0.9503768127628092,-1.3914893931436731,0.4419600012801827,2.995732307434082 +435202,2,1.8884616970298371,1.3729025375712505,0.45809556328835566,,,,,,,,,,,,,2.995732307434082 +437101,0,0.4168578054263319,1.3004930583018552,0.6463181773704137,-0.37905084107887943,1.0242044815289095,0.457405498335207,-0.33644244668732126,0.5777681529947757,0.430468891229849,-0.23730908679360116,1.4045524206757267,-1.8119270229765592,1.267782866548965,0.806708965813594,-0.24148216009104212,2.049330949783325 +437101,1,-0.33638838430182605,1.8648720518802064,0.04396546571710477,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,0.4419600012801827,2.1682355403900146 +437101,2,-0.37456453965524245,1.7621560862359633,0.7281031568859877,,,,,,,,,,,,,2.1682355403900146 +437201,0,-0.7126352440389895,-1.000669460045355,-0.8351539579881,2.1280877087193333,1.149922669419116,1.026323861956036,1.4881758474847362,0.9393511068205153,2.07655189585094,0.36043714080320877,1.7977262128162,1.548461097626366,0.49778314283978853,0.806708965813594,0.8737234706124865,2.8372581005096436 +437201,1,0.4325776493852816,-0.00596880972715211,1.1673413471940615,,,,,,,,,,-0.47569662927593015,1.8141914255436393,2.197821317045828,2.860273838043213 +437201,2,1.1013221364437225,0.8279475694406527,0.908108219284409,,,,,,,,,,,,,2.860273838043213 +437801,0,2.224046684570846,1.7607255619712974,2.9919823916880603,-0.08409336463203088,-0.7358501489339809,0.17294631652479245,-0.1539806172701155,-0.5672445341200663,0.430468891229849,0.9581833684000187,1.4045524206757267,-0.5517814777504622,0.49778314283978853,-0.2910724881500066,-0.24148216009104212,2.2077064514160156 +437801,1,0.6248191578070585,2.0430473720332882,1.882216908133943,,,,,,,,,,-1.1887333502953,0.7456311526478686,-0.5613893220144716,2.487833023071289 +437801,2,1.298107026590251,1.6843053765030207,1.3581208752804623,,,,,,,,,,,,,2.487833023071289 +438302,0,-0.2608380242528609,-0.3103207045411919,-0.8351539579881,-0.9689657939725767,1.0242044815289095,-0.6804312289064511,-0.33644244668732126,0.3367128504442826,-0.8863975124670236,1.5559295959968287,1.7977262128162,1.1284125825510003,0.49778314283978853,-0.2910724881500066,3.104134732019544,0.040273863822221756 +438302,1,-1.4898374348324874,-0.896845410492561,-0.9772853356255832,,,,,,,,,,0.2373400917434395,0.7456311526478686,1.1944719937511734,0.1483222395181656 +438302,2,-0.7681343199482997,-1.5075737225476233,-1.3419550606958577,,,,,,,,,,,,,0.1483222395181656 +439602,0,-0.48673663414592516,-1.000669460045355,-0.8351539579881,-0.674008317525728,-0.10725920948294862,0.17294631652479245,-0.06274970256151263,-0.8685636623081825,-0.3925726110806964,0.36043714080320877,1.4045524206757267,1.9685096127017316,-1.0422163045785646,-0.2910724881500066,-0.24148216009104212,1.2922964096069336 +439602,1,-0.24026763009093757,-1.7877220112579697,-1.590035816431196,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.059714660367144415,1.2959420680999756 +439602,2,-0.07938720443544948,-1.2740215933487957,-0.441929748703751,,,,,,,,,,,,,1.2959420680999756 +442301,0,1.4334015499451211,1.3004930583018552,0.5228621660905376,0.9482578029319392,1.2756408573093225,1.3107830437664505,1.2144831033589276,-0.024870103381456905,1.2535103935403944,0.9581833684000187,1.0113786285352542,0.7083640674756347,-1.812216028287741,-0.2910724881500066,-0.6875644123724536,2.995732307434082 +442301,1,0.6248191578070585,1.5085214115740428,0.6567159465227176,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.5613893220144716,2.119755506515503 +442301,2,1.6916768068833083,1.1393504083724229,1.178115812882041,,,,,,,,,,,,,2.119755506515503 +442801,0,1.6593001598381854,0.14991179912825014,0.029038120971032973,1.9806089704959091,1.401359045199529,1.3107830437664505,1.3969449327761334,2.265155270848227,1.9119435953888306,1.5559295959968287,1.7977262128162,1.1284125825510003,1.267782866548965,0.806708965813594,0.8737234706124865,2.7716007232666016 +442801,1,1.2015436830723893,1.330346091420961,2.1885921485367494,,,,,,,,,,1.663413533782179,0.7456311526478686,0.4419600012801827,2.874908208847046 +442801,2,1.4948919167367798,1.5286039570371357,1.3581208752804623,,,,,,,,,,,,,2.874908208847046 +442803,0,1.6593001598381854,-0.08020445270647089,0.15249413225090913,1.9806089704959091,1.401359045199529,1.3107830437664505,1.3969449327761334,2.265155270848227,1.9119435953888306,1.5559295959968287,1.7977262128162,1.1284125825510003,1.267782866548965,1.9044904197771946,1.319805722893898,2.995732307434082 +442803,1,1.5860266999159431,1.2412584313444202,1.4737165875968679,,,,,,,,,,1.663413533782179,0.7456311526478686,2.4486586478694914,2.995732307434082 +442803,2,1.298107026590251,1.606454666770078,0.9981107504836196,,,,,,,,,,,,,2.995732307434082 +443701,0,0.7557057202659283,1.3004930583018552,1.5105102563295467,1.9806089704959091,1.401359045199529,1.026323861956036,1.4881758474847362,2.265155270848227,2.07655189585094,1.5559295959968287,1.7977262128162,1.9685096127017316,0.49778314283978853,0.806708965813594,0.8737234706124865,2.412580728530884 +443701,1,0.9131814204397238,1.2412584313444202,0.7588410266569864,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,0.4419600012801827,2.409031867980957 +443701,2,-0.27617209458197817,1.1393504083724229,0.368093032089145,,,,,,,,,,,,,2.409031867980957 +443702,0,1.4334015499451211,0.4950861768803317,0.029038120971032973,1.9806089704959091,1.401359045199529,1.026323861956036,1.4881758474847362,2.265155270848227,2.07655189585094,1.5559295959968287,1.7977262128162,1.9685096127017316,0.49778314283978853,-0.2910724881500066,-1.3566877907945707,2.5037591457366943 +443702,1,-0.04802612166916067,-1.1641083907221836,-0.16028469455143282,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.8122266528381351,0.38491925597190857 +443702,2,0.9045372462971938,0.7500968597077102,-0.441929748703751,,,,,,,,,,,,,0.38491925597190857 +445002,0,-0.5996859390924573,-0.6554950822932735,-0.8351539579881,-0.5265295793023037,1.0242044815289095,0.7418646801456215,-0.2452115319787184,-1.2904104417715454,-0.5571809115428055,0.9581833684000187,0.6182048363947807,0.28831555240026907,-1.0422163045785646,-0.2910724881500066,0.8737234706124865,1.2883927822113037 +445002,1,-1.393716680621599,-1.2531960507987243,-0.05815961441716403,,,,,,,,,,0.9503768127628092,-0.3229291202479022,1.1944719937511734,1.8396230936050415 +445002,2,-0.5713494298017712,-0.41766378628642786,-0.08191962390690835,,,,,,,,,,,,,1.8396230936050415 +446502,0,1.0945536351055247,0.03485367321088963,-0.5882419354283478,-0.08409336463203088,0.7727681057484966,0.17294631652479245,0.5758667003987075,0.8790872811828919,0.9242937926161762,-0.23730908679360116,-0.16814274788616518,1.1284125825510003,-0.27221658086938805,0.806708965813594,0.8737234706124865,2.4788014888763428 +446502,1,2.258871979392162,0.4394694906555523,0.5545908663884488,,,,,,,,,,-1.1887333502953,-0.3229291202479022,0.4419600012801827,2.7062835693359375 +446502,2,1.298107026590251,-0.2619623668205428,0.008082907292302316,,,,,,,,,,,,,2.7062835693359375 +447303,0,0.19095919553326762,-0.770553208210634,-0.7116979467082238,-1.2639232704194252,-1.3644410883850133,-1.8182679561481092,-2.2522916555679817,-1.1698827904962987,-0.8863975124670236,0.9581833684000187,0.6182048363947807,0.28831555240026907,-1.0422163045785646,-1.388853942113607,-0.6875644123724536,0.6340665817260742 +447303,1,0.14421538675261625,-1.2531960507987243,-0.8751602554913144,,,,,,,,,,-1.9017700713146695,-1.3914893931436731,-1.0630639836617988,0.6634617447853088 +447303,2,0.5109674660041365,-1.040469464149968,-1.521960123094279,,,,,,,,,,,,,0.6634617447853088 +447902,0,1.9981480746777818,0.3800280509629712,-0.09441789030884316,-0.23157210285545515,1.2756408573093225,1.026323861956036,0.7583285298159133,-0.3261892315695732,0.7596854921540671,0.9581833684000187,1.0113786285352542,0.28831555240026907,0.49778314283978853,0.806708965813594,-0.24148216009104212,1.326094627380371 +447902,1,0.33645689517439314,0.7067324708851749,2.392842308805287,,,,,,,,,,0.9503768127628092,1.8141914255436393,-0.059714660367144415,2.036982536315918 +447902,2,1.593284361810044,1.3729025375712505,1.8081335312765157,,,,,,,,,,,,,2.036982536315918 +448102,0,0.19095919553326762,1.3004930583018552,0.6463181773704137,0.5058215882616662,1.401359045199529,1.026323861956036,0.7583285298159133,-0.38645305720719647,0.2658605907677399,0.9581833684000187,-0.16814274788616518,0.7083640674756347,0.49778314283978853,0.806708965813594,-0.6875644123724536,1.8719691038131714 +448102,1,0.8170606662288354,0.7958201309617158,0.7588410266569864,,,,,,,,,,0.9503768127628092,0.7456311526478686,2.197821317045828,1.8826428651809692 +448102,2,-0.07938720443544948,1.6843053765030207,0.9981107504836196,,,,,,,,,,,,,1.8826428651809692 +448701,0,-1.27738176877165,0.14991179912825014,0.029038120971032973,0.358342850038242,0.8984862936387031,0.7418646801456215,0.3934048709815018,-0.4467168828448197,0.430468891229849,0.9581833684000187,1.0113786285352542,-0.13173296267509654,-1.812216028287741,-1.388853942113607,0.20460009219036931,2.196287155151367 +448701,1,0.2403361409635047,0.17220651042592966,0.14609054585137357,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-0.059714660367144415,2.0590553283691406 +448701,2,0.2157901307843435,0.6722461499747677,0.09808543849151298,,,,,,,,,,,,,2.0590553283691406 +449003,0,-1.164432463825118,-1.000669460045355,-0.8351539579881,-0.8214870557491524,0.018458978407257843,-0.3959720470960366,-0.06274970256151263,-0.3261892315695732,-1.0510058129291326,1.5559295959968287,1.4045524206757267,0.7083640674756347,0.49778314283978853,-0.2910724881500066,-0.4645232862317478,1.690948247909546 +449003,1,-1.8743204516760412,-1.609546691104888,-1.7942859766997337,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.310551991190808,2.995732307434082 +449003,2,-0.5713494298017712,-1.585424432280566,-0.8919424046998043,,,,,,,,,,,,,2.995732307434082 +449903,0,-0.9385338539320537,-1.000669460045355,-0.8351539579881,0.358342850038242,-0.2329773973731551,-0.1115128652856221,-0.7925970202303356,0.3969766760819059,-0.06335601015647824,1.5559295959968287,1.7977262128162,-0.13173296267509654,0.49778314283978853,0.806708965813594,1.9889291013160153,2.498084783554077 +449903,1,-0.9131129095671567,-1.3422837108752652,-1.1815354958941209,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.5613893220144716,1.90995192527771 +449903,2,-0.1777796495087138,-0.8069173349511406,-0.8019398735005937,,,,,,,,,,,,,1.90995192527771 +450601,0,0.9816043301589925,-0.08020445270647089,0.2759501435307853,-1.1164445321960008,-0.2329773973731551,-0.1115128652856221,-0.42767336139592416,-0.5672445341200663,-1.3802224138533508,1.5559295959968287,-0.5613165400266386,-1.3918785079011935,0.49778314283978853,0.806708965813594,0.8737234706124865,1.779181718826294 +450601,1,0.6248191578070585,-0.00596880972715211,0.35034070611991114,,,,,,,,,,0.9503768127628092,1.8141914255436393,1.1944719937511734,2.0482444763183594 +450601,2,0.019005240637814846,-0.18411165708760024,0.8181056880851983,,,,,,,,,,,,,2.0482444763183594 +452601,0,0.07800989058673549,1.3004930583018552,1.6339662676094229,1.2432152793787876,0.39561354207787724,0.7418646801456215,0.7583285298159133,0.6982958042700221,-0.06335601015647824,1.5559295959968287,1.7977262128162,-0.13173296267509654,1.267782866548965,-0.2910724881500066,-0.4645232862317478,1.9530322551727295 +452601,1,0.7209399120179469,1.5085214115740428,0.5545908663884488,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.059714660367144415,2.018073558807373 +452601,2,0.7077523561506651,0.7500968597077102,0.638100625686777,,,,,,,,,,,,,2.018073558807373 +452801,0,0.7557057202659283,0.6101443027976923,-0.09441789030884316,1.5381727558256364,1.149922669419116,0.7418646801456215,1.0320212739417218,1.7227808401096176,0.9242937926161762,1.5559295959968287,1.0113786285352542,1.548461097626366,0.49778314283978853,-1.388853942113607,0.8737234706124865,1.6019283533096313 +452801,1,1.1054229288615007,0.9739954511147976,1.1673413471940615,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-0.8122266528381351,1.769834041595459 +452801,2,0.5109674660041365,1.7621560862359633,1.8081335312765157,,,,,,,,,,,,,1.769834041595459 +453401,0,-0.8255845489855216,-1.000669460045355,-0.8351539579881,1.6856514940490606,1.149922669419116,0.7418646801456215,1.3969449327761334,2.1446276195729803,-0.06335601015647824,-0.835055314390411,0.6182048363947807,-0.5517814777504622,-1.812216028287741,0.806708965813594,0.20460009219036931,2.3427183628082275 +453401,1,-1.1053544179889336,0.4394694906555523,1.0652162670597927,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.8122266528381351,2.4031786918640137 +453401,2,-0.07938720443544948,0.8279475694406527,0.09808543849151298,,,,,,,,,,,,,2.4031786918640137 +453602,0,-0.48673663414592516,-0.6554950822932735,-0.7116979467082238,0.8007790647085149,1.0242044815289095,0.7418646801456215,1.0320212739417218,1.2406702350086316,0.10125229030563083,-0.23730908679360116,-0.5613165400266386,0.28831555240026907,0.49778314283978853,-1.388853942113607,0.20460009219036931,1.6575614213943481 +453602,1,-1.4898374348324874,-0.2732317899567748,1.371591507462599,,,,,,,,,,0.9503768127628092,-1.3914893931436731,-0.059714660367144415,1.9419935941696167 +453602,2,-0.27617209458197817,-0.4955144960193704,0.18808796969072364,,,,,,,,,,,,,1.9419935941696167 +453605,0,0.4168578054263319,0.14991179912825014,-0.7116979467082238,0.8007790647085149,1.0242044815289095,0.7418646801456215,1.0320212739417218,1.2406702350086316,0.10125229030563083,-0.23730908679360116,-0.5613165400266386,0.28831555240026907,0.49778314283978853,-1.388853942113607,-0.9106055385131593,0.992061972618103 +453605,1,0.9131814204397238,-1.2531960507987243,-1.3857856561626585,,,,,,,,,,-1.1887333502953,-1.3914893931436731,1.1944719937511734,1.1255948543548584 +453605,2,1.593284361810044,-0.9626187544170256,-1.0719474670982256,,,,,,,,,,,,,1.1255948543548584 +453901,0,0.19095919553326762,0.4950861768803317,0.5228621660905376,0.358342850038242,0.5213317299680837,0.7418646801456215,0.7583285298159133,0.09565754789378961,1.4181186940025035,0.36043714080320877,1.0113786285352542,1.9685096127017316,1.267782866548965,0.806708965813594,1.319805722893898,1.774619221687317 +453901,1,0.6248191578070585,0.7958201309617158,0.6567159465227176,,,,,,,,,,0.9503768127628092,0.7456311526478686,1.1944719937511734,1.4582960605621338 +453901,2,1.1013221364437225,0.5943954402418251,0.908108219284409,,,,,,,,,,,,,1.4582960605621338 +454101,0,-0.48673663414592516,0.8402605546324132,0.7697741886502898,-0.5265295793023037,-0.8615683368241874,-1.8182679561481092,-1.7049061673163644,-1.8930486981477779,-1.3802224138533508,-1.432801541987221,-2.13401170858853,-0.5517814777504622,0.49778314283978853,-0.2910724881500066,0.42764121833107505,-0.6931471824645996 +454101,1,0.2403361409635047,-0.00596880972715211,0.24821562598564237,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,-0.5613893220144716,1.1412327289581299 +454101,2,-0.6697418748750354,0.7500968597077102,0.2780905008899343,,,,,,,,,,,,,1.1412327289581299 +455102,0,-1.3903310737181822,-0.6554950822932735,-0.7116979467082238,0.06338537359139342,0.1441771662974643,0.17294631652479245,-0.33644244668732126,-0.024870103381456905,-1.0510058129291326,-0.23730908679360116,0.22503104425430823,-1.3918785079011935,0.49778314283978853,0.806708965813594,0.8737234706124865,2.092665672302246 +455102,1,-0.24026763009093757,-0.09505646980369299,-0.6709100952227768,,,,,,,,,,0.9503768127628092,0.7456311526478686,2.4486586478694914,2.1520228385925293 +455102,2,0.2157901307843435,0.1272911818441699,-0.08191962390690835,,,,,,,,,,,,,2.1520228385925293 +456101,0,0.07800989058673549,-0.08020445270647089,-0.4647859241484716,-0.23157210285545515,0.018458978407257843,1.026323861956036,-0.1539806172701155,-0.6275083597576895,0.430468891229849,0.36043714080320877,1.7977262128162,-1.3918785079011935,0.49778314283978853,-0.2910724881500066,-0.24148216009104212,0.46773192286491394 +456101,1,0.33645689517439314,0.9739954511147976,0.8609661067912552,,,,,,,,,,-1.9017700713146695,-0.3229291202479022,1.1944719937511734,0.20218756794929504 +456101,2,-0.4729569847285068,0.36084331104299755,-0.08191962390690835,,,,,,,,,,,,,0.20218756794929504 +456102,0,-0.37378732919939306,1.0703768064671344,0.2759501435307853,-0.23157210285545515,0.018458978407257843,1.026323861956036,-0.1539806172701155,-0.6275083597576895,0.430468891229849,0.36043714080320877,1.7977262128162,-1.3918785079011935,0.49778314283978853,-0.2910724881500066,0.20460009219036931,1.218948245048523 +456102,1,-0.4325091385127145,1.330346091420961,0.35034070611991114,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.5613893220144716,0.8632307052612305 +456102,2,-0.37456453965524245,0.43869402077594005,0.368093032089145,,,,,,,,,,,,,0.8632307052612305 +459001,0,0.07800989058673549,-1.000669460045355,-0.8351539579881,0.9482578029319392,1.149922669419116,1.026323861956036,1.4881758474847362,1.1804064093710083,1.4181186940025035,0.9581833684000187,-0.16814274788616518,0.28831555240026907,0.49778314283978853,-0.2910724881500066,0.8737234706124865,2.185788631439209 +459001,1,0.52869840359617,-0.80775775041602,-0.36453485481997044,,,,,,,,,,0.9503768127628092,-0.3229291202479022,0.6927973321038463,2.087158441543579 +459001,2,-0.37456453965524245,-1.2740215933487957,-0.35192721750454037,,,,,,,,,,,,,2.087158441543579 +459002,0,-0.7126352440389895,-1.000669460045355,-0.8351539579881,0.9482578029319392,1.149922669419116,1.026323861956036,1.4881758474847362,1.1804064093710083,1.4181186940025035,0.9581833684000187,-0.16814274788616518,0.28831555240026907,0.49778314283978853,-0.2910724881500066,0.20460009219036931,2.087158441543579 +459002,1,-2.1626827143087066,-1.6986343511814288,-1.9985361369682713,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.8122266528381351,2.0513575077056885 +459002,2,-1.0633116551680928,-2.208230110144106,-2.151977841488754,,,,,,,,,,,,,2.0513575077056885 +459201,0,0.529807110372864,-0.770553208210634,-0.7116979467082238,-0.5265295793023037,0.1441771662974643,0.17294631652479245,1.3969449327761334,0.3367128504442826,0.2658605907677399,1.5559295959968287,1.4045524206757267,1.548461097626366,1.267782866548965,1.9044904197771946,0.8737234706124865,1.9671103954315186 +459201,1,1.1054229288615007,-0.00596880972715211,0.45246578625417994,,,,,,,,,,0.9503768127628092,0.7456311526478686,0.9436346629275099,1.8146746158599854 +459201,2,0.8061448012239295,-0.10626094735465771,0.638100625686777,,,,,,,,,,,,,1.8146746158599854 +459301,0,0.19095919553326762,-1.000669460045355,-0.8351539579881,0.06338537359139342,1.0242044815289095,-0.1115128652856221,0.210943041564296,-1.3506742674091685,-0.22796431061858732,0.9581833684000187,-0.16814274788616518,-0.13173296267509654,0.49778314283978853,0.806708965813594,1.9889291013160153,0.5357965230941772 +459301,1,0.4325776493852816,0.17220651042592966,0.24821562598564237,,,,,,,,,,0.2373400917434395,1.8141914255436393,-0.059714660367144415,0.5019853711128235 +459301,2,-0.1777796495087138,0.04944047211122737,0.368093032089145,,,,,,,,,,,,,0.5019853711128235 +460201,0,-0.14788871930632877,-0.5404369563759129,0.029038120971032973,0.358342850038242,1.2756408573093225,0.7418646801456215,1.4881758474847362,0.9393511068205153,-0.5571809115428055,-0.23730908679360116,-0.16814274788616518,0.7083640674756347,1.267782866548965,-0.2910724881500066,0.8737234706124865,2.995732307434082 +460201,1,1.2015436830723893,0.7067324708851749,-0.05815961441716403,,,,,,,,,,-1.1887333502953,0.7456311526478686,1.1944719937511734,2.269479990005493 +460201,2,0.11739768571107917,0.36084331104299755,0.368093032089145,,,,,,,,,,,,,2.269479990005493 +463202,0,0.7557057202659283,-0.08020445270647089,-0.4647859241484716,0.358342850038242,0.39561354207787724,0.7418646801456215,0.7583285298159133,0.5777681529947757,-0.06335601015647824,0.9581833684000187,0.6182048363947807,-0.5517814777504622,1.267782866548965,-0.2910724881500066,0.20460009219036931,2.4788014888763428 +463202,1,-0.14414687588004912,0.5285571507320932,0.24821562598564237,,,,,,,,,,-1.1887333502953,-0.3229291202479022,0.6927973321038463,2.440580368041992 +463202,2,-0.07938720443544948,0.43869402077594005,0.008082907292302316,,,,,,,,,,,,,2.440580368041992 +463702,0,-1.0514831588785858,-0.770553208210634,-0.8351539579881,-1.7063594850896981,-1.867313839945839,-2.102727137958524,-1.9785989114421731,-2.375159303248764,-1.0510058129291326,1.5559295959968287,1.0113786285352542,1.548461097626366,0.49778314283978853,-0.2910724881500066,0.20460009219036931,0.9939402341842651 +463702,1,-0.04802612166916067,-0.896845410492561,0.04396546571710477,,,,,,,,,,0.2373400917434395,0.7456311526478686,1.1944719937511734,1.2285008430480957 +463702,2,0.31418257585760784,-0.729066625218198,0.09808543849151298,,,,,,,,,,,,,1.2285008430480957 +463703,0,-0.2608380242528609,-0.5404369563759129,-0.5882419354283478,-1.7063594850896981,-1.867313839945839,-2.102727137958524,-1.9785989114421731,-2.375159303248764,-1.0510058129291326,1.5559295959968287,1.0113786285352542,1.548461097626366,-0.27221658086938805,-0.2910724881500066,0.20460009219036931,1.2285008430480957 +463703,1,-0.4325091385127145,-0.3623194500333156,-0.05815961441716403,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.8122266528381351,1.8030738830566406 +463703,2,-0.1777796495087138,-0.41766378628642786,-1.3419550606958577,,,,,,,,,,,,,1.8030738830566406 +464101,0,-0.8255845489855216,0.2649699250456107,0.029038120971032973,0.9482578029319392,-0.10725920948294862,-0.6804312289064511,0.3934048709815018,1.120142583733385,1.7473352949267216,-0.835055314390411,-0.5613165400266386,0.28831555240026907,-0.27221658086938805,1.9044904197771946,0.8737234706124865,0.8541025519371033 +464101,1,-0.7208714011453798,0.08311885034938876,-0.568785015088508,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-1.0630639836617988,0.7045097947120667 +464101,2,-0.1777796495087138,-0.33981307655348536,0.2780905008899343,,,,,,,,,,,,,0.7045097947120667 +464103,0,-0.37378732919939306,-0.5404369563759129,-0.7116979467082238,0.9482578029319392,-0.10725920948294862,-0.6804312289064511,0.3934048709815018,1.120142583733385,1.7473352949267216,-0.835055314390411,-0.5613165400266386,0.28831555240026907,0.49778314283978853,-0.2910724881500066,-0.4645232862317478,0.7995052337646484 +464103,1,0.4325776493852816,-0.09505646980369299,0.7588410266569864,,,,,,,,,,0.9503768127628092,-0.3229291202479022,1.1944719937511734,0.7843973636627197 +464103,2,0.019005240637814846,0.282992601310055,0.7281031568859877,,,,,,,,,,,,,0.7843973636627197 +465702,0,1.0945536351055247,0.9553186805497738,0.029038120971032973,-0.08409336463203088,1.2756408573093225,0.7418646801456215,0.7583285298159133,1.1804064093710083,-0.22796431061858732,0.36043714080320877,-0.16814274788616518,1.1284125825510003,-0.27221658086938805,0.806708965813594,0.8737234706124865,1.8692766427993774 +465702,1,1.0093021746506123,0.4394694906555523,-0.568785015088508,,,,,,,,,,1.663413533782179,0.7456311526478686,1.1944719937511734,2.5912225246429443 +465702,2,0.2157901307843435,0.36084331104299755,0.5480980944875663,,,,,,,,,,,,,2.5912225246429443 +466202,0,2.1110973796243138,0.7252024287150527,0.6463181773704137,2.1280877087193333,1.401359045199529,1.3107830437664505,1.0320212739417218,-0.38645305720719647,1.9119435953888306,-0.835055314390411,1.0113786285352542,-0.13173296267509654,0.49778314283978853,0.806708965813594,0.20460009219036931,2.327807664871216 +466202,1,0.6248191578070585,0.17220651042592966,1.2694664273283303,,,,,,,,,,-1.9017700713146695,0.7456311526478686,0.4419600012801827,2.490705728530884 +466202,2,1.1013221364437225,0.43869402077594005,0.09808543849151298,,,,,,,,,,,,,2.490705728530884 +468301,0,0.9816043301589925,1.3004930583018552,0.5228621660905376,0.358342850038242,1.149922669419116,1.026323861956036,0.028481212147090252,-0.38645305720719647,1.0889020930782853,-0.23730908679360116,0.22503104425430823,1.1284125825510003,-2.5822157519969178,1.9044904197771946,-0.24148216009104212,2.20550799369812 +468301,1,0.7209399120179469,0.8849077910382567,-0.8751602554913144,,,,,,,,,,-1.9017700713146695,1.8141914255436393,-1.0630639836617988,2.1672868728637695 +468301,2,1.3964994716635155,0.7500968597077102,0.368093032089145,,,,,,,,,,,,,2.1672868728637695 +468302,0,-1.27738176877165,-0.8856113341279945,-0.7116979467082238,0.358342850038242,1.149922669419116,1.026323861956036,0.028481212147090252,-0.38645305720719647,1.0889020930782853,-0.23730908679360116,0.22503104425430823,1.1284125825510003,0.49778314283978853,1.9044904197771946,3.104134732019544,2.1672868728637695 +468302,1,-2.0665619600978182,-0.5404947701863974,-0.36453485481997044,,,,,,,,,,-1.9017700713146695,0.7456311526478686,-0.8122266528381351,2.3590002059936523 +468302,2,-0.6697418748750354,0.6722461499747677,-0.441929748703751,,,,,,,,,,,,,2.3590002059936523 +468303,0,-0.9385338539320537,-0.42537883045855246,-0.3413299128685955,0.358342850038242,1.149922669419116,1.026323861956036,0.028481212147090252,-0.38645305720719647,1.0889020930782853,-0.23730908679360116,0.22503104425430823,1.1284125825510003,1.267782866548965,0.806708965813594,-0.24148216009104212,2.1672868728637695 +468303,1,0.33645689517439314,-0.18414412988023388,0.14609054585137357,,,,,,,,,,1.663413533782179,0.7456311526478686,-0.5613893220144716,2.3590002059936523 +468303,2,1.0029296913704582,-0.10626094735465771,-0.08191962390690835,,,,,,,,,,,,,2.3590002059936523 +469001,0,1.5463508548916531,2.9113068211449025,2.2512463240088034,0.8007790647085149,0.8984862936387031,1.3107830437664505,-0.06274970256151263,-1.1096189648586756,1.7473352949267216,-0.835055314390411,-1.3476641243075844,1.548461097626366,0.49778314283978853,0.806708965813594,0.8737234706124865,1.438478946685791 +469001,1,2.3549927336030505,1.1521707712678793,1.4737165875968679,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,3.7028453019878094,1.8530703783035278 +469001,2,1.3964994716635155,0.43869402077594005,1.6281284688780944,,,,,,,,,,,,,1.8530703783035278 +469002,0,1.207502940052057,2.6811905693101816,1.016686211210042,0.8007790647085149,0.8984862936387031,1.3107830437664505,-0.06274970256151263,-1.1096189648586756,1.7473352949267216,-0.835055314390411,-1.3476641243075844,1.548461097626366,-1.0422163045785646,-0.2910724881500066,3.104134732019544,1.8530703783035278 +469002,1,1.1054229288615007,0.3503818305790114,0.963091186925524,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,3.7028453019878094,-0.6931471824645996 +469002,2,1.4948919167367798,1.295051827838308,2.1681436560733585,,,,,,,,,,,,,-0.6931471824645996 +469003,0,1.8851987697312496,2.9113068211449025,2.4981583465685557,0.8007790647085149,0.8984862936387031,1.3107830437664505,-0.06274970256151263,-1.1096189648586756,1.7473352949267216,-0.835055314390411,-1.3476641243075844,1.548461097626366,-1.0422163045785646,-1.388853942113607,3.104134732019544,-0.6931471824645996 +469003,1,0.8170606662288354,2.844836312722156,0.5545908663884488,,,,,,,,,,0.2373400917434395,-0.3229291202479022,2.197821317045828,-0.4629620313644409 +469003,2,0.5109674660041365,1.295051827838308,1.6281284688780944,,,,,,,,,,,,,-0.4629620313644409 +469004,0,0.7557057202659283,0.7252024287150527,1.1401422224899183,0.8007790647085149,0.8984862936387031,1.3107830437664505,-0.06274970256151263,-1.1096189648586756,1.7473352949267216,-0.835055314390411,-1.3476641243075844,1.548461097626366,0.49778314283978853,-0.2910724881500066,1.7658879751753094,-0.4629620313644409 +469004,1,0.4325776493852816,1.7757843918036655,2.2907172286710185,,,,,,,,,,-1.1887333502953,-0.3229291202479022,0.4419600012801827,2.0785746574401855 +469004,2,-0.1777796495087138,0.7500968597077102,0.5480980944875663,,,,,,,,,,,,,2.0785746574401855 +470002,0,0.9816043301589925,1.5306093101365763,0.3994061548106614,0.8007790647085149,0.8984862936387031,1.3107830437664505,1.4881758474847362,2.1446276195729803,1.5827269944646125,-0.835055314390411,-0.16814274788616518,1.1284125825510003,-1.812216028287741,0.806708965813594,-0.6875644123724536,2.9561963081359863 +470002,1,0.6248191578070585,0.9739954511147976,0.45246578625417994,,,,,,,,,,1.663413533782179,-0.3229291202479022,0.4419600012801827,2.995732307434082 +470002,2,1.4948919167367798,0.6722461499747677,0.7281031568859877,,,,,,,,,,,,,2.995732307434082 +471102,0,-1.0514831588785858,-0.1952625786238314,0.3994061548106614,-0.23157210285545515,-1.1130047126046003,-1.5338087743376947,0.5758667003987075,-0.748036011032936,-0.22796431061858732,0.9581833684000187,1.4045524206757267,0.7083640674756347,-1.0422163045785646,-0.2910724881500066,-0.4645232862317478,1.1434955596923828 +471102,1,-1.0092336637780452,-0.80775775041602,-0.7730351753570456,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.8122266528381351,2.7793538570404053 +471102,2,-0.7681343199482997,-0.8847680446840831,-0.26192468630532967,,,,,,,,,,,,,2.7793538570404053 +471103,0,-0.03493941435979663,-0.08020445270647089,-0.3413299128685955,-0.23157210285545515,-1.1130047126046003,-1.5338087743376947,0.5758667003987075,-0.748036011032936,-0.22796431061858732,0.9581833684000187,1.4045524206757267,0.7083640674756347,0.49778314283978853,-0.2910724881500066,-1.133646664653865,1.8448883295059204 +471103,1,-0.04802612166916067,-0.80775775041602,-1.2836605760283897,,,,,,,,,,0.9503768127628092,1.8141914255436393,0.19112267045651915,0.39723923802375793 +471103,2,-0.5713494298017712,-0.573365205752313,-1.3419550606958577,,,,,,,,,,,,,0.39723923802375793 +471701,0,-0.14788871930632877,-0.770553208210634,-0.8351539579881,-0.5265295793023037,0.2698953541876708,1.3107830437664505,-0.06274970256151263,0.8188234555452687,-1.0510058129291326,0.36043714080320877,1.4045524206757267,1.1284125825510003,0.49778314283978853,0.806708965813594,0.8737234706124865,2.6125686168670654 +471701,1,-0.7208714011453798,-0.18414412988023388,-0.05815961441716403,,,,,,,,,,0.9503768127628092,0.7456311526478686,0.6927973321038463,2.624976396560669 +471701,2,1.3964994716635155,0.1272911818441699,0.908108219284409,,,,,,,,,,,,,2.624976396560669 +472603,0,-1.5032803786647144,-1.000669460045355,-0.8351539579881,-0.8214870557491524,0.8984862936387031,-0.1115128652856221,0.3934048709815018,0.3969766760819059,-1.0510058129291326,-0.835055314390411,0.6182048363947807,-0.13173296267509654,-0.27221658086938805,-0.2910724881500066,-0.9106055385131593,1.2852725982666016 +472603,1,-1.4898374348324874,-1.6986343511814288,-1.8964110568340025,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.5613893220144716,1.2334873676300049 +472603,2,-1.5552738805344144,-2.130379400411164,-1.8819702478911218,,,,,,,,,,,,,1.2334873676300049 +473402,0,-0.8255845489855216,-1.000669460045355,-0.8351539579881,0.06338537359139342,-0.48441377315356804,-0.6804312289064511,-1.24875159377335,-0.3261892315695732,-0.5571809115428055,-0.23730908679360116,-0.5613165400266386,-0.13173296267509654,0.49778314283978853,-1.388853942113607,-0.24148216009104212,1.4095031023025513 +473402,1,-0.528629892723603,-1.1641083907221836,-1.6921608965654649,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.059714660367144415,1.8535435199737549 +473402,2,-0.8665267650215641,-1.6632751420135086,-1.251952529496647,,,,,,,,,,,,,1.8535435199737549 +477401,0,-1.164432463825118,-0.5404369563759129,-0.7116979467082238,-0.08409336463203088,0.8984862936387031,0.457405498335207,0.940790359233119,1.120142583733385,-0.3925726110806964,0.9581833684000187,-0.16814274788616518,-0.9718299928258278,0.49778314283978853,-1.388853942113607,0.20460009219036931,1.8620959520339966 +477401,1,-0.04802612166916067,-0.3623194500333156,-0.05815961441716403,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.5613893220144716,1.9311541318893433 +477401,2,-0.27617209458197817,-0.573365205752313,0.638100625686777,,,,,,,,,,,,,1.9311541318893433 +478403,0,0.07800989058673549,0.14991179912825014,-0.2178739015887193,-0.5265295793023037,-0.2329773973731551,-0.9648904107168657,-0.1539806172701155,0.5777681529947757,-0.8863975124670236,-2.030547769584031,-0.5613165400266386,-0.5517814777504622,-0.27221658086938805,-0.2910724881500066,-1.133646664653865,1.437592625617981 +478403,1,0.14421538675261625,-0.18414412988023388,0.5545908663884488,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.5613893220144716,1.2427129745483398 +478403,2,-0.5713494298017712,-0.8847680446840831,-0.35192721750454037,,,,,,,,,,,,,1.2427129745483398 +478502,0,-0.37378732919939306,0.7252024287150527,0.6463181773704137,0.358342850038242,0.7727681057484966,-0.1115128652856221,1.3057140180675306,0.7585596299076455,0.10125229030563083,-0.835055314390411,-0.5613165400266386,0.28831555240026907,-0.27221658086938805,-0.2910724881500066,-0.6875644123724536,2.112809419631958 +478502,1,-1.1053544179889336,0.7958201309617158,0.5545908663884488,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.5613893220144716,1.8479347229003906 +478502,2,0.6093599110774008,0.20514189157711243,0.2780905008899343,,,,,,,,,,,,,1.8479347229003906 +479602,0,0.4168578054263319,-0.1952625786238314,0.029038120971032973,-0.08409336463203088,0.8984862936387031,0.7418646801456215,-0.7013661055217327,-1.4712019186844152,-0.22796431061858732,-1.432801541987221,-0.16814274788616518,-0.9718299928258278,-0.27221658086938805,0.806708965813594,-1.133646664653865,1.376787781715393 +479602,1,0.048094632541727786,-0.18414412988023388,-1.590035816431196,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,-0.8122266528381351,1.9042824506759644 +479602,2,0.11739768571107917,-0.4955144960193704,0.2780905008899343,,,,,,,,,,,,,1.9042824506759644 +480201,0,1.6593001598381854,2.2209580656407395,2.745070369128308,0.06338537359139342,0.2698953541876708,-0.1115128652856221,-0.518904276104527,-0.3261892315695732,0.430468891229849,0.9581833684000187,0.6182048363947807,-0.13173296267509654,1.267782866548965,1.9044904197771946,3.104134732019544,1.778631329536438 +480201,1,1.3937851914941661,1.7757843918036655,1.882216908133943,,,,,,,,,,-0.47569662927593015,1.8141914255436393,1.1944719937511734,1.9273861646652222 +480201,2,0.9045372462971938,2.0735589251677333,1.8081335312765157,,,,,,,,,,,,,1.9273861646652222 +480202,0,1.0945536351055247,0.4950861768803317,0.6463181773704137,0.06338537359139342,0.2698953541876708,-0.1115128652856221,-0.518904276104527,-0.3261892315695732,0.430468891229849,0.9581833684000187,0.6182048363947807,-0.13173296267509654,-0.27221658086938805,0.806708965813594,0.20460009219036931,1.9908685684204102 +480202,1,1.3937851914941661,0.3503818305790114,-0.46665993495423924,,,,,,,,,,-0.47569662927593015,0.7456311526478686,0.4419600012801827,2.1840121746063232 +480202,2,1.1013221364437225,0.6722461499747677,0.368093032089145,,,,,,,,,,,,,2.1840121746063232 +481003,0,0.19095919553326762,-0.3103207045411919,-0.5882419354283478,1.833130232272485,1.2756408573093225,0.457405498335207,1.4881758474847362,2.084363793935357,1.0889020930782853,1.5559295959968287,1.4045524206757267,1.548461097626366,-1.0422163045785646,-0.2910724881500066,0.20460009219036931,0.7253972887992859 +481003,1,0.4325776493852816,0.17220651042592966,0.04396546571710477,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.5613893220144716,1.600083351135254 +481003,2,1.0029296913704582,0.1272911818441699,0.09808543849151298,,,,,,,,,,,,,1.600083351135254 +481502,0,0.529807110372864,-0.3103207045411919,0.3994061548106614,1.390694017602212,1.149922669419116,1.3107830437664505,1.4881758474847362,0.5175043273571525,1.5827269944646125,-0.23730908679360116,0.6182048363947807,-0.9718299928258278,1.267782866548965,-0.2910724881500066,-0.24148216009104212,2.2816061973571777 +481502,1,0.9131814204397238,-0.09505646980369299,0.45246578625417994,,,,,,,,,,0.9503768127628092,-0.3229291202479022,0.4419600012801827,2.2895400524139404 +481502,2,0.8061448012239295,0.20514189157711243,1.3581208752804623,,,,,,,,,,,,,2.2895400524139404 +481901,0,1.320452244998589,1.5306093101365763,1.8808782901691752,1.6856514940490606,1.401359045199529,1.026323861956036,0.7583285298159133,1.4817255375591245,1.7473352949267216,0.9581833684000187,0.6182048363947807,1.548461097626366,-0.27221658086938805,1.9044904197771946,3.104134732019544,1.9305545091629028 +481901,1,0.9131814204397238,0.8849077910382567,0.963091186925524,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,1.1944719937511734,2.17850399017334 +481901,2,1.1997145815169867,0.6722461499747677,0.2780905008899343,,,,,,,,,,,,,2.17850399017334 +481902,0,1.9981480746777818,0.2649699250456107,2.004334301449051,1.6856514940490606,1.401359045199529,1.026323861956036,0.7583285298159133,1.4817255375591245,1.7473352949267216,0.9581833684000187,0.6182048363947807,1.548461097626366,-0.27221658086938805,-0.2910724881500066,3.104134732019544,2.17850399017334 +481902,1,1.1054229288615007,-0.2732317899567748,1.2694664273283303,,,,,,,,,,-1.1887333502953,1.8141914255436393,0.4419600012801827,2.1390345096588135 +481902,2,1.3964994716635155,-0.41766378628642786,1.0881132816828303,,,,,,,,,,,,,2.1390345096588135 +482601,0,0.19095919553326762,-0.5404369563759129,-0.5882419354283478,0.6533003264850905,1.0242044815289095,0.7418646801456215,1.3969449327761334,1.602253188834371,0.430468891229849,1.5559295959968287,1.7977262128162,0.7083640674756347,1.267782866548965,1.9044904197771946,1.9889291013160153,2.4339969158172607 +482601,1,0.33645689517439314,1.0630831111913384,0.04396546571710477,,,,,,,,,,0.9503768127628092,0.7456311526478686,2.197821317045828,2.5463144779205322 +482601,2,1.0029296913704582,0.5943954402418251,0.908108219284409,,,,,,,,,,,,,2.5463144779205322 +482602,0,-0.03493941435979663,0.14991179912825014,-0.3413299128685955,0.6533003264850905,1.0242044815289095,0.7418646801456215,1.3969449327761334,1.602253188834371,0.430468891229849,1.5559295959968287,1.7977262128162,0.7083640674756347,0.49778314283978853,1.9044904197771946,1.7658879751753094,2.5463144779205322 +482602,1,0.8170606662288354,0.2612941705024705,1.2694664273283303,,,,,,,,,,0.2373400917434395,1.8141914255436393,-0.059714660367144415,2.6243011951446533 +482602,2,0.2157901307843435,1.450753247304193,0.368093032089145,,,,,,,,,,,,,2.6243011951446533 +483802,0,-1.164432463825118,-1.230785711880076,-1.0820659805478523,-0.9689657939725767,0.39561354207787724,0.17294631652479245,0.6670976151073104,0.2764490248066594,-0.7217892120049145,0.9581833684000187,-0.5613165400266386,-1.3918785079011935,1.267782866548965,-1.388853942113607,0.20460009219036931,0.025361914187669754 +483802,1,-1.6820789432542644,0.17220651042592966,0.45246578625417994,,,,,,,,,,1.663413533782179,-1.3914893931436731,1.1944719937511734,-0.16174083948135376 +483802,2,-0.9649192100948284,0.1272911818441699,0.18808796969072364,,,,,,,,,,,,,-0.16174083948135376 +483902,0,-0.37378732919939306,0.2649699250456107,0.6463181773704137,-0.23157210285545515,0.5213317299680837,0.7418646801456215,-0.2452115319787184,0.15592137353141286,0.2658605907677399,-0.23730908679360116,0.22503104425430823,-1.3918785079011935,0.49778314283978853,-0.2910724881500066,-0.9106055385131593,1.0278526544570923 +483902,1,0.4325776493852816,0.7958201309617158,1.1673413471940615,,,,,,,,,,0.9503768127628092,2.88275169843941,0.4419600012801827,1.020437240600586 +483902,2,1.9868541421031014,0.8279475694406527,1.2681183440812516,,,,,,,,,,,,,1.020437240600586 +484801,0,1.4334015499451211,0.2649699250456107,0.3994061548106614,0.06338537359139342,0.2698953541876708,0.457405498335207,0.11971212685569313,0.5777681529947757,0.595077191691958,0.9581833684000187,-0.9544903321671111,-0.5517814777504622,0.49778314283978853,0.806708965813594,0.8737234706124865,2.0196738243103027 +484801,1,0.7209399120179469,0.7067324708851749,0.45246578625417994,,,,,,,,,,0.2373400917434395,-0.3229291202479022,1.1944719937511734,2.0295932292938232 +484801,2,0.41257502093087217,0.1272911818441699,0.2780905008899343,,,,,,,,,,,,,2.0295932292938232 +486401,0,0.07800989058673549,-0.6554950822932735,-0.3413299128685955,-0.674008317525728,0.6470499178582901,-0.1115128652856221,0.028481212147090252,0.3969766760819059,-0.3925726110806964,-0.23730908679360116,-0.5613165400266386,-0.5517814777504622,-0.27221658086938805,0.806708965813594,-0.24148216009104212,1.625527262687683 +486401,1,0.6248191578070585,0.2612941705024705,0.35034070611991114,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.059714660367144415,1.7777050733566284 +486401,2,1.1013221364437225,0.43869402077594005,0.09808543849151298,,,,,,,,,,,,,1.7777050733566284 +486502,0,-0.8255845489855216,-0.6554950822932735,-0.3413299128685955,0.5058215882616662,0.2698953541876708,0.457405498335207,0.028481212147090252,-0.26592540593194997,0.595077191691958,-1.432801541987221,-0.16814274788616518,-0.9718299928258278,0.49778314283978853,-0.2910724881500066,0.8737234706124865,2.1099605560302734 +486502,1,-0.528629892723603,-0.18414412988023388,0.6567159465227176,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.059714660367144415,2.035268783569336 +486502,2,-0.27617209458197817,-0.33981307655348536,0.09808543849151298,,,,,,,,,,,,,2.035268783569336 +486901,0,0.4168578054263319,1.1854349323844948,2.3747023352886796,1.833130232272485,1.401359045199529,1.026323861956036,1.4881758474847362,1.6625170144719943,1.7473352949267216,1.5559295959968287,1.7977262128162,1.9685096127017316,0.49778314283978853,-1.388853942113607,0.20460009219036931,2.0128424167633057 +486901,1,0.8170606662288354,0.9739954511147976,3.3119680300137064,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.5613893220144716,2.11169171333313 +486901,2,-0.27617209458197817,1.3729025375712505,1.8981360624757264,,,,,,,,,,,,,2.11169171333313 +487001,0,0.07800989058673549,0.03485367321088963,0.029038120971032973,0.358342850038242,1.2756408573093225,0.7418646801456215,0.5758667003987075,0.6380319786323989,1.0889020930782853,0.36043714080320877,0.6182048363947807,-0.5517814777504622,-1.0422163045785646,0.806708965813594,-0.4645232862317478,1.8398503065109253 +487001,1,1.2976644372832777,0.8849077910382567,0.5545908663884488,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,-0.8122266528381351,-0.08725151419639587 +487001,2,0.7077523561506651,0.36084331104299755,0.09808543849151298,,,,,,,,,,,,,-0.08725151419639587 +487002,0,1.0945536351055247,0.8402605546324132,0.15249413225090913,0.358342850038242,1.2756408573093225,0.7418646801456215,0.5758667003987075,0.6380319786323989,1.0889020930782853,0.36043714080320877,0.6182048363947807,-0.5517814777504622,0.49778314283978853,-0.2910724881500066,-0.6875644123724536,-0.6931471824645996 +487002,1,0.52869840359617,1.1521707712678793,0.7588410266569864,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.5613893220144716,-0.0007432480342686176 +487002,2,0.9045372462971938,0.6722461499747677,1.0881132816828303,,,,,,,,,,,,,-0.0007432480342686176 +487102,0,0.8686550252124604,1.0703768064671344,0.7697741886502898,2.1280877087193333,1.2756408573093225,1.026323861956036,1.0320212739417218,0.6982958042700221,2.07655189585094,1.5559295959968287,1.7977262128162,0.7083640674756347,1.267782866548965,-0.2910724881500066,0.20460009219036931,2.6505532264709473 +487102,1,-0.04802612166916067,0.4394694906555523,0.6567159465227176,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.5613893220144716,1.8091163635253906 +487102,2,0.7077523561506651,0.282992601310055,0.638100625686777,,,,,,,,,,,,,1.8091163635253906 +487103,0,1.207502940052057,-0.6554950822932735,-0.5882419354283478,2.1280877087193333,1.2756408573093225,1.026323861956036,1.0320212739417218,0.6982958042700221,2.07655189585094,1.5559295959968287,1.7977262128162,0.7083640674756347,1.267782866548965,-0.2910724881500066,0.20460009219036931,1.9618428945541382 +487103,1,-0.04802612166916067,0.2612941705024705,-0.8751602554913144,,,,,,,,,,1.663413533782179,-0.3229291202479022,0.4419600012801827,2.093297004699707 +487103,2,-0.07938720443544948,0.04944047211122737,-0.08191962390690835,,,,,,,,,,,,,2.093297004699707 +487401,0,0.9816043301589925,2.105899939723379,2.745070369128308,1.6856514940490606,1.401359045199529,1.026323861956036,1.1232521886503248,-0.20566158029432668,1.9119435953888306,-0.835055314390411,1.0113786285352542,1.1284125825510003,1.267782866548965,-0.2910724881500066,-0.018441033950336395,2.2503535747528076 +487401,1,0.6248191578070585,1.8648720518802064,2.392842308805287,,,,,,,,,,0.9503768127628092,0.7456311526478686,1.1944719937511734,2.7951345443725586 +487401,2,0.7077523561506651,1.3729025375712505,2.3481487184717795,,,,,,,,,,,,,2.7951345443725586 +487402,0,1.6593001598381854,-1.000669460045355,-0.8351539579881,1.6856514940490606,1.401359045199529,1.026323861956036,1.1232521886503248,-0.20566158029432668,1.9119435953888306,-0.835055314390411,1.0113786285352542,1.1284125825510003,1.267782866548965,0.806708965813594,3.104134732019544,2.7951345443725586 +487402,1,-0.6247506469344914,0.2612941705024705,0.5545908663884488,,,,,,,,,,0.9503768127628092,0.7456311526478686,0.4419600012801827,1.8023213148117065 +487402,2,-0.1777796495087138,1.450753247304193,0.5480980944875663,,,,,,,,,,,,,1.8023213148117065 +488002,0,0.07800989058673549,-1.1157275859627156,-0.9586099692679761,0.5058215882616662,0.8984862936387031,-0.3959720470960366,0.210943041564296,1.361197886283878,0.7596854921540671,-0.835055314390411,1.4045524206757267,0.7083640674756347,1.267782866548965,0.806708965813594,1.7658879751753094,2.054685115814209 +488002,1,0.14421538675261625,-0.18414412988023388,0.35034070611991114,,,,,,,,,,-0.47569662927593015,1.8141914255436393,-0.310551991190808,2.2767817974090576 +488002,2,0.41257502093087217,-0.18411165708760024,0.18808796969072364,,,,,,,,,,,,,2.2767817974090576 +488501,0,2.1110973796243138,2.3360161915581,2.3747023352886796,1.833130232272485,1.0242044815289095,0.7418646801456215,1.4881758474847362,1.9638361426601105,1.2535103935403944,1.5559295959968287,1.7977262128162,-3.072072568202656,0.49778314283978853,-0.2910724881500066,0.20460009219036931,2.0901732444763184 +488501,1,1.77826820833772,3.2011869530283197,2.9034677094766312,,,,,,,,,,1.663413533782179,-1.3914893931436731,0.4419600012801827,2.051353693008423 +488501,2,1.8884616970298371,1.3729025375712505,0.368093032089145,,,,,,,,,,,,,2.051353693008423 +489901,0,1.207502940052057,0.14991179912825014,0.029038120971032973,-1.4114020086428494,-0.6101319610437744,-1.2493495925272802,-0.61013519081313,-0.20566158029432668,-0.3925726110806964,-0.835055314390411,-1.3476641243075844,-0.9718299928258278,-0.27221658086938805,-0.2910724881500066,-0.24148216009104212,1.5451785326004028 +489901,1,0.14421538675261625,0.6176448108086341,0.45246578625417994,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.5613893220144716,1.7375015020370483 +489901,2,-0.5713494298017712,0.282992601310055,-0.441929748703751,,,,,,,,,,,,,1.7375015020370483 +492501,0,1.320452244998589,0.7252024287150527,0.3994061548106614,0.2108641118148177,1.2756408573093225,1.026323861956036,1.0320212739417218,-0.5069807084824429,1.0889020930782853,0.9581833684000187,1.0113786285352542,1.1284125825510003,-0.27221658086938805,0.806708965813594,-0.4645232862317478,2.1269590854644775 +492501,1,0.8170606662288354,0.4394694906555523,1.1673413471940615,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.059714660367144415,2.2566826343536377 +492501,2,0.8061448012239295,1.606454666770078,2.4381512496709905,,,,,,,,,,,,,2.2566826343536377 +492502,0,0.7557057202659283,0.3800280509629712,0.6463181773704137,0.2108641118148177,1.2756408573093225,1.026323861956036,1.0320212739417218,-0.5069807084824429,1.0889020930782853,0.9581833684000187,1.0113786285352542,1.1284125825510003,-1.0422163045785646,-0.2910724881500066,0.20460009219036931,2.2566826343536377 +492502,1,0.6248191578070585,0.5285571507320932,0.8609661067912552,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.5613893220144716,2.3729214668273926 +492502,2,0.6093599110774008,0.9836489889065378,0.7281031568859877,,,,,,,,,,,,,2.3729214668273926 +492701,0,1.8851987697312496,-0.6554950822932735,-0.4647859241484716,1.5381727558256364,0.2698953541876708,1.026323861956036,0.5758667003987075,-0.08513392901908017,1.7473352949267216,0.36043714080320877,-0.16814274788616518,0.7083640674756347,1.267782866548965,-0.2910724881500066,1.7658879751753094,2.7766072750091553 +492701,1,0.2403361409635047,-0.2732317899567748,0.35034070611991114,,,,,,,,,,0.2373400917434395,0.7456311526478686,0.4419600012801827,2.7186119556427 +492701,2,1.298107026590251,0.20514189157711243,0.7281031568859877,,,,,,,,,,,,,2.7186119556427 +493001,0,0.19095919553326762,0.14991179912825014,0.5228621660905376,0.06338537359139342,0.5213317299680837,0.17294631652479245,-0.33644244668732126,-0.3261892315695732,-1.0510058129291326,-0.835055314390411,0.22503104425430823,-1.3918785079011935,0.49778314283978853,-0.2910724881500066,0.8737234706124865,1.6624723672866821 +493001,1,0.6248191578070585,0.2612941705024705,0.5545908663884488,,,,,,,,,,0.9503768127628092,-0.3229291202479022,0.6927973321038463,1.2876559495925903 +493001,2,0.8061448012239295,-0.10626094735465771,-0.08191962390690835,,,,,,,,,,,,,1.2876559495925903 +493301,0,0.8686550252124604,0.14991179912825014,-0.09441789030884316,0.06338537359139342,1.2756408573093225,0.17294631652479245,0.5758667003987075,0.9996149324581385,0.9242937926161762,0.9581833684000187,1.0113786285352542,1.1284125825510003,1.267782866548965,0.806708965813594,0.8737234706124865,1.6535903215408325 +493301,1,1.2015436830723893,-0.18414412988023388,0.5545908663884488,,,,,,,,,,0.2373400917434395,-0.3229291202479022,1.1944719937511734,1.7980340719223022 +493301,2,-0.7681343199482997,-0.41766378628642786,-0.441929748703751,,,,,,,,,,,,,1.7980340719223022 +494704,0,-0.5996859390924573,-1.6910182155495181,-1.575890025667357,-1.1164445321960008,-1.615877464165426,-1.8182679561481092,-2.2522916555679817,-2.134104000698271,-1.0510058129291326,-2.030547769584031,-2.5271855007290034,-0.13173296267509654,-0.27221658086938805,-1.388853942113607,-1.3566877907945707,0.09691715240478516 +494704,1,-1.8743204516760412,-1.2531960507987243,-1.2836605760283897,,,,,,,,,,1.663413533782179,-1.3914893931436731,-1.3139013144854623,-0.4088827669620514 +494704,2,-0.6697418748750354,-1.5075737225476233,-1.3419550606958577,,,,,,,,,,,,,-0.4088827669620514 +495402,0,0.19095919553326762,0.8402605546324132,0.7697741886502898,0.5058215882616662,0.018458978407257843,1.026323861956036,1.2144831033589276,0.7585596299076455,1.4181186940025035,0.36043714080320877,0.22503104425430823,0.7083640674756347,0.49778314283978853,-0.2910724881500066,1.9889291013160153,2.3356196880340576 +495402,1,0.33645689517439314,1.2412584313444202,0.7588410266569864,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.059714660367144415,2.274500846862793 +495402,2,0.8061448012239295,1.995708215434791,-0.35192721750454037,,,,,,,,,,,,,2.274500846862793 +495403,0,0.9816043301589925,0.4950861768803317,-0.09441789030884316,0.5058215882616662,0.018458978407257843,1.026323861956036,1.2144831033589276,0.7585596299076455,1.4181186940025035,0.36043714080320877,0.22503104425430823,0.7083640674756347,0.49778314283978853,0.806708965813594,-0.6875644123724536,2.274500846862793 +495403,1,0.4325776493852816,1.5976090716505837,0.8609661067912552,,,,,,,,,,0.9503768127628092,-0.3229291202479022,0.4419600012801827,2.5239617824554443 +495403,2,1.1013221364437225,0.20514189157711243,0.908108219284409,,,,,,,,,,,,,2.5239617824554443 +495404,0,-0.2608380242528609,-0.42537883045855246,-0.5882419354283478,0.5058215882616662,0.018458978407257843,1.026323861956036,1.2144831033589276,0.7585596299076455,1.4181186940025035,0.36043714080320877,0.22503104425430823,0.7083640674756347,1.267782866548965,-1.388853942113607,-0.24148216009104212,2.5239617824554443 +495404,1,-0.33638838430182605,1.330346091420961,0.35034070611991114,,,,,,,,,,0.9503768127628092,0.7456311526478686,0.19112267045651915,2.4441580772399902 +495404,2,0.019005240637814846,1.6843053765030207,-0.17192215510611902,,,,,,,,,,,,,2.4441580772399902 +495601,0,0.19095919553326762,0.7252024287150527,0.2759501435307853,0.5058215882616662,-0.2329773973731551,0.457405498335207,1.2144831033589276,0.7585596299076455,0.430468891229849,-0.23730908679360116,0.22503104425430823,1.1284125825510003,0.49778314283978853,0.806708965813594,0.20460009219036931,1.8594926595687866 +495601,1,0.33645689517439314,0.17220651042592966,0.04396546571710477,,,,,,,,,,-0.47569662927593015,1.8141914255436393,-0.310551991190808,1.9301546812057495 +495601,2,0.31418257585760784,0.1272911818441699,-0.08191962390690835,,,,,,,,,,,,,1.9301546812057495 +497305,0,-0.48673663414592516,-1.1157275859627156,-0.9586099692679761,0.9482578029319392,0.8984862936387031,1.026323861956036,1.1232521886503248,1.4817255375591245,0.7596854921540671,-0.835055314390411,-0.9544903321671111,1.9685096127017316,-1.0422163045785646,-0.2910724881500066,0.20460009219036931,2.4247069358825684 +497305,1,0.4325776493852816,-0.09505646980369299,0.24821562598564237,,,,,,,,,,0.2373400917434395,-0.3229291202479022,0.4419600012801827,2.521341562271118 +497305,2,0.31418257585760784,1.2172011181053655,0.8181056880851983,,,,,,,,,,,,,2.521341562271118 +497403,0,-0.37378732919939306,-0.8856113341279945,-0.8351539579881,1.5381727558256364,0.7727681057484966,0.7418646801456215,1.3057140180675306,0.7585596299076455,1.0889020930782853,0.36043714080320877,-0.16814274788616518,-0.5517814777504622,-2.5822157519969178,-1.388853942113607,-1.3566877907945707,1.4225068092346191 +497403,1,-0.24026763009093757,-0.2732317899567748,-0.05815961441716403,,,,,,,,,,-1.9017700713146695,-1.3914893931436731,1.1944719937511734,0.37020179629325867 +497403,2,0.9045372462971938,-0.33981307655348536,0.008082907292302316,,,,,,,,,,,,,0.37020179629325867 +497601,0,2.901742514250039,2.105899939723379,2.004334301449051,0.9482578029319392,0.8984862936387031,1.026323861956036,0.210943041564296,0.2764490248066594,0.430468891229849,0.36043714080320877,0.6182048363947807,-0.5517814777504622,0.49778314283978853,-0.2910724881500066,1.7658879751753094,2.2968735694885254 +497601,1,1.2015436830723893,1.7757843918036655,-1.9985361369682713,,,,,,,,,,0.9503768127628092,-0.3229291202479022,3.7028453019878094,2.7093937397003174 +497601,2,0.5109674660041365,0.8279475694406527,0.2780905008899343,,,,,,,,,,,,,2.7093937397003174 +497602,0,2.1110973796243138,2.3360161915581,2.4981583465685557,0.9482578029319392,0.8984862936387031,1.026323861956036,0.210943041564296,0.2764490248066594,0.430468891229849,0.36043714080320877,0.6182048363947807,-0.5517814777504622,0.49778314283978853,-0.2910724881500066,3.104134732019544,2.7093937397003174 +497602,1,0.8170606662288354,2.22122269218637,0.04396546571710477,,,,,,,,,,0.9503768127628092,-0.3229291202479022,1.1944719937511734,2.2666268348693848 +497602,2,1.8884616970298371,1.7621560862359633,1.2681183440812516,,,,,,,,,,,,,2.2666268348693848 +498701,0,1.0945536351055247,0.2649699250456107,0.3994061548106614,1.390694017602212,1.149922669419116,1.026323861956036,1.4881758474847362,0.9393511068205153,1.7473352949267216,-0.835055314390411,-0.9544903321671111,0.28831555240026907,0.49778314283978853,0.806708965813594,0.20460009219036931,2.528991222381592 +498701,1,-0.7208714011453798,0.3503818305790114,-0.26240977468570165,,,,,,,,,,-1.1887333502953,0.7456311526478686,-0.5613893220144716,2.545036792755127 +498701,2,1.6916768068833083,-0.33981307655348536,0.9981107504836196,,,,,,,,,,,,,2.545036792755127 +499701,0,-0.7126352440389895,0.2649699250456107,0.7697741886502898,0.9482578029319392,0.7727681057484966,0.457405498335207,1.0320212739417218,-2.435423128886387,1.0889020930782853,-0.835055314390411,1.7977262128162,0.28831555240026907,-1.812216028287741,0.806708965813594,-0.9106055385131593,2.6871190071105957 +499701,1,0.52869840359617,-0.5404947701863974,0.14609054585137357,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.5613893220144716,2.174919366836548 +499701,2,-0.37456453965524245,-0.6512159154852555,-0.8019398735005937,,,,,,,,,,,,,2.174919366836548 +501402,0,0.6427564153193962,1.4155511842192159,1.5105102563295467,-1.4114020086428494,-1.1130047126046003,-1.5338087743376947,-0.42767336139592416,0.035393722256166354,-0.7217892120049145,-1.432801541987221,-1.740837916448057,-0.13173296267509654,-1.0422163045785646,0.806708965813594,0.20460009219036931,0.6203828454017639 +501402,1,0.4325776493852816,0.9739954511147976,0.963091186925524,,,,,,,,,,-0.47569662927593015,0.7456311526478686,0.4419600012801827,2.3356196880340576 +501402,2,0.2157901307843435,0.282992601310055,-0.08191962390690835,,,,,,,,,,,,,2.3356196880340576 +501601,0,0.8686550252124604,2.3360161915581,1.2635982337697944,-0.5265295793023037,1.149922669419116,-1.8182679561481092,0.028481212147090252,-0.989091313583429,-0.5571809115428055,0.9581833684000187,1.4045524206757267,1.9685096127017316,-0.27221658086938805,0.806708965813594,0.20460009219036931,1.9563919305801392 +501601,1,0.9131814204397238,0.3503818305790114,1.371591507462599,,,,,,,,,,0.2373400917434395,0.7456311526478686,1.1944719937511734,1.1756467819213867 +501601,2,-0.07938720443544948,0.36084331104299755,1.8081335312765157,,,,,,,,,,,,,1.1756467819213867 +504101,0,1.7722494647847176,2.3360161915581,2.1277903127289273,-1.1164445321960008,-0.8615683368241874,-0.1115128652856221,0.028481212147090252,0.6380319786323989,-1.3802224138533508,-0.835055314390411,-0.16814274788616518,-1.3918785079011935,0.49778314283978853,-1.388853942113607,-0.6875644123724536,0.992778480052948 +504101,1,2.0666304709703853,1.5976090716505837,1.0652162670597927,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,-0.059714660367144415,0.9178255200386047 +504101,2,1.0029296913704582,1.606454666770078,2.1681436560733585,,,,,,,,,,,,,0.9178255200386047 +506602,0,0.9816043301589925,2.2209580656407395,1.8808782901691752,-0.37905084107887943,0.7727681057484966,1.026323861956036,-0.33644244668732126,0.2161851991690361,0.595077191691958,0.9581833684000187,1.7977262128162,0.7083640674756347,-0.27221658086938805,-1.388853942113607,-0.24148216009104212,1.9792346954345703 +506602,1,-0.14414687588004912,1.2412584313444202,0.24821562598564237,,,,,,,,,,1.663413533782179,-1.3914893931436731,-0.5613893220144716,2.144155502319336 +506602,2,-0.4729569847285068,0.8279475694406527,-0.26192468630532967,,,,,,,,,,,,,2.144155502319336 +508901,0,-0.9385338539320537,-0.5404369563759129,-0.7116979467082238,-1.2639232704194252,-1.867313839945839,-1.8182679561481092,-1.9785989114421731,-1.3506742674091685,-1.2156141133912417,-0.835055314390411,-1.3476641243075844,-0.5517814777504622,0.49778314283978853,0.806708965813594,-1.3566877907945707,1.3579683303833008 +508901,1,-1.7781996974651528,-1.3422837108752652,-1.590035816431196,,,,,,,,,,1.663413533782179,-1.3914893931436731,-1.3139013144854623,0.6626454591751099 +508901,2,-0.9649192100948284,-0.9626187544170256,-0.981944935899015,,,,,,,,,,,,,0.6626454591751099 +508902,0,-0.2608380242528609,-1.1157275859627156,-0.9586099692679761,-1.2639232704194252,-1.867313839945839,-1.8182679561481092,-1.9785989114421731,-1.3506742674091685,-1.2156141133912417,-0.835055314390411,-1.3476641243075844,-0.5517814777504622,1.267782866548965,-1.388853942113607,-1.3566877907945707,1.6557177305221558 +508902,1,-1.7781996974651528,-0.6295824302629383,-0.7730351753570456,,,,,,,,,,0.9503768127628092,-1.3914893931436731,-0.5613893220144716,0.6637288331985474 +508902,2,-0.7681343199482997,-1.1961708836158533,-0.26192468630532967,,,,,,,,,,,,,0.6637288331985474 +509101,0,1.320452244998589,1.7607255619712974,2.004334301449051,0.358342850038242,-0.35869558526336154,1.026323861956036,0.7583285298159133,0.6982958042700221,1.2535103935403944,-0.23730908679360116,-0.16814274788616518,1.1284125825510003,0.49778314283978853,-1.388853942113607,-0.6875644123724536,2.7455193996429443 +509101,1,0.6248191578070585,1.419433751497502,1.371591507462599,,,,,,,,,,-1.9017700713146695,-0.3229291202479022,-0.310551991190808,2.761033773422241 +509101,2,0.31418257585760784,0.8279475694406527,1.988138593674937,,,,,,,,,,,,,2.761033773422241 +509603,0,1.9981480746777818,0.14991179912825014,0.5228621660905376,0.9482578029319392,0.7727681057484966,0.457405498335207,-0.06274970256151263,-1.651993395597285,0.9242937926161762,0.9581833684000187,0.22503104425430823,0.28831555240026907,0.49778314283978853,-0.2910724881500066,-0.24148216009104212,1.8630177974700928 +509603,1,0.8170606662288354,0.9739954511147976,1.371591507462599,,,,,,,,,,1.663413533782179,-1.3914893931436731,-1.0630639836617988,2.831446409225464 +509603,2,0.41257502093087217,1.5286039570371357,0.5480980944875663,,,,,,,,,,,,,2.831446409225464 +509902,0,2.224046684570846,3.1414230729796238,3.1154384029679365,1.6856514940490606,1.2756408573093225,1.3107830437664505,-0.2452115319787184,-0.08513392901908017,1.5827269944646125,0.9581833684000187,0.22503104425430823,-1.8119270229765592,-1.0422163045785646,-0.2910724881500066,-1.133646664653865,2.412142276763916 +509902,1,0.7209399120179469,1.1521707712678793,1.4737165875968679,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-1.0630639836617988,2.6644437313079834 +509902,2,0.31418257585760784,2.2292603446336186,1.718131000077305,,,,,,,,,,,,,2.6644437313079834 +510302,0,-1.27738176877165,-0.770553208210634,-0.7116979467082238,-0.23157210285545515,0.6470499178582901,0.457405498335207,1.4881758474847362,1.1804064093710083,-0.06335601015647824,-0.835055314390411,-0.16814274788616518,-0.5517814777504622,0.49778314283978853,0.806708965813594,0.6506823444717807,1.1982612609863281 +510302,1,-0.4325091385127145,-0.3623194500333156,-0.26240977468570165,,,,,,,,,,0.2373400917434395,-1.3914893931436731,1.1944719937511734,1.3369460105895996 +510302,2,-0.27617209458197817,-0.6512159154852555,0.008082907292302316,,,,,,,,,,,,,1.3369460105895996 +510703,0,0.529807110372864,2.3360161915581,0.893230199930166,1.390694017602212,0.5213317299680837,1.3107830437664505,1.3969449327761334,0.6380319786323989,1.4181186940025035,0.9581833684000187,1.7977262128162,1.9685096127017316,-0.27221658086938805,1.9044904197771946,0.8737234706124865,2.8693926334381104 +510703,1,-0.04802612166916067,0.8849077910382567,-0.6709100952227768,,,,,,,,,,-1.1887333502953,0.7456311526478686,1.1944719937511734,2.719815492630005 +510703,2,0.31418257585760784,0.20514189157711243,0.368093032089145,,,,,,,,,,,,,2.719815492630005 +511001,0,0.4168578054263319,-0.1952625786238314,-0.09441789030884316,0.2108641118148177,-0.35869558526336154,-0.1115128652856221,0.5758667003987075,-0.024870103381456905,-1.2156141133912417,0.36043714080320877,1.4045524206757267,0.7083640674756347,-0.27221658086938805,-0.2910724881500066,0.6506823444717807,0.29904457926750183 +511001,1,-0.04802612166916067,0.17220651042592966,-0.26240977468570165,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.059714660367144415,2.0143966674804688 +511001,2,-0.27617209458197817,-0.028410237621715174,-0.08191962390690835,,,,,,,,,,,,,2.0143966674804688 +513101,0,1.207502940052057,0.4950861768803317,-0.09441789030884316,0.5058215882616662,0.8984862936387031,0.457405498335207,-0.42767336139592416,-0.748036011032936,1.0889020930782853,-0.835055314390411,0.22503104425430823,1.548461097626366,0.49778314283978853,-0.2910724881500066,0.8737234706124865,0.3354596197605133 +513101,1,0.33645689517439314,0.6176448108086341,1.882216908133943,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.310551991190808,0.35531535744667053 +513101,2,0.019005240637814846,0.20514189157711243,0.7281031568859877,,,,,,,,,,,,,0.35531535744667053 +513402,0,1.8851987697312496,0.7252024287150527,1.016686211210042,0.06338537359139342,0.6470499178582901,-0.3959720470960366,-0.7013661055217327,-0.38645305720719647,-0.3925726110806964,-0.835055314390411,-1.740837916448057,0.28831555240026907,-0.27221658086938805,1.9044904197771946,-1.133646664653865,0.7845523953437805 +513402,1,1.0093021746506123,0.7067324708851749,0.963091186925524,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.059714660367144415,0.9863404035568237 +513402,2,1.1013221364437225,0.9057982791735953,1.2681183440812516,,,,,,,,,,,,,0.9863404035568237 +514302,0,-1.164432463825118,0.9553186805497738,0.7697741886502898,1.5381727558256364,0.6470499178582901,1.3107830437664505,0.8495594445245161,0.8188234555452687,0.2658605907677399,-0.23730908679360116,0.6182048363947807,-0.9718299928258278,0.49778314283978853,-0.2910724881500066,-0.24148216009104212,2.7561864852905273 +514302,1,2.0666304709703853,-0.00596880972715211,0.7588410266569864,,,,,,,,,,0.9503768127628092,-0.3229291202479022,2.4486586478694914,2.5507311820983887 +514302,2,0.5109674660041365,0.20514189157711243,0.5480980944875663,,,,,,,,,,,,,2.5507311820983887 +515101,0,1.0945536351055247,2.796248695227542,1.8808782901691752,1.0957365411553635,1.0242044815289095,0.457405498335207,0.8495594445245161,0.2161851991690361,0.430468891229849,0.9581833684000187,-0.16814274788616518,1.1284125825510003,-1.812216028287741,0.806708965813594,0.8737234706124865,1.8253065347671509 +515101,1,1.2015436830723893,1.419433751497502,1.0652162670597927,,,,,,,,,,0.2373400917434395,0.7456311526478686,2.4486586478694914,2.707895040512085 +515101,2,1.4948919167367798,1.9178575057018483,1.6281284688780944,,,,,,,,,,,,,2.707895040512085 +515202,0,0.19095919553326762,0.8402605546324132,-0.2178739015887193,-0.674008317525728,-0.2329773973731551,-0.3959720470960366,0.940790359233119,0.2161851991690361,-0.22796431061858732,-0.835055314390411,0.6182048363947807,-2.2319755380519246,0.49778314283978853,-0.2910724881500066,0.8737234706124865,0.3440210223197937 +515202,1,-0.6247506469344914,0.5285571507320932,1.0652162670597927,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.059714660367144415,0.40753647685050964 +515202,2,0.2157901307843435,0.36084331104299755,0.638100625686777,,,,,,,,,,,,,0.40753647685050964 +515203,0,-0.37378732919939306,1.0703768064671344,0.3994061548106614,-0.674008317525728,-0.2329773973731551,-0.3959720470960366,0.940790359233119,0.2161851991690361,-0.22796431061858732,-0.835055314390411,0.6182048363947807,-2.2319755380519246,-0.27221658086938805,-0.2910724881500066,-0.24148216009104212,0.40753647685050964 +515203,1,0.33645689517439314,0.3503818305790114,0.35034070611991114,,,,,,,,,,0.9503768127628092,-0.3229291202479022,0.4419600012801827,0.25959786772727966 +515203,2,0.11739768571107917,0.1272911818441699,-0.08191962390690835,,,,,,,,,,,,,0.25959786772727966 +516401,0,-0.14788871930632877,0.03485367321088963,-0.09441789030884316,-1.1164445321960008,-0.7358501489339809,-0.9648904107168657,-1.5224443378991586,-0.08513392901908017,-0.5571809115428055,1.5559295959968287,1.0113786285352542,1.1284125825510003,0.49778314283978853,-0.2910724881500066,-0.6875644123724536,2.7304625511169434 +516401,1,-0.14414687588004912,-0.3623194500333156,0.35034070611991114,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.5613893220144716,2.5171568393707275 +516401,2,0.11739768571107917,-0.2619623668205428,-0.08191962390690835,,,,,,,,,,,,,2.5171568393707275 +517601,0,0.19095919553326762,0.8402605546324132,1.016686211210042,0.358342850038242,-0.10725920948294862,0.457405498335207,0.3934048709815018,-0.024870103381456905,-0.22796431061858732,0.9581833684000187,1.0113786285352542,1.1284125825510003,1.267782866548965,-0.2910724881500066,-0.4645232862317478,0.7634837031364441 +517601,1,0.4325776493852816,0.7067324708851749,0.45246578625417994,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.5613893220144716,0.7988744974136353 +517601,2,1.1013221364437225,0.5943954402418251,0.2780905008899343,,,,,,,,,,,,,0.7988744974136353 +518002,0,1.6593001598381854,0.8402605546324132,1.016686211210042,0.6533003264850905,-0.2329773973731551,0.7418646801456215,-0.61013519081313,-0.3261892315695732,0.2658605907677399,-1.432801541987221,-1.740837916448057,-0.5517814777504622,-1.0422163045785646,-0.2910724881500066,-0.24148216009104212,0.9330366253852844 +518002,1,0.52869840359617,0.7958201309617158,0.8609661067912552,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-0.8122266528381351,1.3729783296585083 +518002,2,0.11739768571107917,1.7621560862359633,0.638100625686777,,,,,,,,,,,,,1.3729783296585083 +518901,0,0.07800989058673549,1.1854349323844948,1.3870542450496706,-0.08409336463203088,1.0242044815289095,0.457405498335207,-0.518904276104527,-0.024870103381456905,-1.0510058129291326,-0.835055314390411,-1.740837916448057,-0.5517814777504622,0.49778314283978853,-0.2910724881500066,-0.018441033950336395,1.569507122039795 +518901,1,-0.14414687588004912,0.5285571507320932,0.8609661067912552,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.5613893220144716,1.492652416229248 +518901,2,0.2157901307843435,0.282992601310055,1.988138593674937,,,,,,,,,,,,,1.492652416229248 +518902,0,-1.27738176877165,-1.1157275859627156,-0.9586099692679761,-0.08409336463203088,1.0242044815289095,0.457405498335207,-0.518904276104527,-0.024870103381456905,-1.0510058129291326,-0.835055314390411,-1.740837916448057,-0.5517814777504622,0.49778314283978853,-0.2910724881500066,-0.4645232862317478,1.5729546546936035 +518902,1,-2.0665619600978182,-1.609546691104888,-0.568785015088508,,,,,,,,,,0.2373400917434395,-1.3914893931436731,1.1944719937511734,1.8468695878982544 +518902,2,-0.4729569847285068,-1.1183201738829107,-0.981944935899015,,,,,,,,,,,,,1.8468695878982544 +519801,0,-0.37378732919939306,-1.000669460045355,-0.8351539579881,0.06338537359139342,1.149922669419116,0.17294631652479245,-0.06274970256151263,-1.0493551392210523,-0.5571809115428055,0.36043714080320877,0.6182048363947807,0.28831555240026907,1.267782866548965,0.806708965813594,-0.24148216009104212,1.7691314220428467 +519801,1,-0.04802612166916067,-0.896845410492561,-1.1815354958941209,,,,,,,,,,0.9503768127628092,-0.3229291202479022,0.6927973321038463,2.267030715942383 +519801,2,-0.9649192100948284,-0.8847680446840831,-0.5319322799029617,,,,,,,,,,,,,2.267030715942383 +519902,0,1.7722494647847176,1.1854349323844948,0.2759501435307853,0.9482578029319392,1.149922669419116,0.457405498335207,-0.61013519081313,0.3969766760819059,0.2658605907677399,0.9581833684000187,0.6182048363947807,-0.5517814777504622,0.49778314283978853,1.9044904197771946,0.8737234706124865,1.9102308750152588 +519902,1,0.4325776493852816,0.7958201309617158,0.45246578625417994,,,,,,,,,,1.663413533782179,0.7456311526478686,1.1944719937511734,2.035806894302368 +519902,2,0.41257502093087217,0.5943954402418251,0.9981107504836196,,,,,,,,,,,,,2.035806894302368 +521202,0,1.207502940052057,0.3800280509629712,-0.2178739015887193,1.833130232272485,0.7727681057484966,0.7418646801456215,0.5758667003987075,0.6982958042700221,1.7473352949267216,1.5559295959968287,1.0113786285352542,0.28831555240026907,-1.0422163045785646,-1.388853942113607,1.9889291013160153,0.6334778070449829 +521202,1,0.52869840359617,0.5285571507320932,0.14609054585137357,,,,,,,,,,-1.1887333502953,0.7456311526478686,1.1944719937511734,0.8001985549926758 +521202,2,1.593284361810044,1.450753247304193,-0.441929748703751,,,,,,,,,,,,,0.8001985549926758 +525602,0,0.07800989058673549,0.3800280509629712,0.3994061548106614,-0.674008317525728,0.1441771662974643,0.17294631652479245,-0.7013661055217327,0.035393722256166354,-0.7217892120049145,0.9581833684000187,1.0113786285352542,-1.8119270229765592,-0.27221658086938805,-0.2910724881500066,-0.9106055385131593,1.4604709148406982 +525602,1,-0.04802612166916067,0.4394694906555523,0.24821562598564237,,,,,,,,,,-1.9017700713146695,-0.3229291202479022,-0.8122266528381351,1.761005163192749 +525602,2,-0.8665267650215641,-0.18411165708760024,-0.441929748703751,,,,,,,,,,,,,1.761005163192749 +525802,0,1.8851987697312496,1.875783687888658,1.6339662676094229,-0.23157210285545515,0.39561354207787724,-0.3959720470960366,0.3021739562728989,-1.3506742674091685,-0.5571809115428055,-0.835055314390411,-0.16814274788616518,-1.3918785079011935,-0.27221658086938805,-1.388853942113607,-0.24148216009104212,2.1569764614105225 +525802,1,3.1239587672901585,3.2011869530283197,1.2694664273283303,,,,,,,,,,-1.1887333502953,-0.3229291202479022,1.1944719937511734,2.2328760623931885 +525802,2,1.6916768068833083,1.5286039570371357,1.448123406479673,,,,,,,,,,,,,2.2328760623931885 +525901,0,-1.27738176877165,0.3800280509629712,0.15249413225090913,-0.674008317525728,0.2698953541876708,-0.3959720470960366,-1.7049061673163644,0.5777681529947757,-0.5571809115428055,1.5559295959968287,0.6182048363947807,0.7083640674756347,1.267782866548965,-1.388853942113607,-1.3566877907945707,1.9159194231033325 +525901,1,0.52869840359617,0.4394694906555523,-0.46665993495423924,,,,,,,,,,0.9503768127628092,-1.3914893931436731,-0.310551991190808,1.3199890851974487 +525901,2,-0.27617209458197817,0.5165447305088826,-1.7019651854927003,,,,,,,,,,,,,1.3199890851974487 +526501,0,-0.03493941435979663,1.3004930583018552,-0.7116979467082238,-1.2639232704194252,-2.2444684036164584,-2.671645501579353,-0.33644244668732126,0.035393722256166354,-1.3802224138533508,-0.835055314390411,-0.16814274788616518,0.7083640674756347,-0.27221658086938805,0.806708965813594,0.8737234706124865,2.424295663833618 +526501,1,-0.24026763009093757,0.4394694906555523,0.14609054585137357,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.310551991190808,2.4089431762695312 +526501,2,-0.27617209458197817,-0.028410237621715174,0.45809556328835566,,,,,,,,,,,,,2.4089431762695312 +527103,0,0.19095919553326762,-0.6554950822932735,-0.4647859241484716,-0.08409336463203088,0.39561354207787724,-0.1115128652856221,-0.2452115319787184,0.3367128504442826,-0.22796431061858732,0.36043714080320877,-2.13401170858853,-0.5517814777504622,-0.27221658086938805,0.806708965813594,-0.9106055385131593,0.711704671382904 +527103,1,-0.6247506469344914,-0.18414412988023388,-0.36453485481997044,,,,,,,,,,0.2373400917434395,-1.3914893931436731,-0.5613893220144716,0.41682755947113037 +527103,2,0.019005240637814846,0.04944047211122737,-0.6219348111021723,,,,,,,,,,,,,0.41682755947113037 +527202,0,-1.164432463825118,-1.1157275859627156,-0.9586099692679761,-0.23157210285545515,0.1441771662974643,-0.9648904107168657,1.3969449327761334,1.9035723170224874,0.10125229030563083,1.5559295959968287,0.22503104425430823,1.1284125825510003,-0.27221658086938805,-0.2910724881500066,0.20460009219036931,0.5689393877983093 +527202,1,-0.4325091385127145,-1.2531960507987243,-1.3857856561626585,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,0.4419600012801827,0.920964241027832 +527202,2,-0.4729569847285068,-1.2740215933487957,-0.8919424046998043,,,,,,,,,,,,,0.920964241027832 +527702,0,0.9816043301589925,1.4155511842192159,-0.09441789030884316,-0.23157210285545515,-0.7358501489339809,-1.5338087743376947,-1.339982508481953,-0.6275083597576895,-1.2156141133912417,-0.835055314390411,-0.5613165400266386,-0.5517814777504622,1.267782866548965,-1.388853942113607,0.8737234706124865,0.2301851361989975 +527702,1,1.0093021746506123,0.3503818305790114,-0.16028469455143282,,,,,,,,,,1.663413533782179,-1.3914893931436731,-0.310551991190808,0.5518285036087036 +527702,2,0.2157901307843435,0.282992601310055,0.18808796969072364,,,,,,,,,,,,,0.5518285036087036 +528604,0,0.3039085004797998,1.4155511842192159,1.016686211210042,-0.5265295793023037,-0.10725920948294862,0.457405498335207,-1.4312134231905558,-0.8685636623081825,-0.8863975124670236,-0.835055314390411,-1.3476641243075844,-1.3918785079011935,1.267782866548965,-1.388853942113607,-0.6875644123724536,1.4882373809814453 +528604,1,0.7209399120179469,0.6176448108086341,0.7588410266569864,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,-0.8122266528381351,1.320593237876892 +528604,2,0.7077523561506651,0.9057982791735953,0.9981107504836196,,,,,,,,,,,,,1.320593237876892 +528801,0,-0.14788871930632877,-0.5404369563759129,-0.4647859241484716,-0.5265295793023037,-0.10725920948294862,-0.1115128652856221,0.8495594445245161,1.120142583733385,-0.8863975124670236,0.36043714080320877,0.22503104425430823,0.28831555240026907,-0.27221658086938805,-0.2910724881500066,0.20460009219036931,2.0949621200561523 +528801,1,-0.33638838430182605,-0.9859330705691017,-0.05815961441716403,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-1.3139013144854623,2.2880661487579346 +528801,2,0.11739768571107917,-1.1183201738829107,0.09808543849151298,,,,,,,,,,,,,2.2880661487579346 +528802,0,0.4168578054263319,-0.6554950822932735,-0.5882419354283478,-0.5265295793023037,-0.10725920948294862,-0.1115128652856221,0.8495594445245161,1.120142583733385,-0.8863975124670236,0.36043714080320877,0.22503104425430823,0.28831555240026907,-1.812216028287741,-1.388853942113607,-0.6875644123724536,2.4253733158111572 +528802,1,0.048094632541727786,-0.4514071101098565,-0.16028469455143282,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,0.19112267045651915,2.438709259033203 +528802,2,1.3964994716635155,0.36084331104299755,0.2780905008899343,,,,,,,,,,,,,2.438709259033203 +529802,0,-0.03493941435979663,-1.1157275859627156,-0.9586099692679761,0.2108641118148177,0.018458978407257843,-0.1115128652856221,-0.7925970202303356,-0.748036011032936,-0.3925726110806964,-0.835055314390411,-0.16814274788616518,-0.13173296267509654,0.49778314283978853,-0.2910724881500066,3.104134732019544,1.295811653137207 +529802,1,0.6248191578070585,-1.3422837108752652,-1.8964110568340025,,,,,,,,,,0.9503768127628092,-0.3229291202479022,3.7028453019878094,1.2852725982666016 +529802,2,-0.27617209458197817,-0.8847680446840831,-0.17192215510611902,,,,,,,,,,,,,1.2852725982666016 +529804,0,-1.0514831588785858,-0.42537883045855246,-0.5882419354283478,0.2108641118148177,0.018458978407257843,-0.1115128652856221,-0.7925970202303356,-0.748036011032936,-0.3925726110806964,-0.835055314390411,-0.16814274788616518,-0.13173296267509654,0.49778314283978853,-0.2910724881500066,0.8737234706124865,1.6717422008514404 +529804,1,0.33645689517439314,-0.2732317899567748,-0.26240977468570165,,,,,,,,,,0.2373400917434395,-1.3914893931436731,1.1944719937511734,2.043483257293701 +529804,2,0.019005240637814846,0.282992601310055,1.3581208752804623,,,,,,,,,,,,,2.043483257293701 +530101,0,1.7722494647847176,-0.6554950822932735,-0.5882419354283478,0.5058215882616662,1.401359045199529,1.3107830437664505,0.4846357856901046,1.4817255375591245,0.7596854921540671,-0.835055314390411,-1.3476641243075844,-1.8119270229765592,0.49778314283978853,1.9044904197771946,-0.6875644123724536,1.93804132938385 +530101,1,1.2015436830723893,0.8849077910382567,1.5758416677311367,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.8122266528381351,2.031961441040039 +530101,2,-0.07938720443544948,1.8400067959689057,1.3581208752804623,,,,,,,,,,,,,2.031961441040039 +530802,0,-0.9385338539320537,-0.1952625786238314,-0.4647859241484716,-1.2639232704194252,-0.7358501489339809,-1.5338087743376947,0.11971212685569313,0.3367128504442826,-1.3802224138533508,-0.835055314390411,-1.3476641243075844,-0.9718299928258278,-1.0422163045785646,-0.2910724881500066,-1.133646664653865,1.208250641822815 +530802,1,-1.201475172199822,-0.5404947701863974,0.35034070611991114,,,,,,,,,,-1.1887333502953,0.7456311526478686,-0.8122266528381351,1.2235301733016968 +530802,2,-0.9649192100948284,-0.028410237621715174,0.09808543849151298,,,,,,,,,,,,,1.2235301733016968 +531401,0,0.4168578054263319,-0.5404369563759129,-0.8351539579881,-0.08409336463203088,0.6470499178582901,-0.6804312289064511,1.2144831033589276,0.3367128504442826,0.430468891229849,0.9581833684000187,0.22503104425430823,-0.9718299928258278,-1.0422163045785646,0.806708965813594,0.20460009219036931,2.03314471244812 +531401,1,-0.4325091385127145,0.08311885034938876,0.04396546571710477,,,,,,,,,,0.9503768127628092,1.8141914255436393,0.19112267045651915,1.9654545783996582 +531401,2,0.41257502093087217,0.9057982791735953,1.448123406479673,,,,,,,,,,,,,1.9654545783996582 +531402,0,0.8686550252124604,1.3004930583018552,-0.7116979467082238,-0.08409336463203088,0.6470499178582901,-0.6804312289064511,1.2144831033589276,0.3367128504442826,0.430468891229849,0.9581833684000187,0.22503104425430823,-0.9718299928258278,0.49778314283978853,0.806708965813594,-0.24148216009104212,1.9654545783996582 +531402,1,0.7209399120179469,1.330346091420961,1.0652162670597927,,,,,,,,,,-1.9017700713146695,-0.3229291202479022,-0.5613893220144716,2.0876882076263428 +531402,2,1.3964994716635155,2.2292603446336186,0.45809556328835566,,,,,,,,,,,,,2.0876882076263428 +531403,0,-0.14788871930632877,-1.000669460045355,-0.8351539579881,-0.08409336463203088,0.6470499178582901,-0.6804312289064511,1.2144831033589276,0.3367128504442826,0.430468891229849,0.9581833684000187,0.22503104425430823,-0.9718299928258278,0.49778314283978853,-0.2910724881500066,-0.4645232862317478,2.0876882076263428 +531403,1,0.6248191578070585,-0.3623194500333156,0.35034070611991114,,,,,,,,,,-1.9017700713146695,1.8141914255436393,-0.059714660367144415,2.0513575077056885 +531403,2,-0.07938720443544948,-1.040469464149968,0.18808796969072364,,,,,,,,,,,,,2.0513575077056885 +531701,0,0.19095919553326762,-0.1952625786238314,-0.5882419354283478,1.0957365411553635,0.8984862936387031,1.026323861956036,-0.06274970256151263,0.8790872811828919,-0.3925726110806964,0.9581833684000187,-0.16814274788616518,0.7083640674756347,0.49778314283978853,-1.388853942113607,3.104134732019544,0.20032857358455658 +531701,1,0.14421538675261625,0.17220651042592966,-0.16028469455143282,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,3.7028453019878094,0.861674964427948 +531701,2,1.4948919167367798,1.295051827838308,0.09808543849151298,,,,,,,,,,,,,0.861674964427948 +531702,0,-0.5996859390924573,0.2649699250456107,0.6463181773704137,1.0957365411553635,0.8984862936387031,1.026323861956036,-0.06274970256151263,0.8790872811828919,-0.3925726110806964,0.9581833684000187,-0.16814274788616518,0.7083640674756347,-1.0422163045785646,-1.388853942113607,3.104134732019544,0.861674964427948 +531702,1,1.1054229288615007,0.4394694906555523,0.5545908663884488,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,2.197821317045828,0.36438804864883423 +531702,2,1.1013221364437225,0.36084331104299755,0.368093032089145,,,,,,,,,,,,,0.36438804864883423 +531703,0,-1.164432463825118,-1.000669460045355,-0.8351539579881,1.0957365411553635,0.8984862936387031,1.026323861956036,-0.06274970256151263,0.8790872811828919,-0.3925726110806964,0.9581833684000187,-0.16814274788616518,0.7083640674756347,1.267782866548965,-0.2910724881500066,0.20460009219036931,1.036948323249817 +531703,1,0.4325776493852816,-0.6295824302629383,0.04396546571710477,,,,,,,,,,0.2373400917434395,-1.3914893931436731,-0.059714660367144415,0.8761987686157227 +531703,2,0.019005240637814846,-0.9626187544170256,-0.08191962390690835,,,,,,,,,,,,,0.8761987686157227 +531704,0,-0.9385338539320537,0.14991179912825014,0.5228621660905376,1.0957365411553635,0.8984862936387031,1.026323861956036,-0.06274970256151263,0.8790872811828919,-0.3925726110806964,0.9581833684000187,-0.16814274788616518,0.7083640674756347,-1.0422163045785646,-1.388853942113607,-0.24148216009104212,0.8761987686157227 +531704,1,-0.14414687588004912,0.7958201309617158,1.6779667478654055,,,,,,,,,,1.663413533782179,-1.3914893931436731,1.1944719937511734,0.5987393856048584 +531704,2,-0.6697418748750354,0.43869402077594005,0.45809556328835566,,,,,,,,,,,,,0.5987393856048584 +532502,0,-1.6162296836112464,-1.000669460045355,-0.8351539579881,1.833130232272485,1.2756408573093225,1.026323861956036,0.5758667003987075,0.8188234555452687,0.9242937926161762,0.36043714080320877,1.0113786285352542,0.28831555240026907,0.49778314283978853,0.806708965813594,-0.24148216009104212,2.8016469478607178 +532502,1,-2.0665619600978182,-1.2531960507987243,-1.6921608965654649,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,-0.5613893220144716,2.813255548477173 +532502,2,-0.37456453965524245,-0.028410237621715174,0.9981107504836196,,,,,,,,,,,,,2.813255548477173 +532601,0,-0.37378732919939306,-0.6554950822932735,-0.7116979467082238,1.9806089704959091,1.2756408573093225,0.7418646801456215,0.5758667003987075,-1.1096189648586756,1.7473352949267216,-0.23730908679360116,-0.9544903321671111,1.1284125825510003,0.49778314283978853,-0.2910724881500066,-0.4645232862317478,2.521341562271118 +532601,1,0.7209399120179469,0.3503818305790114,0.7588410266569864,,,,,,,,,,0.9503768127628092,-1.3914893931436731,-0.8122266528381351,2.5614264011383057 +532601,2,0.5109674660041365,1.1393504083724229,2.1681436560733585,,,,,,,,,,,,,2.5614264011383057 +532703,0,0.8686550252124604,1.5306093101365763,1.5105102563295467,1.390694017602212,0.7727681057484966,0.457405498335207,-0.42767336139592416,0.09565754789378961,0.10125229030563083,-0.23730908679360116,-0.16814274788616518,-0.13173296267509654,-1.0422163045785646,-0.2910724881500066,-0.4645232862317478,2.1451003551483154 +532703,1,1.0093021746506123,0.3503818305790114,1.0652162670597927,,,,,,,,,,-1.1887333502953,-1.3914893931436731,0.4419600012801827,1.419329047203064 +532703,2,2.085246587176366,0.5165447305088826,0.638100625686777,,,,,,,,,,,,,1.419329047203064 +532803,0,-1.27738176877165,-0.08020445270647089,-0.3413299128685955,-0.674008317525728,0.6470499178582901,0.7418646801456215,-0.7925970202303356,0.3367128504442826,-0.8863975124670236,-0.835055314390411,-0.9544903321671111,-0.13173296267509654,0.49778314283978853,-1.388853942113607,0.20460009219036931,2.995732307434082 +532803,1,-1.1053544179889336,-0.6295824302629383,0.04396546571710477,,,,,,,,,,0.2373400917434395,-1.3914893931436731,-0.310551991190808,2.2368743419647217 +532803,2,-0.8665267650215641,1.7621560862359633,0.2780905008899343,,,,,,,,,,,,,2.2368743419647217 +533002,0,-1.164432463825118,-0.6554950822932735,-0.7116979467082238,1.390694017602212,0.018458978407257843,1.026323861956036,0.8495594445245161,0.5175043273571525,-0.22796431061858732,0.36043714080320877,0.6182048363947807,-0.9718299928258278,1.267782866548965,-0.2910724881500066,-0.6875644123724536,1.3321164846420288 +533002,1,-1.393716680621599,-1.6986343511814288,-1.6921608965654649,,,,,,,,,,1.663413533782179,-0.3229291202479022,0.19112267045651915,1.5192925930023193 +533002,2,-0.1777796495087138,-0.9626187544170256,-0.7119373423013831,,,,,,,,,,,,,1.5192925930023193 +533003,0,0.7557057202659283,-0.6554950822932735,-0.7116979467082238,1.390694017602212,0.018458978407257843,1.026323861956036,0.8495594445245161,0.5175043273571525,-0.22796431061858732,0.36043714080320877,0.6182048363947807,-0.9718299928258278,1.267782866548965,-0.2910724881500066,-0.24148216009104212,1.5192925930023193 +533003,1,0.9131814204397238,-1.520459031028347,-1.8964110568340025,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.5613893220144716,1.5515263080596924 +533003,2,0.7077523561506651,-2.0525286906782214,-0.5319322799029617,,,,,,,,,,,,,1.5515263080596924 +533202,0,-1.0514831588785858,-1.000669460045355,-0.8351539579881,1.2432152793787876,0.8984862936387031,1.3107830437664505,1.3969449327761334,0.6982958042700221,1.2535103935403944,0.9581833684000187,-1.3476641243075844,0.28831555240026907,0.49778314283978853,-0.2910724881500066,1.9889291013160153,1.9641040563583374 +533202,1,0.048094632541727786,-0.7186700903394792,-0.9772853356255832,,,,,,,,,,1.663413533782179,-0.3229291202479022,1.1944719937511734,1.8754427433013916 +533202,2,-0.27617209458197817,-1.040469464149968,-0.5319322799029617,,,,,,,,,,,,,1.8754427433013916 +533802,0,-0.7126352440389895,-0.3103207045411919,-0.5882419354283478,-0.674008317525728,0.1441771662974643,1.026323861956036,-0.7925970202303356,-0.024870103381456905,-0.5571809115428055,-0.835055314390411,-0.9544903321671111,-0.13173296267509654,-1.0422163045785646,-0.2910724881500066,-0.9106055385131593,0.7794625759124756 +533802,1,-0.14414687588004912,-0.00596880972715211,0.35034070611991114,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.059714660367144415,0.7015773057937622 +533802,2,-0.37456453965524245,-0.8069173349511406,-0.35192721750454037,,,,,,,,,,,,,0.7015773057937622 +533902,0,-1.27738176877165,-1.000669460045355,-0.8351539579881,1.0957365411553635,1.149922669419116,1.026323861956036,0.028481212147090252,-0.8082998366705593,-0.06335601015647824,-0.23730908679360116,-0.9544903321671111,-1.3918785079011935,-0.27221658086938805,0.806708965813594,3.104134732019544,1.620639443397522 +533902,1,-0.7208714011453798,0.17220651042592966,0.35034070611991114,,,,,,,,,,-0.47569662927593015,0.7456311526478686,1.1944719937511734,1.6980055570602417 +533902,2,-0.07938720443544948,-0.18411165708760024,0.45809556328835566,,,,,,,,,,,,,1.6980055570602417 +534101,0,1.8851987697312496,-0.770553208210634,-0.8351539579881,1.833130232272485,0.7727681057484966,0.7418646801456215,0.7583285298159133,0.9393511068205153,1.9119435953888306,1.5559295959968287,0.22503104425430823,-0.13173296267509654,1.267782866548965,-0.2910724881500066,0.8737234706124865,2.442047595977783 +534101,1,-0.7208714011453798,0.5285571507320932,0.7588410266569864,,,,,,,,,,0.2373400917434395,-0.3229291202479022,1.1944719937511734,2.335604190826416 +534101,2,0.6093599110774008,0.7500968597077102,1.8981360624757264,,,,,,,,,,,,,2.335604190826416 +534103,0,0.3039085004797998,-0.6554950822932735,-0.7116979467082238,1.833130232272485,0.7727681057484966,0.7418646801456215,0.7583285298159133,0.9393511068205153,1.9119435953888306,1.5559295959968287,0.22503104425430823,-0.13173296267509654,0.49778314283978853,-0.2910724881500066,0.20460009219036931,2.7019448280334473 +534103,1,1.8743889625486083,0.2612941705024705,1.0652162670597927,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-1.0630639836617988,2.1744043827056885 +534103,2,1.593284361810044,0.7500968597077102,0.908108219284409,,,,,,,,,,,,,2.1744043827056885 +534901,0,-0.14788871930632877,0.6101443027976923,1.5105102563295467,0.5058215882616662,0.6470499178582901,1.026323861956036,0.3021739562728989,0.2161851991690361,-0.5571809115428055,-0.835055314390411,-0.9544903321671111,0.28831555240026907,0.49778314283978853,-1.388853942113607,-0.24148216009104212,1.6821200847625732 +534901,1,0.2403361409635047,1.0630831111913384,1.1673413471940615,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,-0.8122266528381351,1.8023717403411865 +534901,2,0.2157901307843435,0.9057982791735953,0.7281031568859877,,,,,,,,,,,,,1.8023717403411865 +536902,0,0.07800989058673549,-0.770553208210634,-0.4647859241484716,0.9482578029319392,0.2698953541876708,0.7418646801456215,0.8495594445245161,0.7585596299076455,0.9242937926161762,-0.835055314390411,-0.16814274788616518,-0.13173296267509654,-1.0422163045785646,0.806708965813594,0.8737234706124865,2.3146324157714844 +536902,1,0.14421538675261625,-0.6295824302629383,-0.568785015088508,,,,,,,,,,-1.1887333502953,0.7456311526478686,0.4419600012801827,1.7960983514785767 +536902,2,0.11739768571107917,0.43869402077594005,-0.26192468630532967,,,,,,,,,,,,,1.7960983514785767 +537301,0,0.3039085004797998,-1.1157275859627156,-0.9586099692679761,1.6856514940490606,1.2756408573093225,1.026323861956036,0.210943041564296,0.5777681529947757,1.7473352949267216,0.9581833684000187,1.4045524206757267,-0.9718299928258278,1.267782866548965,0.806708965813594,0.42764121833107505,1.3591210842132568 +537301,1,0.2403361409635047,0.5285571507320932,0.963091186925524,,,,,,,,,,0.9503768127628092,-0.3229291202479022,1.1944719937511734,-0.6931471824645996 +537301,2,0.31418257585760784,1.3729025375712505,0.09808543849151298,,,,,,,,,,,,,-0.6931471824645996 +537302,0,-0.2608380242528609,-1.1157275859627156,-0.9586099692679761,1.6856514940490606,1.2756408573093225,1.026323861956036,0.210943041564296,0.5777681529947757,1.7473352949267216,0.9581833684000187,1.4045524206757267,-0.9718299928258278,0.49778314283978853,-0.2910724881500066,0.8737234706124865,-0.6931471824645996 +537302,1,-0.528629892723603,0.6176448108086341,0.8609661067912552,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.8122266528381351,1.4927377700805664 +537302,2,0.2157901307843435,1.450753247304193,1.2681183440812516,,,,,,,,,,,,,1.4927377700805664 +537801,0,0.6427564153193962,1.1854349323844948,1.1401422224899183,-0.37905084107887943,0.018458978407257843,1.026323861956036,-0.7013661055217327,0.5175043273571525,-1.0510058129291326,-0.835055314390411,-1.740837916448057,0.7083640674756347,1.267782866548965,-0.2910724881500066,3.104134732019544,1.8637466430664062 +537801,1,0.7209399120179469,0.9739954511147976,0.963091186925524,,,,,,,,,,0.9503768127628092,0.7456311526478686,1.1944719937511734,1.799349069595337 +537801,2,-0.37456453965524245,0.04944047211122737,0.908108219284409,,,,,,,,,,,,,1.799349069595337 +537802,0,1.0945536351055247,-0.42537883045855246,-0.7116979467082238,-0.37905084107887943,0.018458978407257843,1.026323861956036,-0.7013661055217327,0.5175043273571525,-1.0510058129291326,-0.835055314390411,-1.740837916448057,0.7083640674756347,1.267782866548965,0.806708965813594,-0.24148216009104212,1.799349069595337 +537802,1,0.048094632541727786,-0.09505646980369299,-0.16028469455143282,,,,,,,,,,0.9503768127628092,0.7456311526478686,1.1944719937511734,1.574828028678894 +537802,2,-0.27617209458197817,0.5165447305088826,0.368093032089145,,,,,,,,,,,,,1.574828028678894 +538101,0,-0.14788871930632877,-1.000669460045355,-0.8351539579881,1.833130232272485,1.2756408573093225,1.026323861956036,1.2144831033589276,0.4572405017195292,1.2535103935403944,-0.23730908679360116,-0.5613165400266386,-1.3918785079011935,0.49778314283978853,-0.2910724881500066,-0.6875644123724536,0.5749320387840271 +538101,1,1.1054229288615007,0.4394694906555523,0.5545908663884488,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.059714660367144415,1.51552414894104 +538101,2,1.4948919167367798,-0.18411165708760024,0.7281031568859877,,,,,,,,,,,,,1.51552414894104 +538704,0,-1.164432463825118,-1.000669460045355,-0.8351539579881,0.9482578029319392,0.6470499178582901,0.7418646801456215,1.3969449327761334,-0.024870103381456905,0.7596854921540671,-0.23730908679360116,-0.9544903321671111,-0.5517814777504622,-1.0422163045785646,-0.2910724881500066,-0.9106055385131593,2.1656856536865234 +538704,1,0.4325776493852816,-0.4514071101098565,0.04396546571710477,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.5613893220144716,2.4984142780303955 +538704,2,0.11739768571107917,-0.028410237621715174,1.178115812882041,,,,,,,,,,,,,2.4984142780303955 +538902,0,1.9981480746777818,2.566132443392821,2.745070369128308,2.1280877087193333,1.401359045199529,0.7418646801456215,1.3057140180675306,1.120142583733385,1.4181186940025035,1.5559295959968287,1.7977262128162,1.1284125825510003,1.267782866548965,0.806708965813594,-0.24148216009104212,2.334052562713623 +538902,1,1.0093021746506123,1.419433751497502,1.0652162670597927,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.059714660367144415,2.4621527194976807 +538902,2,1.1997145815169867,1.0614996986394805,1.988138593674937,,,,,,,,,,,,,2.4621527194976807 +540801,0,-0.14788871930632877,1.5306093101365763,0.893230199930166,-0.08409336463203088,0.1441771662974643,-0.1115128652856221,-0.06274970256151263,-0.20566158029432668,-0.06335601015647824,0.9581833684000187,-0.16814274788616518,1.1284125825510003,0.49778314283978853,-0.2910724881500066,-0.4645232862317478,2.330476999282837 +540801,1,-0.528629892723603,2.6666609925690743,0.8609661067912552,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.5613893220144716,2.397448778152466 +540801,2,1.1013221364437225,2.0735589251677333,0.9981107504836196,,,,,,,,,,,,,2.397448778152466 +540802,0,0.19095919553326762,0.14991179912825014,-0.5882419354283478,-0.08409336463203088,0.1441771662974643,-0.1115128652856221,-0.06274970256151263,-0.20566158029432668,-0.06335601015647824,0.9581833684000187,-0.16814274788616518,1.1284125825510003,0.49778314283978853,-0.2910724881500066,-0.9106055385131593,-0.6931471824645996 +540802,1,0.048094632541727786,0.08311885034938876,0.35034070611991114,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.5613893220144716,-0.6931471824645996 +540802,2,-0.6697418748750354,-0.729066625218198,0.2780905008899343,,,,,,,,,,,,,-0.6931471824645996 +540902,0,-0.14788871930632877,0.14991179912825014,-0.4647859241484716,-0.9689657939725767,-0.10725920948294862,-0.1115128652856221,0.7583285298159133,-0.08513392901908017,-0.06335601015647824,-0.23730908679360116,-0.5613165400266386,-0.5517814777504622,1.267782866548965,0.806708965813594,0.42764121833107505,1.8687939643859863 +540902,1,-0.04802612166916067,-0.09505646980369299,1.0652162670597927,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.5613893220144716,1.8959037065505981 +540902,2,-0.1777796495087138,0.1272911818441699,-0.08191962390690835,,,,,,,,,,,,,1.8959037065505981 +542101,0,0.6427564153193962,2.6811905693101816,2.1277903127289273,1.2432152793787876,1.0242044815289095,0.7418646801456215,1.2144831033589276,1.0598787580957618,1.0889020930782853,0.36043714080320877,-0.16814274788616518,-0.13173296267509654,-1.0422163045785646,-1.388853942113607,-0.6875644123724536,1.903593897819519 +542101,1,0.6248191578070585,0.6176448108086341,0.5545908663884488,,,,,,,,,,-1.9017700713146695,-0.3229291202479022,-0.8122266528381351,2.060594320297241 +542101,2,1.0029296913704582,1.7621560862359633,0.9981107504836196,,,,,,,,,,,,,2.060594320297241 +542102,0,1.320452244998589,1.1854349323844948,1.8808782901691752,1.2432152793787876,1.0242044815289095,0.7418646801456215,1.2144831033589276,1.0598787580957618,1.0889020930782853,0.36043714080320877,-0.16814274788616518,-0.13173296267509654,-1.812216028287741,-0.2910724881500066,-0.6875644123724536,2.060594320297241 +542102,1,2.0666304709703853,0.08311885034938876,0.963091186925524,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-0.8122266528381351,1.8689616918563843 +542102,2,1.1013221364437225,-0.41766378628642786,1.8081335312765157,,,,,,,,,,,,,1.8689616918563843 +542103,0,-0.2608380242528609,-1.1157275859627156,-0.9586099692679761,1.2432152793787876,1.0242044815289095,0.7418646801456215,1.2144831033589276,1.0598787580957618,1.0889020930782853,0.36043714080320877,-0.16814274788616518,-0.13173296267509654,-1.0422163045785646,-1.388853942113607,-0.9106055385131593,1.8689616918563843 +542103,1,0.14421538675261625,-0.4514071101098565,0.14609054585137357,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.310551991190808,1.6324143409729004 +542103,2,1.1997145815169867,-0.028410237621715174,-0.08191962390690835,,,,,,,,,,,,,1.6324143409729004 +542104,0,0.529807110372864,1.4155511842192159,1.3870542450496706,1.2432152793787876,1.0242044815289095,0.7418646801456215,1.2144831033589276,1.0598787580957618,1.0889020930782853,0.36043714080320877,-0.16814274788616518,-0.13173296267509654,-0.27221658086938805,-0.2910724881500066,-0.4645232862317478,1.6324143409729004 +542104,1,1.1054229288615007,1.7757843918036655,0.963091186925524,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.8122266528381351,2.5439703464508057 +542104,2,1.1013221364437225,0.9057982791735953,0.638100625686777,,,,,,,,,,,,,2.5439703464508057 +542401,0,-1.164432463825118,-1.000669460045355,-0.8351539579881,1.833130232272485,1.401359045199529,1.026323861956036,1.3969449327761334,2.024099968297734,0.430468891229849,1.5559295959968287,1.7977262128162,1.9685096127017316,-1.0422163045785646,-1.388853942113607,-0.018441033950336395,1.7341290712356567 +542401,1,0.33645689517439314,-0.7186700903394792,-0.16028469455143282,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.5613893220144716,1.5220378637313843 +542401,2,0.11739768571107917,-0.4955144960193704,0.368093032089145,,,,,,,,,,,,,1.5220378637313843 +542402,0,-1.6162296836112464,-0.5404369563759129,-0.5882419354283478,1.833130232272485,1.401359045199529,1.026323861956036,1.3969449327761334,2.024099968297734,0.430468891229849,1.5559295959968287,1.7977262128162,1.9685096127017316,-0.27221658086938805,-0.2910724881500066,-0.9106055385131593,1.5220378637313843 +542402,1,-0.04802612166916067,3.023011632875238,0.5545908663884488,,,,,,,,,,-1.1887333502953,-0.3229291202479022,1.1944719937511734,2.2684428691864014 +542402,2,-0.4729569847285068,1.8400067959689057,-0.26192468630532967,,,,,,,,,,,,,2.2684428691864014 +542802,0,0.529807110372864,0.03485367321088963,0.5228621660905376,0.9482578029319392,0.1441771662974643,1.3107830437664505,0.5758667003987075,0.5777681529947757,0.595077191691958,-0.835055314390411,1.4045524206757267,-0.5517814777504622,-2.5822157519969178,0.806708965813594,0.20460009219036931,2.3881421089172363 +542802,1,1.970509716759497,0.6176448108086341,-0.568785015088508,,,,,,,,,,-1.9017700713146695,-0.3229291202479022,-0.5613893220144716,2.4024853706359863 +542802,2,1.1013221364437225,0.6722461499747677,0.18808796969072364,,,,,,,,,,,,,2.4024853706359863 +543602,0,-0.9385338539320537,-0.8856113341279945,-0.7116979467082238,-0.5265295793023037,-0.35869558526336154,0.7418646801456215,-0.9750588496475414,0.5777681529947757,-0.5571809115428055,-0.23730908679360116,1.4045524206757267,-0.13173296267509654,0.49778314283978853,-0.2910724881500066,0.20460009219036931,1.4566309452056885 +543602,1,-1.201475172199822,-1.431371370951806,-1.7942859766997337,,,,,,,,,,0.9503768127628092,-1.3914893931436731,0.4419600012801827,1.731703758239746 +543602,2,-1.752058770680943,-1.585424432280566,-2.061975310289543,,,,,,,,,,,,,1.731703758239746 +545202,0,0.529807110372864,0.7252024287150527,0.3994061548106614,-0.5265295793023037,0.39561354207787724,0.7418646801456215,-1.0662897643561442,-0.748036011032936,-0.7217892120049145,1.5559295959968287,1.7977262128162,-0.9718299928258278,0.49778314283978853,-1.388853942113607,-0.24148216009104212,1.6076711416244507 +545202,1,-0.4325091385127145,0.08311885034938876,-0.16028469455143282,,,,,,,,,,0.9503768127628092,-1.3914893931436731,0.4419600012801827,1.8481746912002563 +545202,2,-0.27617209458197817,0.5165447305088826,0.368093032089145,,,,,,,,,,,,,1.8481746912002563 +545301,0,-0.03493941435979663,-0.3103207045411919,-0.3413299128685955,-0.37905084107887943,-0.9872865247143939,0.457405498335207,1.3057140180675306,0.9996149324581385,-0.3925726110806964,1.5559295959968287,1.4045524206757267,-0.9718299928258278,-0.27221658086938805,-0.2910724881500066,0.8737234706124865,2.285598039627075 +545301,1,0.14421538675261625,-0.7186700903394792,-0.568785015088508,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.059714660367144415,2.249321699142456 +545301,2,-0.1777796495087138,-1.040469464149968,-0.981944935899015,,,,,,,,,,,,,2.249321699142456 +545402,0,0.07800989058673549,-0.6554950822932735,-0.2178739015887193,0.5058215882616662,-0.8615683368241874,-0.1115128652856221,0.5758667003987075,0.09565754789378961,-0.5571809115428055,-0.835055314390411,-0.16814274788616518,0.7083640674756347,0.49778314283978853,-0.2910724881500066,-0.24148216009104212,0.8298291563987732 +545402,1,-1.2975959264107106,-1.1641083907221836,-1.3857856561626585,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.5613893220144716,1.4760411977767944 +545402,2,-0.9649192100948284,-0.9626187544170256,-1.3419550606958577,,,,,,,,,,,,,1.4760411977767944 +546201,0,-0.03493941435979663,-0.42537883045855246,-0.3413299128685955,-0.9689657939725767,-0.7358501489339809,-1.5338087743376947,-0.7013661055217327,-0.989091313583429,-1.3802224138533508,-0.23730908679360116,-0.9544903321671111,0.7083640674756347,-1.0422163045785646,-1.388853942113607,-1.133646664653865,-0.6931471824645996 +546201,1,-0.8169921553562683,-0.80775775041602,-0.26240977468570165,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,-0.8122266528381351,0.30692094564437866 +546201,2,-0.4729569847285068,-0.2619623668205428,1.6281284688780944,,,,,,,,,,,,,0.30692094564437866 +546203,0,-1.5032803786647144,-1.1157275859627156,-0.9586099692679761,-0.9689657939725767,-0.7358501489339809,-1.5338087743376947,-0.7013661055217327,-0.989091313583429,-1.3802224138533508,-0.23730908679360116,-0.9544903321671111,0.7083640674756347,-1.0422163045785646,-1.388853942113607,-0.9106055385131593,0.30692094564437866 +546203,1,-0.04802612166916067,-1.431371370951806,-1.590035816431196,,,,,,,,,,0.2373400917434395,-1.3914893931436731,-0.8122266528381351,0.32178404927253723 +546203,2,-0.9649192100948284,-0.9626187544170256,-0.981944935899015,,,,,,,,,,,,,0.32178404927253723 +546401,0,-0.14788871930632877,1.645667436053937,1.757422278889299,-0.8214870557491524,-1.7415956520556326,-0.6804312289064511,-0.33644244668732126,-0.20566158029432668,-1.2156141133912417,0.9581833684000187,1.7977262128162,0.7083640674756347,-0.27221658086938805,-1.388853942113607,-0.4645232862317478,0.9276532530784607 +546401,1,-0.33638838430182605,0.8849077910382567,0.24821562598564237,,,,,,,,,,0.9503768127628092,-1.3914893931436731,-0.8122266528381351,0.8300344347953796 +546401,2,0.11739768571107917,1.450753247304193,1.988138593674937,,,,,,,,,,,,,0.8300344347953796 +546503,0,-1.164432463825118,-0.8856113341279945,-0.7116979467082238,-1.5588807468662738,-0.9872865247143939,-1.8182679561481092,-0.9750588496475414,-1.1096189648586756,-1.3802224138533508,0.9581833684000187,-0.5613165400266386,-0.5517814777504622,-2.5822157519969178,-1.388853942113607,0.20460009219036931,2.5901119709014893 +546503,1,-2.5471657311522606,-0.9859330705691017,-1.079410415759852,,,,,,,,,,0.9503768127628092,-1.3914893931436731,0.4419600012801827,0.37043458223342896 +546503,2,-3.6215152270729654,-0.8069173349511406,-1.9719727790903323,,,,,,,,,,,,,0.37043458223342896 +546704,0,-1.164432463825118,-0.08020445270647089,0.029038120971032973,-0.9689657939725767,-1.2387229004948068,-1.5338087743376947,-0.42767336139592416,-0.14539775465670343,-0.7217892120049145,-0.835055314390411,-0.5613165400266386,0.7083640674756347,-0.27221658086938805,-0.2910724881500066,-0.4645232862317478,0.3508932292461395 +546704,1,-1.9704412058869298,-0.2732317899567748,-1.079410415759852,,,,,,,,,,1.663413533782179,-0.3229291202479022,-0.8122266528381351,1.0138639211654663 +546704,2,-0.4729569847285068,-0.41766378628642786,-1.7019651854927003,,,,,,,,,,,,,1.0138639211654663 +546705,0,-1.5032803786647144,-1.000669460045355,-0.8351539579881,-0.9689657939725767,-1.2387229004948068,-1.5338087743376947,-0.42767336139592416,-0.14539775465670343,-0.7217892120049145,-0.835055314390411,-0.5613165400266386,0.7083640674756347,1.267782866548965,-0.2910724881500066,-0.018441033950336395,1.0138639211654663 +546705,1,-1.6820789432542644,-1.1641083907221836,-1.2836605760283897,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-1.3139013144854623,1.807160496711731 +546705,2,-3.3263378918531723,-1.6632751420135086,-1.791967716691911,,,,,,,,,,,,,1.807160496711731 +547702,0,0.7557057202659283,0.4950861768803317,0.5228621660905376,1.0957365411553635,0.7727681057484966,1.026323861956036,0.5758667003987075,0.5777681529947757,-0.5571809115428055,1.5559295959968287,0.22503104425430823,-0.5517814777504622,-1.0422163045785646,0.806708965813594,0.20460009219036931,1.8510314226150513 +547702,1,1.5860266999159431,0.6176448108086341,0.8609661067912552,,,,,,,,,,0.9503768127628092,0.7456311526478686,1.1944719937511734,2.1935653686523438 +547702,2,0.2157901307843435,0.20514189157711243,1.5381259376788836,,,,,,,,,,,,,2.1935653686523438 +548301,0,-0.2608380242528609,-1.000669460045355,-0.8351539579881,-0.23157210285545515,-1.2387229004948068,0.17294631652479245,-1.0662897643561442,0.15592137353141286,-0.3925726110806964,-0.23730908679360116,1.0113786285352542,0.7083640674756347,0.49778314283978853,-0.2910724881500066,-0.4645232862317478,1.4782636165618896 +548301,1,-0.04802612166916067,-0.80775775041602,-0.8751602554913144,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.5613893220144716,1.7960983514785767 +548301,2,0.11739768571107917,-1.1183201738829107,-0.981944935899015,,,,,,,,,,,,,1.7960983514785767 +548302,0,-0.03493941435979663,0.03485367321088963,0.029038120971032973,-0.23157210285545515,-1.2387229004948068,0.17294631652479245,-1.0662897643561442,0.15592137353141286,-0.3925726110806964,-0.23730908679360116,1.0113786285352542,0.7083640674756347,0.49778314283978853,-0.2910724881500066,-0.9106055385131593,1.8851572275161743 +548302,1,-0.04802612166916067,-0.2732317899567748,-0.6709100952227768,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-1.0630639836617988,2.0678865909576416 +548302,2,0.019005240637814846,0.1272911818441699,0.09808543849151298,,,,,,,,,,,,,2.0678865909576416 +549202,0,-1.164432463825118,-0.08020445270647089,-0.5882419354283478,-0.37905084107887943,0.6470499178582901,0.17294631652479245,0.028481212147090252,0.4572405017195292,-0.3925726110806964,-0.835055314390411,0.6182048363947807,-0.13173296267509654,-0.27221658086938805,-1.388853942113607,-0.24148216009104212,1.1296807527542114 +549202,1,-0.04802612166916067,-0.2732317899567748,0.35034070611991114,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,1.1944719937511734,1.1107271909713745 +549202,2,0.9045372462971938,-0.41766378628642786,-0.08191962390690835,,,,,,,,,,,,,1.1107271909713745 +552201,0,0.8686550252124604,0.8402605546324132,0.7697741886502898,1.0957365411553635,0.8984862936387031,0.457405498335207,0.028481212147090252,0.3367128504442826,0.595077191691958,0.9581833684000187,-0.16814274788616518,1.548461097626366,0.49778314283978853,-0.2910724881500066,-0.24148216009104212,1.352120280265808 +552201,1,-0.8169921553562683,0.17220651042592966,0.04396546571710477,,,,,,,,,,0.2373400917434395,0.7456311526478686,0.4419600012801827,1.5967020988464355 +552201,2,-0.07938720443544948,-0.33981307655348536,0.2780905008899343,,,,,,,,,,,,,1.5967020988464355 +552402,0,-0.48673663414592516,-0.6554950822932735,-0.8351539579881,-0.08409336463203088,0.6470499178582901,-0.3959720470960366,-0.42767336139592416,-0.024870103381456905,-0.7217892120049145,-0.835055314390411,-0.9544903321671111,1.9685096127017316,0.49778314283978853,-1.388853942113607,-0.6875644123724536,0.9487622380256653 +552402,1,0.14421538675261625,0.2612941705024705,0.6567159465227176,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.8122266528381351,1.017607569694519 +552402,2,-0.1777796495087138,-0.028410237621715174,0.18808796969072364,,,,,,,,,,,,,1.017607569694519 +552403,0,-0.14788871930632877,-1.1157275859627156,-0.9586099692679761,-0.08409336463203088,0.6470499178582901,-0.3959720470960366,-0.42767336139592416,-0.024870103381456905,-0.7217892120049145,-0.835055314390411,-0.9544903321671111,1.9685096127017316,-0.27221658086938805,-0.2910724881500066,-0.6875644123724536,1.017607569694519 +552403,1,-1.393716680621599,-1.8768096713345106,-1.7942859766997337,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-1.3139013144854623,0.886038064956665 +552403,2,-1.6536663256076787,-1.5075737225476233,-1.791967716691911,,,,,,,,,,,,,0.886038064956665 +552602,0,-0.03493941435979663,-0.42537883045855246,-0.4647859241484716,-1.2639232704194252,-0.9872865247143939,-0.3959720470960366,-0.8838279349389385,-0.3261892315695732,-1.2156141133912417,-0.23730908679360116,-0.9544903321671111,-0.13173296267509654,0.49778314283978853,0.806708965813594,-0.24148216009104212,1.419329047203064 +552602,1,0.9131814204397238,-0.896845410492561,-0.6709100952227768,,,,,,,,,,0.2373400917434395,-1.3914893931436731,-1.0630639836617988,1.3910000324249268 +552602,2,0.6093599110774008,-1.1183201738829107,-0.8019398735005937,,,,,,,,,,,,,1.3910000324249268 +552802,0,0.6427564153193962,2.566132443392821,1.757422278889299,-0.23157210285545515,0.018458978407257843,0.17294631652479245,-1.1575206790647472,-0.8685636623081825,-0.7217892120049145,-0.835055314390411,-0.5613165400266386,-0.9718299928258278,-1.0422163045785646,0.806708965813594,-0.24148216009104212,2.379955530166626 +552802,1,0.7209399120179469,1.8648720518802064,1.1673413471940615,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.310551991190808,2.52605938911438 +552802,2,1.6916768068833083,1.6843053765030207,1.3581208752804623,,,,,,,,,,,,,2.52605938911438 +554601,0,-0.03493941435979663,0.3800280509629712,0.15249413225090913,0.2108641118148177,-0.48441377315356804,0.457405498335207,0.3934048709815018,0.8188234555452687,-0.22796431061858732,-0.23730908679360116,-1.3476641243075844,-1.8119270229765592,1.267782866548965,0.806708965813594,0.42764121833107505,2.3760101795196533 +554601,1,1.1054229288615007,0.08311885034938876,0.8609661067912552,,,,,,,,,,1.663413533782179,0.7456311526478686,0.4419600012801827,2.614716053009033 +554601,2,0.5109674660041365,-0.41766378628642786,0.7281031568859877,,,,,,,,,,,,,2.614716053009033 +554602,0,0.6427564153193962,0.2649699250456107,0.2759501435307853,0.2108641118148177,-0.48441377315356804,0.457405498335207,0.3934048709815018,0.8188234555452687,-0.22796431061858732,-0.23730908679360116,-1.3476641243075844,-1.8119270229765592,1.267782866548965,0.806708965813594,-0.4645232862317478,2.511244297027588 +554602,1,0.8170606662288354,0.17220651042592966,0.14609054585137357,,,,,,,,,,1.663413533782179,1.8141914255436393,-0.310551991190808,2.5870413780212402 +554602,2,1.298107026590251,0.43869402077594005,0.008082907292302316,,,,,,,,,,,,,2.5870413780212402 +555301,0,0.19095919553326762,-0.42537883045855246,-0.4647859241484716,-0.674008317525728,-0.48441377315356804,-0.1115128652856221,-0.06274970256151263,0.4572405017195292,-0.22796431061858732,0.36043714080320877,0.22503104425430823,-1.8119270229765592,1.267782866548965,-0.2910724881500066,0.20460009219036931,2.5541508197784424 +555301,1,0.4325776493852816,-0.09505646980369299,0.35034070611991114,,,,,,,,,,1.663413533782179,0.7456311526478686,-0.8122266528381351,2.7815067768096924 +555301,2,1.4948919167367798,-0.4955144960193704,-0.08191962390690835,,,,,,,,,,,,,2.7815067768096924 +556002,0,-0.03493941435979663,-0.6554950822932735,-0.5882419354283478,0.2108641118148177,-0.8615683368241874,0.17294631652479245,1.4881758474847362,1.0598787580957618,-0.3925726110806964,1.5559295959968287,-0.9544903321671111,-0.13173296267509654,1.267782866548965,1.9044904197771946,-0.24148216009104212,1.5084161758422852 +556002,1,-0.24026763009093757,-0.2732317899567748,0.45246578625417994,,,,,,,,,,0.9503768127628092,-0.3229291202479022,1.1944719937511734,1.8620959520339966 +556002,2,-0.4729569847285068,-0.33981307655348536,-0.08191962390690835,,,,,,,,,,,,,1.8620959520339966 +558101,0,-0.7126352440389895,-0.6554950822932735,-0.7116979467082238,0.358342850038242,-1.2387229004948068,-0.9648904107168657,1.0320212739417218,0.2764490248066594,-0.22796431061858732,0.36043714080320877,-2.920359292869476,0.28831555240026907,0.49778314283978853,0.806708965813594,3.104134732019544,0.8191350698471069 +558101,1,-0.33638838430182605,-0.5404947701863974,-0.05815961441716403,,,,,,,,,,1.663413533782179,0.7456311526478686,0.19112267045651915,1.3222147226333618 +558101,2,-0.5713494298017712,-0.41766378628642786,-0.26192468630532967,,,,,,,,,,,,,1.3222147226333618 +558302,0,-1.5032803786647144,-1.3458438377974367,-1.2055219918277285,-0.674008317525728,0.2698953541876708,-1.2493495925272802,-1.9785989114421731,-0.6275083597576895,-1.2156141133912417,-0.23730908679360116,0.6182048363947807,-0.9718299928258278,-0.27221658086938805,-0.2910724881500066,-0.6875644123724536,1.824009656906128 +558302,1,-1.393716680621599,-0.9859330705691017,-0.26240977468570165,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.5613893220144716,1.7910857200622559 +558302,2,-0.4729569847285068,-0.10626094735465771,-0.35192721750454037,,,,,,,,,,,,,1.7910857200622559 +558904,0,-0.2608380242528609,-0.5404369563759129,-0.3413299128685955,-1.1164445321960008,-1.1130047126046003,-1.8182679561481092,0.210943041564296,-0.08513392901908017,-1.2156141133912417,-0.23730908679360116,-0.16814274788616518,-0.5517814777504622,0.49778314283978853,0.806708965813594,0.42764121833107505,0.8788071274757385 +558904,1,0.52869840359617,-1.520459031028347,0.35034070611991114,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.310551991190808,0.35801854729652405 +558904,2,0.11739768571107917,-1.1961708836158533,-0.7119373423013831,,,,,,,,,,,,,0.35801854729652405 +559602,0,0.07800989058673549,2.4510743174754603,0.893230199930166,2.1280877087193333,1.401359045199529,1.026323861956036,0.3021739562728989,1.5419893631967478,1.7473352949267216,0.9581833684000187,1.7977262128162,1.1284125825510003,0.49778314283978853,0.806708965813594,3.104134732019544,1.7915880680084229 +559602,1,1.0093021746506123,1.2412584313444202,0.8609661067912552,,,,,,,,,,0.2373400917434395,-0.3229291202479022,1.1944719937511734,2.2749412059783936 +559602,2,0.6093599110774008,1.8400067959689057,0.7281031568859877,,,,,,,,,,,,,2.2749412059783936 +560602,0,-0.03493941435979663,-0.42537883045855246,0.2759501435307853,-1.4114020086428494,-2.118750215726252,-0.9648904107168657,-1.24875159377335,-0.20566158029432668,-0.3925726110806964,0.36043714080320877,0.22503104425430823,0.28831555240026907,0.49778314283978853,-0.2910724881500066,-0.24148216009104212,1.8840749263763428 +560602,1,0.52869840359617,-0.3623194500333156,-0.6709100952227768,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.059714660367144415,1.0626540184020996 +560602,2,-0.4729569847285068,-0.6512159154852555,-0.8019398735005937,,,,,,,,,,,,,1.0626540184020996 +561203,0,0.6427564153193962,1.645667436053937,0.2759501435307853,0.06338537359139342,0.1441771662974643,0.457405498335207,-0.7925970202303356,0.5777681529947757,0.7596854921540671,0.36043714080320877,0.22503104425430823,-1.8119270229765592,-0.27221658086938805,0.806708965813594,-0.6875644123724536,1.4920862913131714 +561203,1,0.8170606662288354,1.0630831111913384,0.5545908663884488,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.310551991190808,1.477062702178955 +561203,2,-0.1777796495087138,0.36084331104299755,-0.35192721750454037,,,,,,,,,,,,,1.477062702178955 +561403,0,-0.03493941435979663,-1.1157275859627156,-0.9586099692679761,-1.4114020086428494,-0.6101319610437744,-0.6804312289064511,-1.6136752526077616,-1.2904104417715454,-0.8863975124670236,0.9581833684000187,-0.5613165400266386,-0.9718299928258278,0.49778314283978853,-0.2910724881500066,-0.6875644123724536,1.3793237209320068 +561403,1,0.33645689517439314,1.2412584313444202,0.45246578625417994,,,,,,,,,,-1.1887333502953,0.7456311526478686,-0.5613893220144716,1.7181367874145508 +561403,2,-0.6697418748750354,-0.8069173349511406,-0.5319322799029617,,,,,,,,,,,,,1.7181367874145508 +564802,0,-0.14788871930632877,0.3800280509629712,-0.09441789030884316,1.5381727558256364,1.2756408573093225,1.026323861956036,1.0320212739417218,1.120142583733385,1.0889020930782853,0.36043714080320877,0.22503104425430823,0.28831555240026907,-1.0422163045785646,-0.2910724881500066,-0.24148216009104212,1.3564748764038086 +564802,1,-0.33638838430182605,-0.09505646980369299,0.14609054585137357,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-0.5613893220144716,1.4489400386810303 +564802,2,1.1997145815169867,0.7500968597077102,0.18808796969072364,,,,,,,,,,,,,1.4489400386810303 +568602,0,1.7722494647847176,1.0703768064671344,-0.09441789030884316,1.6856514940490606,1.0242044815289095,1.026323861956036,-0.42767336139592416,0.2161851991690361,0.9242937926161762,1.5559295959968287,0.22503104425430823,-0.9718299928258278,1.267782866548965,-1.388853942113607,-1.133646664653865,2.3619370460510254 +568602,1,2.5472342420248277,2.0430473720332882,0.24821562598564237,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-1.3139013144854623,2.3894474506378174 +568602,2,1.6916768068833083,1.8400067959689057,-0.08191962390690835,,,,,,,,,,,,,2.3894474506378174 +568703,0,-1.3903310737181822,-1.3458438377974367,-1.2055219918277285,-0.5265295793023037,0.2698953541876708,-0.3959720470960366,0.3021739562728989,0.5777681529947757,-0.22796431061858732,0.36043714080320877,-0.9544903321671111,-2.2319755380519246,1.267782866548965,-1.388853942113607,-0.6875644123724536,0.8239643573760986 +568703,1,-2.4510449769413722,-1.8768096713345106,-1.6921608965654649,,,,,,,,,,0.9503768127628092,-1.3914893931436731,-0.5613893220144716,1.1057013273239136 +568703,2,-2.8343756664868507,-1.9746779809452786,-1.9719727790903323,,,,,,,,,,,,,1.1057013273239136 +569502,0,1.5463508548916531,0.14991179912825014,-0.2178739015887193,0.5058215882616662,0.7727681057484966,0.457405498335207,1.2144831033589276,0.3367128504442826,0.10125229030563083,1.5559295959968287,1.4045524206757267,1.1284125825510003,0.49778314283978853,1.9044904197771946,1.9889291013160153,2.995732307434082 +569502,1,1.2015436830723893,-0.18414412988023388,-0.568785015088508,,,,,,,,,,0.9503768127628092,1.8141914255436393,3.7028453019878094,2.995732307434082 +569502,2,1.3964994716635155,-0.4955144960193704,0.368093032089145,,,,,,,,,,,,,2.995732307434082 +570101,0,2.901742514250039,1.5306093101365763,1.3870542450496706,1.6856514940490606,0.6470499178582901,0.457405498335207,1.3969449327761334,1.9638361426601105,1.4181186940025035,-0.835055314390411,-0.16814274788616518,0.7083640674756347,-0.27221658086938805,1.9044904197771946,0.20460009219036931,2.662522554397583 +570101,1,2.3549927336030505,1.0630831111913384,1.882216908133943,,,,,,,,,,-1.1887333502953,0.7456311526478686,-0.059714660367144415,2.411360025405884 +570101,2,1.6916768068833083,0.04944047211122737,0.638100625686777,,,,,,,,,,,,,2.411360025405884 +571302,0,-0.48673663414592516,-1.1157275859627156,-0.9586099692679761,0.5058215882616662,0.39561354207787724,1.026323861956036,-0.33644244668732126,0.3367128504442826,-0.3925726110806964,-0.835055314390411,-0.9544903321671111,-1.8119270229765592,-1.0422163045785646,-0.2910724881500066,1.9889291013160153,1.4737372398376465 +571302,1,-0.33638838430182605,-0.9859330705691017,-1.2836605760283897,,,,,,,,,,0.2373400917434395,-1.3914893931436731,-0.310551991190808,1.721287727355957 +571302,2,-0.1777796495087138,-1.040469464149968,-0.35192721750454037,,,,,,,,,,,,,1.721287727355957 +571802,0,0.4168578054263319,1.5306093101365763,2.004334301449051,1.833130232272485,1.0242044815289095,-0.1115128652856221,-0.518904276104527,0.4572405017195292,1.4181186940025035,-0.835055314390411,0.6182048363947807,1.548461097626366,-1.0422163045785646,0.806708965813594,1.7658879751753094,2.0539581775665283 +571802,1,0.7209399120179469,0.7067324708851749,0.45246578625417994,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,1.1944719937511734,2.2158992290496826 +571802,2,1.0029296913704582,1.8400067959689057,0.638100625686777,,,,,,,,,,,,,2.2158992290496826 +572801,0,0.19095919553326762,1.4155511842192159,-0.09441789030884316,0.9482578029319392,-0.7358501489339809,0.457405498335207,0.3021739562728989,0.15592137353141286,0.9242937926161762,-0.835055314390411,0.6182048363947807,1.548461097626366,-0.27221658086938805,-1.388853942113607,0.8737234706124865,2.065486192703247 +572801,1,0.33645689517439314,0.7067324708851749,-0.16028469455143282,,,,,,,,,,-1.1887333502953,0.7456311526478686,-0.310551991190808,2.105905771255493 +572801,2,1.0029296913704582,2.0735589251677333,1.178115812882041,,,,,,,,,,,,,2.105905771255493 +572802,0,-0.8255845489855216,-0.3103207045411919,-0.7116979467082238,0.9482578029319392,-0.7358501489339809,0.457405498335207,0.3021739562728989,0.15592137353141286,0.9242937926161762,-0.835055314390411,0.6182048363947807,1.548461097626366,0.49778314283978853,-1.388853942113607,-0.6875644123724536,2.218092679977417 +572802,1,0.4325776493852816,-0.09505646980369299,0.14609054585137357,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,-0.059714660367144415,2.0627667903900146 +572802,2,0.019005240637814846,-0.33981307655348536,-0.08191962390690835,,,,,,,,,,,,,2.0627667903900146 +572803,0,1.0945536351055247,-0.1952625786238314,-0.2178739015887193,0.9482578029319392,-0.7358501489339809,0.457405498335207,0.3021739562728989,0.15592137353141286,0.9242937926161762,-0.835055314390411,0.6182048363947807,1.548461097626366,-0.27221658086938805,-1.388853942113607,-0.018441033950336395,2.0627667903900146 +572803,1,0.2403361409635047,0.08311885034938876,-0.26240977468570165,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-0.8122266528381351,2.2666268348693848 +572803,2,0.6093599110774008,0.1272911818441699,-0.6219348111021723,,,,,,,,,,,,,2.2666268348693848 +574003,0,-0.9385338539320537,-1.230785711880076,-1.0820659805478523,-1.2639232704194252,-1.9930320278360456,-2.102727137958524,-0.8838279349389385,-2.2546316519735177,-1.2156141133912417,-0.835055314390411,-0.9544903321671111,-1.3918785079011935,-1.0422163045785646,-1.388853942113607,-0.24148216009104212,1.674407958984375 +574003,1,-1.393716680621599,-1.431371370951806,-1.590035816431196,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.5613893220144716,0.06160171702504158 +574003,2,-0.4729569847285068,-0.8069173349511406,-0.5319322799029617,,,,,,,,,,,,,0.06160171702504158 +574004,0,-1.27738176877165,-1.000669460045355,-0.8351539579881,-1.2639232704194252,-1.9930320278360456,-2.102727137958524,-0.8838279349389385,-2.2546316519735177,-1.2156141133912417,-0.835055314390411,-0.9544903321671111,-1.3918785079011935,-0.27221658086938805,-0.2910724881500066,-0.6875644123724536,0.06160171702504158 +574004,1,-0.4325091385127145,0.17220651042592966,0.5545908663884488,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.310551991190808,0.06585076451301575 +574004,2,-0.37456453965524245,-0.18411165708760024,-0.17192215510611902,,,,,,,,,,,,,0.06585076451301575 +578002,0,-1.164432463825118,-1.1157275859627156,-0.9586099692679761,-0.37905084107887943,-0.6101319610437744,-1.5338087743376947,0.3934048709815018,-0.3261892315695732,-0.5571809115428055,-1.432801541987221,-0.16814274788616518,-0.13173296267509654,-0.27221658086938805,-1.388853942113607,-0.9106055385131593,2.110074996948242 +578002,1,-2.258803468519595,-1.6986343511814288,-1.9985361369682713,,,,,,,,,,0.2373400917434395,-1.3914893931436731,-0.8122266528381351,1.381113052368164 +578002,2,-2.5391983312670576,-1.741125851746451,-1.8819702478911218,,,,,,,,,,,,,1.381113052368164 +578103,0,-0.5996859390924573,-1.000669460045355,-0.8351539579881,-0.674008317525728,-1.7415956520556326,-0.9648904107168657,0.8495594445245161,0.8188234555452687,-1.3802224138533508,-0.835055314390411,-0.9544903321671111,0.28831555240026907,0.49778314283978853,-0.2910724881500066,-0.24148216009104212,0.9014517664909363 +578103,1,0.8170606662288354,1.5976090716505837,0.04396546571710477,,,,,,,,,,0.9503768127628092,-0.3229291202479022,0.4419600012801827,1.3199890851974487 +578103,2,1.0029296913704582,0.7500968597077102,0.45809556328835566,,,,,,,,,,,,,1.3199890851974487 +579802,0,-0.37378732919939306,-0.08020445270647089,0.15249413225090913,-0.674008317525728,-1.3644410883850133,-0.6804312289064511,0.6670976151073104,0.3367128504442826,-0.8863975124670236,-0.835055314390411,-0.16814274788616518,-0.5517814777504622,-0.27221658086938805,-1.388853942113607,-1.3566877907945707,2.424295663833618 +579802,1,-0.14414687588004912,0.7067324708851749,-0.6709100952227768,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-1.0630639836617988,2.379955530166626 +579802,2,0.2157901307843435,0.5943954402418251,0.908108219284409,,,,,,,,,,,,,2.379955530166626 +580202,0,1.6593001598381854,2.2209580656407395,2.2512463240088034,-0.37905084107887943,-0.35869558526336154,0.7418646801456215,0.5758667003987075,0.9393511068205153,0.595077191691958,0.36043714080320877,0.22503104425430823,-0.13173296267509654,-2.5822157519969178,0.806708965813594,0.20460009219036931,2.995732307434082 +580202,1,1.8743889625486083,1.7757843918036655,1.0652162670597927,,,,,,,,,,-1.1887333502953,0.7456311526478686,0.4419600012801827,2.8631370067596436 +580202,2,1.1013221364437225,1.0614996986394805,0.7281031568859877,,,,,,,,,,,,,2.8631370067596436 +580502,0,-1.27738176877165,-1.1157275859627156,-0.9586099692679761,-0.5265295793023037,0.6470499178582901,-0.1115128652856221,0.3934048709815018,0.09565754789378961,-0.7217892120049145,-0.835055314390411,-1.3476641243075844,-1.8119270229765592,-2.5822157519969178,-1.388853942113607,-0.6875644123724536,1.1934351921081543 +580502,1,-0.8169921553562683,-0.80775775041602,0.14609054585137357,,,,,,,,,,-1.9017700713146695,-1.3914893931436731,-0.8122266528381351,0.7815454006195068 +580502,2,-1.2600965453146213,-0.4955144960193704,-0.5319322799029617,,,,,,,,,,,,,0.7815454006195068 +580602,0,0.4168578054263319,0.3800280509629712,-0.4647859241484716,-1.2639232704194252,-1.9930320278360456,-2.671645501579353,-1.5224443378991586,-2.0135763494230243,-1.5448307143154598,-0.835055314390411,-0.5613165400266386,-0.5517814777504622,-0.27221658086938805,-1.388853942113607,-0.6875644123724536,2.2269363403320312 +580602,1,-0.14414687588004912,-0.80775775041602,-1.2836605760283897,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,-0.310551991190808,2.365140438079834 +580602,2,-0.8665267650215641,-0.573365205752313,-0.26192468630532967,,,,,,,,,,,,,2.365140438079834 +582001,0,-0.37378732919939306,-0.1952625786238314,0.15249413225090913,-0.674008317525728,-1.7415956520556326,-1.5338087743376947,-0.518904276104527,0.5175043273571525,-0.5571809115428055,-0.23730908679360116,-0.9544903321671111,0.28831555240026907,0.49778314283978853,-1.388853942113607,-0.6875644123724536,1.370970606803894 +582001,1,-1.585958189043376,-0.09505646980369299,0.24821562598564237,,,,,,,,,,0.9503768127628092,-1.3914893931436731,-0.8122266528381351,1.3560141324996948 +582001,2,0.2157901307843435,-0.41766378628642786,0.5480980944875663,,,,,,,,,,,,,1.3560141324996948 +583402,0,0.19095919553326762,-1.000669460045355,-0.8351539579881,-0.5265295793023037,0.2698953541876708,-0.1115128652856221,0.210943041564296,0.5777681529947757,0.9242937926161762,-0.23730908679360116,-0.9544903321671111,-0.5517814777504622,0.49778314283978853,0.806708965813594,0.8737234706124865,2.0745630264282227 +583402,1,-0.4325091385127145,-1.0750207306456427,0.45246578625417994,,,,,,,,,,1.663413533782179,0.7456311526478686,-0.8122266528381351,2.087902545928955 +583402,2,1.9868541421031014,1.0614996986394805,-0.981944935899015,,,,,,,,,,,,,2.087902545928955 +583403,0,-0.5996859390924573,-1.000669460045355,-0.8351539579881,-0.5265295793023037,0.2698953541876708,-0.1115128652856221,0.210943041564296,0.5777681529947757,0.9242937926161762,-0.23730908679360116,-0.9544903321671111,-0.5517814777504622,1.267782866548965,0.806708965813594,-0.24148216009104212,2.087902545928955 +583403,1,-0.4325091385127145,-0.80775775041602,-1.4879107362969273,,,,,,,,,,0.9503768127628092,0.7456311526478686,1.1944719937511734,1.8247941732406616 +583403,2,-0.1777796495087138,-0.41766378628642786,-0.8919424046998043,,,,,,,,,,,,,1.8247941732406616 +585503,0,1.4334015499451211,-0.42537883045855246,0.3994061548106614,-1.4114020086428494,-0.9872865247143939,-0.1115128652856221,-0.7925970202303356,-0.08513392901908017,-0.3925726110806964,-0.23730908679360116,-0.16814274788616518,-0.9718299928258278,-0.27221658086938805,-1.388853942113607,-1.133646664653865,1.5311859846115112 +585503,1,0.14421538675261625,1.419433751497502,0.7588410266569864,,,,,,,,,,0.2373400917434395,-1.3914893931436731,-1.0630639836617988,-0.38870376348495483 +585503,2,-0.7681343199482997,0.7500968597077102,-0.35192721750454037,,,,,,,,,,,,,-0.38870376348495483 +587302,0,-0.14788871930632877,-0.08020445270647089,3.362350425527689,0.6533003264850905,-0.10725920948294862,1.3107830437664505,0.8495594445245161,-0.26592540593194997,-0.22796431061858732,0.9581833684000187,1.7977262128162,0.7083640674756347,-1.0422163045785646,-0.2910724881500066,-0.9106055385131593,1.548222303390503 +587302,1,1.0093021746506123,1.330346091420961,1.2694664273283303,,,,,,,,,,-1.1887333502953,1.8141914255436393,-0.8122266528381351,2.268598794937134 +587302,2,0.019005240637814846,2.0735589251677333,0.45809556328835566,,,,,,,,,,,,,2.268598794937134 +587401,0,-0.2608380242528609,-1.1157275859627156,-0.9586099692679761,1.2432152793787876,0.7727681057484966,0.7418646801456215,0.3021739562728989,-0.14539775465670343,0.10125229030563083,0.36043714080320877,-0.9544903321671111,1.9685096127017316,1.267782866548965,-0.2910724881500066,-0.6875644123724536,1.3243086338043213 +587401,1,-0.4325091385127145,0.08311885034938876,-0.16028469455143282,,,,,,,,,,1.663413533782179,0.7456311526478686,-0.5613893220144716,1.8308147192001343 +587401,2,-0.07938720443544948,0.5165447305088826,0.2780905008899343,,,,,,,,,,,,,1.8308147192001343 +587402,0,-0.8255845489855216,-1.1157275859627156,-0.9586099692679761,1.2432152793787876,0.7727681057484966,0.7418646801456215,0.3021739562728989,-0.14539775465670343,0.10125229030563083,0.36043714080320877,-0.9544903321671111,1.9685096127017316,1.267782866548965,0.806708965813594,-0.9106055385131593,1.8308147192001343 +587402,1,-0.8169921553562683,-1.3422837108752652,-1.4879107362969273,,,,,,,,,,1.663413533782179,0.7456311526478686,-0.310551991190808,2.0786983966827393 +587402,2,0.31418257585760784,-1.741125851746451,-1.1619499982974364,,,,,,,,,,,,,2.0786983966827393 +589701,0,-1.27738176877165,-1.000669460045355,-0.8351539579881,-0.5265295793023037,-0.35869558526336154,0.457405498335207,-0.1539806172701155,-0.3261892315695732,0.10125229030563083,0.36043714080320877,0.6182048363947807,-1.3918785079011935,-1.0422163045785646,-0.2910724881500066,-0.9106055385131593,1.1348247528076172 +589701,1,-1.8743204516760412,-1.8768096713345106,-1.6921608965654649,,,,,,,,,,0.2373400917434395,0.7456311526478686,-1.0630639836617988,1.1791380643844604 +589701,2,-1.5552738805344144,-2.130379400411164,-2.061975310289543,,,,,,,,,,,,,1.1791380643844604 +589702,0,-1.9550775984508428,-0.6554950822932735,-0.4647859241484716,-0.5265295793023037,-0.35869558526336154,0.457405498335207,-0.1539806172701155,-0.3261892315695732,0.10125229030563083,0.36043714080320877,0.6182048363947807,-1.3918785079011935,-0.27221658086938805,0.806708965813594,-1.133646664653865,1.1791380643844604 +589702,1,0.6248191578070585,-1.2531960507987243,-1.079410415759852,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-1.0630639836617988,1.2548483610153198 +589702,2,-0.07938720443544948,-0.8847680446840831,-0.6219348111021723,,,,,,,,,,,,,1.2548483610153198 +590902,0,0.4168578054263319,-0.5404369563759129,-0.4647859241484716,-0.5265295793023037,-0.7358501489339809,-0.6804312289064511,0.6670976151073104,-0.14539775465670343,-0.7217892120049145,0.36043714080320877,0.6182048363947807,-0.13173296267509654,-0.27221658086938805,3.002271873740795,0.8737234706124865,1.8555349111557007 +590902,1,-0.528629892723603,-0.00596880972715211,-0.16028469455143282,,,,,,,,,,-0.47569662927593015,0.7456311526478686,1.1944719937511734,2.1316261291503906 +590902,2,0.11739768571107917,0.36084331104299755,-0.35192721750454037,,,,,,,,,,,,,2.1316261291503906 +591601,0,-0.37378732919939306,-0.08020445270647089,0.2759501435307853,-0.08409336463203088,0.018458978407257843,0.7418646801456215,0.3021739562728989,0.2764490248066594,-0.5571809115428055,0.9581833684000187,-0.16814274788616518,-1.8119270229765592,-1.812216028287741,0.806708965813594,0.20460009219036931,0.2639169692993164 +591601,1,-0.7208714011453798,0.7067324708851749,0.6567159465227176,,,,,,,,,,-0.47569662927593015,0.7456311526478686,0.4419600012801827,1.5301461219787598 +591601,2,-0.7681343199482997,0.1272911818441699,0.2780905008899343,,,,,,,,,,,,,1.5301461219787598 +591902,0,0.529807110372864,1.3004930583018552,1.5105102563295467,-1.4114020086428494,0.2698953541876708,-1.2493495925272802,-1.0662897643561442,-0.4467168828448197,-1.3802224138533508,0.36043714080320877,-0.5613165400266386,1.9685096127017316,1.267782866548965,0.806708965813594,0.8737234706124865,2.3900279998779297 +591902,1,0.4325776493852816,1.1521707712678793,1.1673413471940615,,,,,,,,,,0.2373400917434395,-0.3229291202479022,0.19112267045651915,2.8932981491088867 +591902,2,0.6093599110774008,0.7500968597077102,1.448123406479673,,,,,,,,,,,,,2.8932981491088867 +591903,0,-0.14788871930632877,-0.770553208210634,-0.7116979467082238,-1.4114020086428494,0.2698953541876708,-1.2493495925272802,-1.0662897643561442,-0.4467168828448197,-1.3802224138533508,0.36043714080320877,-0.5613165400266386,1.9685096127017316,-0.27221658086938805,-0.2910724881500066,0.42764121833107505,2.8932981491088867 +591903,1,0.52869840359617,-0.00596880972715211,0.45246578625417994,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.310551991190808,2.995732307434082 +591903,2,1.1013221364437225,-0.028410237621715174,0.368093032089145,,,,,,,,,,,,,2.995732307434082 +593203,0,-0.37378732919939306,0.9553186805497738,0.893230199930166,-1.5588807468662738,-1.2387229004948068,-0.6804312289064511,-1.1575206790647472,-1.3506742674091685,-1.2156141133912417,0.9581833684000187,0.6182048363947807,0.28831555240026907,0.49778314283978853,1.9044904197771946,-0.4645232862317478,1.346407413482666 +593203,1,0.52869840359617,1.1521707712678793,-0.7730351753570456,,,,,,,,,,1.663413533782179,1.8141914255436393,0.4419600012801827,0.36564069986343384 +593203,2,-0.1777796495087138,1.606454666770078,0.8181056880851983,,,,,,,,,,,,,0.36564069986343384 +593205,0,0.19095919553326762,0.2649699250456107,0.893230199930166,-1.5588807468662738,-1.2387229004948068,-0.6804312289064511,-1.1575206790647472,-1.3506742674091685,-1.2156141133912417,0.9581833684000187,0.6182048363947807,0.28831555240026907,0.49778314283978853,3.002271873740795,-0.4645232862317478,1.129593014717102 +593205,1,0.52869840359617,1.330346091420961,0.04396546571710477,,,,,,,,,,0.2373400917434395,1.8141914255436393,-0.310551991190808,0.8435264229774475 +593205,2,0.5109674660041365,0.6722461499747677,0.18808796969072364,,,,,,,,,,,,,0.8435264229774475 +593206,0,-1.5032803786647144,-0.770553208210634,-0.7116979467082238,-1.5588807468662738,-1.2387229004948068,-0.6804312289064511,-1.1575206790647472,-1.3506742674091685,-1.2156141133912417,0.9581833684000187,0.6182048363947807,0.28831555240026907,1.267782866548965,1.9044904197771946,-0.4645232862317478,0.8435264229774475 +593206,1,-1.2975959264107106,0.17220651042592966,-0.7730351753570456,,,,,,,,,,-1.1887333502953,1.8141914255436393,-0.059714660367144415,0.9625706076622009 +593206,2,1.7900692519565728,-0.4955144960193704,0.09808543849151298,,,,,,,,,,,,,0.9625706076622009 +596503,0,2.224046684570846,-0.3103207045411919,-0.2178739015887193,-0.08409336463203088,-0.10725920948294862,-0.1115128652856221,-0.7013661055217327,-0.9288274879458058,-0.3925726110806964,-0.835055314390411,1.0113786285352542,-0.9718299928258278,-1.0422163045785646,-0.2910724881500066,0.8737234706124865,0.5046901702880859 +596503,1,0.7209399120179469,-0.2732317899567748,-0.36453485481997044,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.8122266528381351,0.515326201915741 +596503,2,0.2157901307843435,-1.1183201738829107,-1.1619499982974364,,,,,,,,,,,,,0.515326201915741 +596504,0,0.6427564153193962,-0.42537883045855246,-0.09441789030884316,-0.08409336463203088,-0.10725920948294862,-0.1115128652856221,-0.7013661055217327,-0.9288274879458058,-0.3925726110806964,-0.835055314390411,1.0113786285352542,-0.9718299928258278,0.49778314283978853,-1.388853942113607,-0.24148216009104212,0.5744010210037231 +596504,1,0.048094632541727786,-0.00596880972715211,0.5545908663884488,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-1.0630639836617988,0.6086905598640442 +596504,2,1.0029296913704582,-0.4955144960193704,-0.35192721750454037,,,,,,,,,,,,,0.6086905598640442 +596901,0,-0.2608380242528609,-0.08020445270647089,0.6463181773704137,-0.8214870557491524,-0.6101319610437744,-0.9648904107168657,-0.42767336139592416,-0.14539775465670343,-0.7217892120049145,-0.835055314390411,0.6182048363947807,-0.13173296267509654,-1.0422163045785646,1.9044904197771946,-1.133646664653865,2.6014037132263184 +596901,1,0.4325776493852816,-0.18414412988023388,-0.46665993495423924,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.8122266528381351,2.689476251602173 +596901,2,0.31418257585760784,-0.8069173349511406,0.18808796969072364,,,,,,,,,,,,,2.689476251602173 +596902,0,-0.03493941435979663,-0.3103207045411919,-0.2178739015887193,-0.8214870557491524,-0.6101319610437744,-0.9648904107168657,-0.42767336139592416,-0.14539775465670343,-0.7217892120049145,-0.835055314390411,0.6182048363947807,-0.13173296267509654,0.49778314283978853,-0.2910724881500066,-1.133646664653865,2.689476251602173 +596902,1,2.258871979392162,-0.2732317899567748,-1.1815354958941209,,,,,,,,,,0.2373400917434395,1.8141914255436393,-1.0630639836617988,2.7112207412719727 +596902,2,0.11739768571107917,-0.6512159154852555,-2.2419803726879644,,,,,,,,,,,,,2.7112207412719727 +598301,0,1.4334015499451211,3.601655576649066,2.4981583465685557,0.06338537359139342,0.2698953541876708,0.7418646801456215,0.6670976151073104,0.3367128504442826,-0.3925726110806964,0.36043714080320877,-0.16814274788616518,1.1284125825510003,0.49778314283978853,0.806708965813594,-0.24148216009104212,1.7538639307022095 +598301,1,0.048094632541727786,1.330346091420961,0.7588410266569864,,,,,,,,,,0.2373400917434395,0.7456311526478686,-1.0630639836617988,1.8305209875106812 +598301,2,0.7077523561506651,2.307111054366561,0.5480980944875663,,,,,,,,,,,,,1.8305209875106812 +599801,0,1.320452244998589,-0.3103207045411919,-0.09441789030884316,-1.2639232704194252,-0.48441377315356804,0.7418646801456215,-0.06274970256151263,0.09565754789378961,-0.7217892120049145,-3.8237864523744607,-2.13401170858853,0.28831555240026907,-0.27221658086938805,0.806708965813594,-0.9106055385131593,0.2557781934738159 +599801,1,0.14421538675261625,-0.09505646980369299,0.24821562598564237,,,,,,,,,,-0.47569662927593015,2.88275169843941,-0.8122266528381351,-0.6859223246574402 +599801,2,1.1013221364437225,0.36084331104299755,0.368093032089145,,,,,,,,,,,,,-0.6859223246574402 +599804,0,0.4168578054263319,-0.42537883045855246,-0.3413299128685955,-1.2639232704194252,-0.48441377315356804,0.7418646801456215,-0.06274970256151263,0.09565754789378961,-0.7217892120049145,-3.8237864523744607,-2.13401170858853,0.28831555240026907,0.49778314283978853,-0.2910724881500066,-0.9106055385131593,1.0626540184020996 +599804,1,-0.04802612166916067,-1.0750207306456427,-1.3857856561626585,,,,,,,,,,0.2373400917434395,-1.3914893931436731,-1.0630639836617988,1.348159909248352 +599804,2,-0.7681343199482997,-1.040469464149968,-2.331982903887175,,,,,,,,,,,,,1.348159909248352 +600302,0,-0.37378732919939306,0.6101443027976923,0.6463181773704137,-0.5265295793023037,0.018458978407257843,0.457405498335207,-0.2452115319787184,-2.0135763494230243,-0.7217892120049145,0.36043714080320877,1.7977262128162,1.1284125825510003,-0.27221658086938805,0.806708965813594,-0.6875644123724536,0.476981520652771 +600302,1,0.14421538675261625,-0.00596880972715211,0.35034070611991114,,,,,,,,,,0.9503768127628092,1.8141914255436393,-0.8122266528381351,0.5827696919441223 +600302,2,-0.37456453965524245,-0.18411165708760024,1.448123406479673,,,,,,,,,,,,,0.5827696919441223 +600402,0,-0.7126352440389895,-0.770553208210634,-0.7116979467082238,-1.8538382233131223,-1.2387229004948068,-1.5338087743376947,-2.4347534849851873,-2.435423128886387,-1.5448307143154598,0.36043714080320877,-1.3476641243075844,-0.13173296267509654,-1.0422163045785646,-0.2910724881500066,-0.4645232862317478,0.2958257496356964 +600402,1,-1.2975959264107106,-0.9859330705691017,-0.9772853356255832,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.310551991190808,0.7504386305809021 +600402,2,-0.4729569847285068,-0.9626187544170256,-0.35192721750454037,,,,,,,,,,,,,0.7504386305809021 +600702,0,-0.8255845489855216,-1.1157275859627156,-0.9586099692679761,-0.9689657939725767,-2.370186591506665,-2.102727137958524,-1.9785989114421731,-1.8327848725101548,-1.3802224138533508,-2.030547769584031,-0.5613165400266386,-0.13173296267509654,0.49778314283978853,-1.388853942113607,-0.9106055385131593,0.28899428248405457 +600702,1,-2.4510449769413722,-2.054984991487592,-2.10066121710254,,,,,,,,,,0.9503768127628092,-1.3914893931436731,0.4419600012801827,0.12503963708877563 +600702,2,-2.1456285509740005,-2.3639315296099914,-1.791967716691911,,,,,,,,,,,,,0.12503963708877563 +600703,0,-1.164432463825118,-1.1157275859627156,-0.9586099692679761,-0.9689657939725767,-2.370186591506665,-2.102727137958524,-1.9785989114421731,-1.8327848725101548,-1.3802224138533508,-2.030547769584031,-0.5613165400266386,-0.13173296267509654,0.49778314283978853,-1.388853942113607,-0.24148216009104212,0.12503963708877563 +600703,1,-1.0092336637780452,-1.6986343511814288,-1.9985361369682713,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.5613893220144716,-0.6931471824645996 +600703,2,-1.5552738805344144,-2.208230110144106,-2.061975310289543,,,,,,,,,,,,,-0.6931471824645996 +602201,0,-0.8255845489855216,-0.42537883045855246,-0.09441789030884316,-0.23157210285545515,-0.35869558526336154,-0.6804312289064511,-0.7013661055217327,-1.4109380930467919,-0.7217892120049145,1.5559295959968287,1.0113786285352542,-0.13173296267509654,-1.0422163045785646,-0.2910724881500066,-0.6875644123724536,0.7928871512413025 +602201,1,-0.528629892723603,-0.896845410492561,-1.2836605760283897,,,,,,,,,,0.9503768127628092,0.7456311526478686,0.4419600012801827,1.413444995880127 +602201,2,-1.0633116551680928,-0.729066625218198,-0.7119373423013831,,,,,,,,,,,,,1.413444995880127 +602302,0,-0.03493941435979663,0.03485367321088963,0.7697741886502898,-0.9689657939725767,-0.6101319610437744,-0.3959720470960366,-0.7013661055217327,-0.024870103381456905,-0.3925726110806964,0.9581833684000187,1.7977262128162,1.548461097626366,0.49778314283978853,1.9044904197771946,-0.4645232862317478,2.0511155128479004 +602302,1,-1.6820789432542644,-0.896845410492561,-1.3857856561626585,,,,,,,,,,0.9503768127628092,1.8141914255436393,-0.059714660367144415,1.4819979667663574 +602302,2,-0.27617209458197817,-1.040469464149968,-0.441929748703751,,,,,,,,,,,,,1.4819979667663574 +602801,0,-1.27738176877165,0.3800280509629712,0.3994061548106614,-0.5265295793023037,0.2698953541876708,-0.3959720470960366,-0.33644244668732126,-0.4467168828448197,-0.3925726110806964,-0.835055314390411,-0.5613165400266386,0.7083640674756347,-1.0422163045785646,-0.2910724881500066,-0.4645232862317478,1.3843635320663452 +602801,1,-0.9131129095671567,-0.00596880972715211,-1.2836605760283897,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.8122266528381351,0.8499670624732971 +602801,2,-0.4729569847285068,0.1272911818441699,-0.6219348111021723,,,,,,,,,,,,,0.8499670624732971 +603001,0,-0.37378732919939306,1.4155511842192159,0.3994061548106614,-1.2639232704194252,-1.615877464165426,-1.8182679561481092,-1.7049061673163644,-0.5672445341200663,-0.7217892120049145,-0.23730908679360116,0.22503104425430823,0.7083640674756347,-0.27221658086938805,-0.2910724881500066,-0.4645232862317478,0.4148796796798706 +603001,1,-1.0092336637780452,1.1521707712678793,0.7588410266569864,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.8122266528381351,0.9603295922279358 +603001,2,-0.5713494298017712,0.5165447305088826,0.45809556328835566,,,,,,,,,,,,,0.9603295922279358 +604803,0,-0.8255845489855216,-0.42537883045855246,-0.7116979467082238,0.2108641118148177,-0.2329773973731551,-0.1115128652856221,-0.2452115319787184,-0.5069807084824429,-0.7217892120049145,0.9581833684000187,0.22503104425430823,-1.8119270229765592,-1.0422163045785646,-0.2910724881500066,1.9889291013160153,1.4314398765563965 +604803,1,-0.24026763009093757,-0.5404947701863974,-0.9772853356255832,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.5613893220144716,1.5159953832626343 +604803,2,-0.1777796495087138,-0.41766378628642786,-0.08191962390690835,,,,,,,,,,,,,1.5159953832626343 +604804,0,1.320452244998589,0.7252024287150527,1.8808782901691752,0.2108641118148177,-0.2329773973731551,-0.1115128652856221,-0.2452115319787184,-0.5069807084824429,-0.7217892120049145,0.9581833684000187,0.22503104425430823,-1.8119270229765592,-0.27221658086938805,-0.2910724881500066,-0.4645232862317478,1.5159953832626343 +604804,1,0.6248191578070585,0.7067324708851749,0.35034070611991114,,,,,,,,,,1.663413533782179,0.7456311526478686,1.6961466553985005,1.3793237209320068 +604804,2,-0.1777796495087138,0.5165447305088826,0.2780905008899343,,,,,,,,,,,,,1.3793237209320068 +604902,0,0.07800989058673549,0.7252024287150527,0.5228621660905376,-0.9689657939725767,-0.35869558526336154,-0.6804312289064511,-1.0662897643561442,-0.6275083597576895,-0.5571809115428055,-0.23730908679360116,-0.16814274788616518,-0.5517814777504622,-0.27221658086938805,-0.2910724881500066,-0.018441033950336395,1.1417871713638306 +604902,1,-0.7208714011453798,-0.00596880972715211,0.45246578625417994,,,,,,,,,,1.663413533782179,0.7456311526478686,-0.5613893220144716,0.35801854729652405 +604902,2,-0.5713494298017712,0.20514189157711243,0.5480980944875663,,,,,,,,,,,,,0.35801854729652405 +605301,0,0.4168578054263319,0.03485367321088963,0.3994061548106614,-0.37905084107887943,0.5213317299680837,0.457405498335207,-0.8838279349389385,-0.20566158029432668,-0.22796431061858732,0.36043714080320877,0.6182048363947807,-0.5517814777504622,-0.27221658086938805,-1.388853942113607,-0.6875644123724536,1.8788477182388306 +605301,1,0.52869840359617,2.9339239727986968,-0.8751602554913144,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,-0.8122266528381351,1.7980340719223022 +605301,2,0.11739768571107917,0.5943954402418251,0.908108219284409,,,,,,,,,,,,,1.7980340719223022 +605302,0,0.07800989058673549,0.4950861768803317,0.029038120971032973,-0.37905084107887943,0.5213317299680837,0.457405498335207,-0.8838279349389385,-0.20566158029432668,-0.22796431061858732,0.36043714080320877,0.6182048363947807,-0.5517814777504622,-1.0422163045785646,-1.388853942113607,-0.9106055385131593,1.7980340719223022 +605302,1,0.14421538675261625,0.3503818305790114,-0.46665993495423924,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.5613893220144716,1.5084161758422852 +605302,2,0.5109674660041365,0.8279475694406527,0.45809556328835566,,,,,,,,,,,,,1.5084161758422852 +606602,0,-0.8255845489855216,-0.5404369563759129,-0.4647859241484716,-0.674008317525728,0.2698953541876708,0.457405498335207,1.1232521886503248,0.2764490248066594,-0.5571809115428055,1.5559295959968287,1.0113786285352542,1.1284125825510003,0.49778314283978853,0.806708965813594,-0.24148216009104212,0.5799852609634399 +606602,1,0.33645689517439314,0.5285571507320932,0.35034070611991114,,,,,,,,,,0.9503768127628092,2.88275169843941,-0.5613893220144716,0.4412984848022461 +606602,2,0.11739768571107917,1.3729025375712505,0.008082907292302316,,,,,,,,,,,,,0.4412984848022461 +606904,0,-0.8255845489855216,-0.770553208210634,-0.4647859241484716,-1.2639232704194252,-1.1130047126046003,-0.6804312289064511,-2.3435225702765847,-2.073840175060648,-1.0510058129291326,0.36043714080320877,-0.16814274788616518,1.1284125825510003,-1.812216028287741,-1.388853942113607,-0.6875644123724536,0.6944908499717712 +606904,1,0.14421538675261625,-1.6986343511814288,-0.46665993495423924,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-1.3139013144854623,0.657188892364502 +606904,2,0.31418257585760784,-1.1183201738829107,-0.35192721750454037,,,,,,,,,,,,,0.657188892364502 +611404,0,-0.9385338539320537,-0.8856113341279945,-0.7116979467082238,-1.4114020086428494,-1.2387229004948068,-0.6804312289064511,-0.7013661055217327,-0.5069807084824429,-1.0510058129291326,0.36043714080320877,0.6182048363947807,0.7083640674756347,-1.812216028287741,-0.2910724881500066,-1.3566877907945707,1.360993504524231 +611404,1,-1.393716680621599,-0.896845410492561,-0.6709100952227768,,,,,,,,,,-1.9017700713146695,-1.3914893931436731,-0.5613893220144716,1.6333134174346924 +611404,2,-1.2600965453146213,-0.6512159154852555,-1.251952529496647,,,,,,,,,,,,,1.6333134174346924 +611902,0,-1.0514831588785858,-0.770553208210634,-0.2178739015887193,-0.8214870557491524,-1.4901592762752198,-2.671645501579353,-1.7049061673163644,-0.5672445341200663,-1.3802224138533508,-0.23730908679360116,1.0113786285352542,-0.13173296267509654,-0.27221658086938805,-1.388853942113607,-0.24148216009104212,1.9770625829696655 +611902,1,-2.5471657311522606,-1.3422837108752652,-1.6921608965654649,,,,,,,,,,1.663413533782179,-1.3914893931436731,-0.059714660367144415,1.7056697607040405 +611902,2,-3.0311605566333792,-1.6632751420135086,-1.8819702478911218,,,,,,,,,,,,,1.7056697607040405 +616103,0,-0.37378732919939306,1.645667436053937,0.893230199930166,-0.9689657939725767,-0.10725920948294862,0.7418646801456215,-1.6136752526077616,0.2161851991690361,-1.7094390147775689,-0.23730908679360116,-0.16814274788616518,-0.9718299928258278,-2.5822157519969178,-0.2910724881500066,-0.6875644123724536,0.07124947011470795 +616103,1,0.4325776493852816,1.330346091420961,0.45246578625417994,,,,,,,,,,-1.9017700713146695,-0.3229291202479022,-0.8122266528381351,0.36558976769447327 +616103,2,1.593284361810044,1.450753247304193,1.8081335312765157,,,,,,,,,,,,,0.36558976769447327 +616104,0,0.07800989058673549,0.8402605546324132,0.7697741886502898,-0.9689657939725767,-0.10725920948294862,0.7418646801456215,-1.6136752526077616,0.2161851991690361,-1.7094390147775689,-0.23730908679360116,-0.16814274788616518,-0.9718299928258278,-2.5822157519969178,-1.388853942113607,-1.3566877907945707,-0.027706654742360115 +616104,1,0.52869840359617,0.7067324708851749,1.371591507462599,,,,,,,,,,0.2373400917434395,-1.3914893931436731,-1.0630639836617988,0.7418388724327087 +616104,2,0.11739768571107917,0.5165447305088826,0.18808796969072364,,,,,,,,,,,,,0.7418388724327087 +616303,0,0.07800989058673549,0.7252024287150527,0.6463181773704137,-0.08409336463203088,0.7727681057484966,1.026323861956036,-0.61013519081313,-0.8685636623081825,-0.7217892120049145,0.9581833684000187,0.6182048363947807,-1.3918785079011935,0.49778314283978853,1.9044904197771946,0.20460009219036931,2.747105360031128 +616303,1,0.6248191578070585,-0.18414412988023388,1.2694664273283303,,,,,,,,,,0.2373400917434395,0.7456311526478686,1.1944719937511734,1.9204952716827393 +616303,2,1.4948919167367798,0.1272911818441699,0.368093032089145,,,,,,,,,,,,,1.9204952716827393 +616402,0,-0.2608380242528609,0.6101443027976923,-0.09441789030884316,0.06338537359139342,-0.35869558526336154,0.457405498335207,-0.518904276104527,-1.5314657443220383,-0.06335601015647824,0.36043714080320877,0.22503104425430823,-0.13173296267509654,-1.0422163045785646,-1.388853942113607,-1.133646664653865,1.7856541872024536 +616402,1,0.048094632541727786,0.17220651042592966,-0.16028469455143282,,,,,,,,,,-1.9017700713146695,-1.3914893931436731,0.4419600012801827,2.26259708404541 +616402,2,-0.27617209458197817,0.20514189157711243,-1.791967716691911,,,,,,,,,,,,,2.26259708404541 +616801,0,0.529807110372864,0.8402605546324132,0.2759501435307853,-0.23157210285545515,-0.9872865247143939,-0.9648904107168657,0.8495594445245161,0.3367128504442826,-0.5571809115428055,-0.23730908679360116,-0.9544903321671111,-0.13173296267509654,0.49778314283978853,1.9044904197771946,-0.4645232862317478,0.49949711561203003 +616801,1,0.52869840359617,0.08311885034938876,-0.26240977468570165,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.5613893220144716,0.7651342749595642 +616801,2,0.8061448012239295,2.151409634900676,-2.5119879662855964,,,,,,,,,,,,,0.7651342749595642 +618101,0,-0.2608380242528609,-0.770553208210634,0.6463181773704137,-0.674008317525728,-1.1130047126046003,-0.3959720470960366,-1.24875159377335,-1.712257221234908,-1.2156141133912417,-0.23730908679360116,0.6182048363947807,0.28831555240026907,-1.0422163045785646,0.806708965813594,3.104134732019544,0.0770183652639389 +618101,1,0.14421538675261625,-1.2531960507987243,-0.9772853356255832,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.059714660367144415,0.29251447319984436 +618101,2,-0.27617209458197817,-1.429723012814681,-0.981944935899015,,,,,,,,,,,,,0.29251447319984436 +619501,0,-0.14788871930632877,0.4950861768803317,0.6463181773704137,-0.23157210285545515,-0.10725920948294862,-0.9648904107168657,-0.33644244668732126,-0.024870103381456905,-0.8863975124670236,0.9581833684000187,1.4045524206757267,0.28831555240026907,0.49778314283978853,0.806708965813594,-0.9106055385131593,1.1110920906066895 +619501,1,0.7209399120179469,0.4394694906555523,0.35034070611991114,,,,,,,,,,-1.1887333502953,0.7456311526478686,-0.8122266528381351,1.1107271909713745 +619501,2,-0.07938720443544948,-0.573365205752313,-0.08191962390690835,,,,,,,,,,,,,1.1107271909713745 +621001,0,-0.03493941435979663,0.03485367321088963,-0.09441789030884316,-0.8214870557491524,-1.867313839945839,-1.8182679561481092,1.0320212739417218,-0.5069807084824429,-0.3925726110806964,-0.835055314390411,-0.16814274788616518,-0.13173296267509654,0.49778314283978853,-0.2910724881500066,-1.133646664653865,0.4804854989051819 +621001,1,0.52869840359617,0.8849077910382567,0.8609661067912552,,,,,,,,,,0.2373400917434395,-1.3914893931436731,-0.8122266528381351,0.6160309314727783 +621001,2,-0.5713494298017712,1.295051827838308,-0.35192721750454037,,,,,,,,,,,,,0.6160309314727783 +621002,0,0.529807110372864,1.3004930583018552,0.7697741886502898,-0.8214870557491524,-1.867313839945839,-1.8182679561481092,1.0320212739417218,-0.5069807084824429,-0.3925726110806964,-0.835055314390411,-0.16814274788616518,-0.13173296267509654,-0.27221658086938805,0.806708965813594,-1.3566877907945707,0.002994222566485405 +621002,1,0.2403361409635047,3.023011632875238,0.04396546571710477,,,,,,,,,,0.2373400917434395,0.7456311526478686,-1.3139013144854623,0.7253972887992859 +621002,2,-0.37456453965524245,0.20514189157711243,-0.35192721750454037,,,,,,,,,,,,,0.7253972887992859 +621501,0,-0.2608380242528609,-0.3103207045411919,-0.2178739015887193,-0.37905084107887943,0.1441771662974643,0.457405498335207,1.1232521886503248,1.9035723170224874,0.10125229030563083,0.9581833684000187,0.22503104425430823,-1.3918785079011935,0.49778314283978853,1.9044904197771946,-0.9106055385131593,2.0724709033966064 +621501,1,0.4325776493852816,-0.09505646980369299,-0.26240977468570165,,,,,,,,,,0.2373400917434395,0.7456311526478686,0.4419600012801827,2.184756278991699 +621501,2,-0.4729569847285068,-0.10626094735465771,-0.8919424046998043,,,,,,,,,,,,,2.184756278991699 +621701,0,-1.164432463825118,-0.42537883045855246,-0.2178739015887193,-1.2639232704194252,-1.1130047126046003,-2.3871863197689382,0.028481212147090252,-0.3261892315695732,-0.8863975124670236,-1.432801541987221,-1.740837916448057,-0.13173296267509654,-1.0422163045785646,-1.388853942113607,0.8737234706124865,-0.6931471824645996 +621701,1,1.2976644372832777,-0.2732317899567748,0.5545908663884488,,,,,,,,,,0.2373400917434395,-0.3229291202479022,3.7028453019878094,-0.2773612141609192 +621701,2,0.11739768571107917,0.282992601310055,0.09808543849151298,,,,,,,,,,,,,-0.2773612141609192 +623503,0,0.529807110372864,-0.42537883045855246,-0.2178739015887193,0.5058215882616662,0.6470499178582901,-0.1115128652856221,1.4881758474847362,0.3367128504442826,-0.22796431061858732,-0.835055314390411,-0.16814274788616518,-0.13173296267509654,-2.5822157519969178,-0.2910724881500066,-1.3566877907945707,2.2989680767059326 +623503,1,0.2403361409635047,-0.09505646980369299,0.35034070611991114,,,,,,,,,,-1.9017700713146695,0.7456311526478686,-1.3139013144854623,2.2646894454956055 +623503,2,0.019005240637814846,1.6843053765030207,-0.7119373423013831,,,,,,,,,,,,,2.2646894454956055 +624302,0,0.6427564153193962,-0.42537883045855246,-0.09441789030884316,-0.5265295793023037,-0.7358501489339809,-1.2493495925272802,-0.518904276104527,0.6380319786323989,-0.7217892120049145,1.5559295959968287,0.6182048363947807,-0.5517814777504622,0.49778314283978853,1.9044904197771946,-0.4645232862317478,-0.6931471824645996 +624302,1,-0.7208714011453798,-1.2531960507987243,-0.7730351753570456,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.5613893220144716,0.15324164927005768 +624302,2,-0.6697418748750354,-0.8069173349511406,-0.981944935899015,,,,,,,,,,,,,0.15324164927005768 +624401,0,-0.48673663414592516,0.14991179912825014,0.2759501435307853,0.8007790647085149,-0.2329773973731551,-0.1115128652856221,0.3934048709815018,0.15592137353141286,0.9242937926161762,1.5559295959968287,1.0113786285352542,0.7083640674756347,-0.27221658086938805,0.806708965813594,1.9889291013160153,0.9525032043457031 +624401,1,0.2403361409635047,-0.2732317899567748,0.24821562598564237,,,,,,,,,,0.9503768127628092,1.8141914255436393,-0.059714660367144415,0.7845523953437805 +624401,2,0.31418257585760784,0.36084331104299755,-1.251952529496647,,,,,,,,,,,,,0.7845523953437805 +625502,0,0.3039085004797998,0.3800280509629712,-0.09441789030884316,-0.08409336463203088,0.2698953541876708,0.17294631652479245,0.3021739562728989,-0.6275083597576895,0.10125229030563083,1.5559295959968287,1.0113786285352542,0.28831555240026907,-0.27221658086938805,1.9044904197771946,-0.6875644123724536,1.153459906578064 +625502,1,0.048094632541727786,0.17220651042592966,-1.1815354958941209,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.5613893220144716,1.340333342552185 +625502,2,-0.5713494298017712,-0.10626094735465771,-0.7119373423013831,,,,,,,,,,,,,1.340333342552185 +627701,0,-0.48673663414592516,0.03485367321088963,0.5228621660905376,-1.5588807468662738,0.6470499178582901,0.17294631652479245,-0.7013661055217327,-0.26592540593194997,-0.8863975124670236,0.9581833684000187,1.4045524206757267,-0.9718299928258278,0.49778314283978853,-0.2910724881500066,-0.4645232862317478,2.069667100906372 +627701,1,0.2403361409635047,0.7067324708851749,0.8609661067912552,,,,,,,,,,0.9503768127628092,-0.3229291202479022,0.19112267045651915,2.2015633583068848 +627701,2,-0.1777796495087138,0.1272911818441699,-0.8919424046998043,,,,,,,,,,,,,2.2015633583068848 +627702,0,-1.164432463825118,-0.42537883045855246,-0.4647859241484716,-1.5588807468662738,0.6470499178582901,0.17294631652479245,-0.7013661055217327,-0.26592540593194997,-0.8863975124670236,0.9581833684000187,1.4045524206757267,-0.9718299928258278,0.49778314283978853,-0.2910724881500066,-0.24148216009104212,2.363544464111328 +627702,1,-0.33638838430182605,-0.7186700903394792,-0.8751602554913144,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.310551991190808,2.400158405303955 +627702,2,-0.7681343199482997,-0.729066625218198,-0.5319322799029617,,,,,,,,,,,,,2.400158405303955 +627801,0,0.07800989058673549,0.6101443027976923,0.7697741886502898,0.5058215882616662,0.6470499178582901,1.026323861956036,0.6670976151073104,0.2161851991690361,1.2535103935403944,0.9581833684000187,1.7977262128162,0.7083640674756347,-1.0422163045785646,-0.2910724881500066,0.20460009219036931,1.5408765077590942 +627801,1,-0.04802612166916067,-0.18414412988023388,0.45246578625417994,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.059714660367144415,1.6456503868103027 +627801,2,-0.4729569847285068,0.04944047211122737,0.638100625686777,,,,,,,,,,,,,1.6456503868103027 +628202,0,0.3039085004797998,-1.1157275859627156,-0.9586099692679761,-1.2639232704194252,-0.7358501489339809,-0.1115128652856221,-1.4312134231905558,-0.9288274879458058,-0.8863975124670236,-0.835055314390411,-0.16814274788616518,-0.13173296267509654,0.49778314283978853,0.806708965813594,-0.018441033950336395,0.7081189155578613 +628202,1,-2.3549242227304834,-1.3422837108752652,-1.9985361369682713,,,,,,,,,,0.2373400917434395,2.88275169843941,0.9436346629275099,0.7893117666244507 +628202,2,-0.9649192100948284,-1.3518723030817383,-1.1619499982974364,,,,,,,,,,,,,0.7893117666244507 +629001,0,-1.164432463825118,-0.8856113341279945,-0.7116979467082238,-0.9689657939725767,-1.1130047126046003,-1.2493495925272802,-0.8838279349389385,-0.5672445341200663,-0.5571809115428055,-0.23730908679360116,-0.16814274788616518,-0.9718299928258278,-0.27221658086938805,-1.388853942113607,-0.6875644123724536,0.3993598520755768 +629001,1,-0.9131129095671567,-1.431371370951806,-1.3857856561626585,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-1.0630639836617988,0.8571066856384277 +629001,2,-0.7681343199482997,-1.1183201738829107,-1.0719474670982256,,,,,,,,,,,,,0.8571066856384277 +629304,0,-0.8255845489855216,-0.8856113341279945,-0.5882419354283478,-1.8538382233131223,-0.8615683368241874,-1.8182679561481092,-2.1610607408593787,-2.616214605799257,-1.3802224138533508,-0.835055314390411,-0.16814274788616518,-0.9718299928258278,-0.27221658086938805,-0.2910724881500066,-0.24148216009104212,0.4781186580657959 +629304,1,-0.9131129095671567,-1.609546691104888,-1.2836605760283897,,,,,,,,,,0.2373400917434395,1.8141914255436393,1.1944719937511734,0.9142692685127258 +629304,2,-1.4568814354611501,-1.741125851746451,-0.7119373423013831,,,,,,,,,,,,,0.9142692685127258 +629703,0,-1.27738176877165,-1.000669460045355,-0.8351539579881,-0.5265295793023037,-1.4901592762752198,-1.8182679561481092,-2.6172153144023933,-2.2546316519735177,-1.0510058129291326,-0.23730908679360116,-1.3476641243075844,0.7083640674756347,-1.0422163045785646,-0.2910724881500066,-0.9106055385131593,0.30569419264793396 +629703,1,-1.4898374348324874,-2.054984991487592,-1.8964110568340025,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-0.8122266528381351,0.4649827182292938 +629703,2,-1.2600965453146213,-2.286080819877049,-2.5119879662855964,,,,,,,,,,,,,0.4649827182292938 +629901,0,1.4334015499451211,1.9908418138060184,2.745070369128308,-0.674008317525728,1.0242044815289095,0.17294631652479245,0.028481212147090252,0.15592137353141286,-0.06335601015647824,1.5559295959968287,1.0113786285352542,1.1284125825510003,0.49778314283978853,1.9044904197771946,0.8737234706124865,1.8984321355819702 +629901,1,1.5860266999159431,1.330346091420961,1.371591507462599,,,,,,,,,,0.9503768127628092,1.8141914255436393,-0.059714660367144415,2.1498022079467773 +629901,2,1.7900692519565728,1.606454666770078,1.3581208752804623,,,,,,,,,,,,,2.1498022079467773 +629902,0,0.6427564153193962,1.0703768064671344,2.3747023352886796,-0.674008317525728,1.0242044815289095,0.17294631652479245,0.028481212147090252,0.15592137353141286,-0.06335601015647824,1.5559295959968287,1.0113786285352542,1.1284125825510003,1.267782866548965,1.9044904197771946,-0.6875644123724536,2.1498022079467773 +629902,1,0.8170606662288354,1.5976090716505837,1.1673413471940615,,,,,,,,,,1.663413533782179,-0.3229291202479022,-0.310551991190808,1.9784197807312012 +629902,2,0.8061448012239295,1.450753247304193,2.528153780870201,,,,,,,,,,,,,1.9784197807312012 +631101,0,-1.27738176877165,-0.6554950822932735,-0.7116979467082238,1.833130232272485,0.39561354207787724,0.7418646801456215,0.3021739562728989,0.09565754789378961,1.5827269944646125,0.9581833684000187,0.6182048363947807,1.1284125825510003,-1.0422163045785646,0.806708965813594,-0.24148216009104212,0.9568647742271423 +631101,1,-0.24026763009093757,-1.431371370951806,-1.3857856561626585,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.310551991190808,0.8141009211540222 +631101,2,-0.6697418748750354,-1.5075737225476233,-1.521960123094279,,,,,,,,,,,,,0.8141009211540222 +631201,0,-0.03493941435979663,0.3800280509629712,0.2759501435307853,-0.674008317525728,-1.3644410883850133,-1.2493495925272802,-0.518904276104527,0.6982958042700221,-1.5448307143154598,0.36043714080320877,-0.9544903321671111,-0.13173296267509654,-0.27221658086938805,0.806708965813594,-0.6875644123724536,-0.20245274901390076 +631201,1,0.4325776493852816,0.3503818305790114,0.45246578625417994,,,,,,,,,,0.9503768127628092,0.7456311526478686,-1.0630639836617988,0.20032857358455658 +631201,2,-0.1777796495087138,0.43869402077594005,0.45809556328835566,,,,,,,,,,,,,0.20032857358455658 +631203,0,-0.2608380242528609,0.14991179912825014,0.15249413225090913,-0.674008317525728,-1.3644410883850133,-1.2493495925272802,-0.518904276104527,0.6982958042700221,-1.5448307143154598,0.36043714080320877,-0.9544903321671111,-0.13173296267509654,-1.0422163045785646,-0.2910724881500066,-0.9106055385131593,0.8465985655784607 +631203,1,0.52869840359617,0.7067324708851749,-0.16028469455143282,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.8122266528381351,1.1644368171691895 +631203,2,-0.07938720443544948,0.282992601310055,0.18808796969072364,,,,,,,,,,,,,1.1644368171691895 +632206,0,-0.9385338539320537,-0.5404369563759129,-0.5882419354283478,-0.8214870557491524,0.2698953541876708,0.17294631652479245,0.4846357856901046,0.3367128504442826,0.2658605907677399,-0.23730908679360116,-0.16814274788616518,-0.5517814777504622,0.49778314283978853,0.806708965813594,0.20460009219036931,1.7113808393478394 +632206,1,-1.2975959264107106,-0.9859330705691017,-0.8751602554913144,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-0.8122266528381351,1.4756414890289307 +632206,2,-0.7681343199482997,-0.729066625218198,0.18808796969072364,,,,,,,,,,,,,1.4756414890289307 +632704,0,-0.5996859390924573,-0.1952625786238314,0.15249413225090913,-1.5588807468662738,-1.3644410883850133,-0.9648904107168657,-1.1575206790647472,-0.38645305720719647,-1.0510058129291326,-1.432801541987221,-0.16814274788616518,-0.5517814777504622,-1.0422163045785646,-1.388853942113607,0.20460009219036931,0.5291650295257568 +632704,1,-0.528629892723603,-0.18414412988023388,0.04396546571710477,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,0.4419600012801827,0.47886303067207336 +632704,2,-0.7681343199482997,-0.4955144960193704,-1.3419550606958577,,,,,,,,,,,,,0.47886303067207336 +633401,0,-1.5032803786647144,-0.5404369563759129,-0.8351539579881,0.06338537359139342,-0.8615683368241874,0.457405498335207,0.210943041564296,-0.20566158029432668,0.595077191691958,-0.23730908679360116,-0.5613165400266386,0.7083640674756347,-1.0422163045785646,-0.2910724881500066,-0.9106055385131593,2.11169171333313 +633401,1,-1.585958189043376,-1.3422837108752652,-1.1815354958941209,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.5613893220144716,2.058462619781494 +633401,2,-1.3584889903878858,-1.741125851746451,-1.791967716691911,,,,,,,,,,,,,2.058462619781494 +633602,0,-0.03493941435979663,-0.1952625786238314,0.15249413225090913,-0.9689657939725767,-1.7415956520556326,-1.2493495925272802,-1.339982508481953,-0.5672445341200663,-1.3802224138533508,0.36043714080320877,1.0113786285352542,-0.13173296267509654,-2.5822157519969178,-1.388853942113607,0.20460009219036931,0.9947413206100464 +633602,1,0.8170606662288354,-0.00596880972715211,1.0652162670597927,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.5613893220144716,-0.3206198513507843 +633602,2,-0.8665267650215641,0.36084331104299755,-0.08191962390690835,,,,,,,,,,,,,-0.3206198513507843 +633902,0,-0.5996859390924573,-0.6554950822932735,-0.5882419354283478,-0.9689657939725767,-1.2387229004948068,-0.9648904107168657,-0.8838279349389385,-0.8082998366705593,-0.22796431061858732,1.5559295959968287,1.7977262128162,0.28831555240026907,0.49778314283978853,0.806708965813594,0.8737234706124865,2.2875821590423584 +633902,1,-0.8169921553562683,-1.520459031028347,-0.16028469455143282,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.059714660367144415,2.341325283050537 +633902,2,-0.4729569847285068,-1.1183201738829107,-1.251952529496647,,,,,,,,,,,,,2.341325283050537 +633903,0,0.7557057202659283,0.2649699250456107,0.029038120971032973,-0.9689657939725767,-1.2387229004948068,-0.9648904107168657,-0.8838279349389385,-0.8082998366705593,-0.22796431061858732,1.5559295959968287,1.7977262128162,0.28831555240026907,-0.27221658086938805,0.806708965813594,-1.133646664653865,2.4724788665771484 +633903,1,1.0093021746506123,-0.18414412988023388,0.35034070611991114,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.5613893220144716,2.4788014888763428 +633903,2,0.2157901307843435,-0.573365205752313,-0.441929748703751,,,,,,,,,,,,,2.4788014888763428 +634204,0,-1.164432463825118,-0.1952625786238314,-0.5882419354283478,-0.9689657939725767,-0.8615683368241874,-0.3959720470960366,-1.4312134231905558,-1.2904104417715454,-1.5448307143154598,-0.835055314390411,-0.5613165400266386,-0.9718299928258278,0.49778314283978853,-1.388853942113607,-0.4645232862317478,1.8845422267913818 +634204,1,-1.201475172199822,-0.5404947701863974,-1.079410415759852,,,,,,,,,,0.2373400917434395,-1.3914893931436731,-0.5613893220144716,1.918394923210144 +634204,2,-0.5713494298017712,-1.040469464149968,-0.6219348111021723,,,,,,,,,,,,,1.918394923210144 +635302,0,-1.3903310737181822,-1.000669460045355,-0.8351539579881,0.2108641118148177,-1.3644410883850133,-1.8182679561481092,0.210943041564296,0.5175043273571525,-0.06335601015647824,-0.835055314390411,0.22503104425430823,0.7083640674756347,1.267782866548965,0.806708965813594,-0.9106055385131593,2.161705493927002 +635302,1,-2.0665619600978182,-1.2531960507987243,-0.8751602554913144,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.5613893220144716,2.3496084213256836 +635302,2,0.31418257585760784,-1.040469464149968,-1.251952529496647,,,,,,,,,,,,,2.3496084213256836 +635303,0,-1.6162296836112464,-1.000669460045355,-0.8351539579881,0.2108641118148177,-1.3644410883850133,-1.8182679561481092,0.210943041564296,0.5175043273571525,-0.06335601015647824,-0.835055314390411,0.22503104425430823,0.7083640674756347,1.267782866548965,0.806708965813594,0.20460009219036931,2.161705493927002 +635303,1,-1.9704412058869298,-1.3422837108752652,-1.3857856561626585,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.8122266528381351,2.3496084213256836 +635303,2,-0.5713494298017712,-1.1183201738829107,-1.6119626542934897,,,,,,,,,,,,,2.3496084213256836 +635701,0,1.8851987697312496,0.03485367321088963,-0.3413299128685955,-0.37905084107887943,-1.3644410883850133,0.7418646801456215,0.5758667003987075,-0.5069807084824429,-0.06335601015647824,0.36043714080320877,0.22503104425430823,-0.5517814777504622,0.49778314283978853,-1.388853942113607,-0.4645232862317478,0.3993663191795349 +635701,1,-0.4325091385127145,0.17220651042592966,1.1673413471940615,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,-0.059714660367144415,-0.45491474866867065 +635701,2,-0.4729569847285068,0.20514189157711243,-0.8019398735005937,,,,,,,,,,,,,-0.45491474866867065 +635802,0,-1.7291789885577786,-1.230785711880076,-1.0820659805478523,-0.8214870557491524,-1.4901592762752198,-1.5338087743376947,-2.069829826150776,-0.26592540593194997,-1.0510058129291326,-0.23730908679360116,1.0113786285352542,0.28831555240026907,-1.0422163045785646,1.9044904197771946,-0.6875644123724536,0.592125415802002 +635802,1,-1.6820789432542644,-1.7877220112579697,-1.4879107362969273,,,,,,,,,,1.663413533782179,0.7456311526478686,-0.059714660367144415,0.9003428816795349 +635802,2,-2.047236105900736,-1.741125851746451,-1.8819702478911218,,,,,,,,,,,,,0.9003428816795349 +635803,0,-0.37378732919939306,-0.770553208210634,-0.5882419354283478,-0.8214870557491524,-1.4901592762752198,-1.5338087743376947,-2.069829826150776,-0.26592540593194997,-1.0510058129291326,-0.23730908679360116,1.0113786285352542,0.28831555240026907,1.267782866548965,0.806708965813594,-0.24148216009104212,0.9003428816795349 +635803,1,-1.1053544179889336,-1.520459031028347,-1.3857856561626585,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-1.0630639836617988,1.313968539237976 +635803,2,-1.2600965453146213,-1.3518723030817383,-0.26192468630532967,,,,,,,,,,,,,1.313968539237976 +636303,0,-1.5032803786647144,-0.770553208210634,-0.8351539579881,-0.674008317525728,-0.9872865247143939,-0.9648904107168657,-0.518904276104527,-1.4109380930467919,-0.8863975124670236,0.36043714080320877,0.22503104425430823,0.28831555240026907,-1.0422163045785646,-0.2910724881500066,-0.018441033950336395,0.45105665922164917 +636303,1,-1.6820789432542644,-1.520459031028347,-1.590035816431196,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,-1.0630639836617988,0.4600786566734314 +636303,2,-1.4568814354611501,-0.729066625218198,-0.441929748703751,,,,,,,,,,,,,0.4600786566734314 +637104,0,-0.8255845489855216,-0.5404369563759129,0.3994061548106614,-1.8538382233131223,-1.867313839945839,-2.3871863197689382,-2.3435225702765847,-2.616214605799257,-1.3802224138533508,-0.835055314390411,-0.9544903321671111,0.7083640674756347,0.49778314283978853,1.9044904197771946,-0.24148216009104212,1.1159309148788452 +637104,1,0.2403361409635047,-0.00596880972715211,-0.26240977468570165,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-1.3139013144854623,0.7343482375144958 +637104,2,-0.4729569847285068,-0.4955144960193704,-0.441929748703751,,,,,,,,,,,,,0.7343482375144958 +637108,0,-1.3903310737181822,-1.000669460045355,-0.8351539579881,-1.8538382233131223,-1.867313839945839,-2.3871863197689382,-2.3435225702765847,-2.616214605799257,-1.3802224138533508,-0.835055314390411,-0.9544903321671111,0.7083640674756347,-0.27221658086938805,-0.2910724881500066,0.20460009219036931,0.5968322157859802 +637108,1,-0.33638838430182605,-2.054984991487592,-1.7942859766997337,,,,,,,,,,-1.9017700713146695,-1.3914893931436731,-0.5613893220144716,1.0324801206588745 +637108,2,-1.5552738805344144,-2.3639315296099914,-1.791967716691911,,,,,,,,,,,,,1.0324801206588745 +637109,0,-0.5996859390924573,-1.1157275859627156,-0.9586099692679761,-1.8538382233131223,-1.867313839945839,-2.3871863197689382,-2.3435225702765847,-2.616214605799257,-1.3802224138533508,-0.835055314390411,-0.9544903321671111,0.7083640674756347,-2.5822157519969178,-1.388853942113607,-1.133646664653865,1.0324801206588745 +637109,1,-0.528629892723603,-1.7877220112579697,-1.7942859766997337,,,,,,,,,,0.2373400917434395,-1.3914893931436731,-0.8122266528381351,1.0527193546295166 +637109,2,-0.6697418748750354,-1.1183201738829107,-1.8819702478911218,,,,,,,,,,,,,1.0527193546295166 +638202,0,-1.9550775984508428,-1.000669460045355,-0.8351539579881,-0.674008317525728,-0.6101319610437744,-0.9648904107168657,-0.518904276104527,0.15592137353141286,-0.5571809115428055,-0.835055314390411,-2.920359292869476,-0.5517814777504622,-1.812216028287741,-1.388853942113607,-0.9106055385131593,0.08500266075134277 +638202,1,-1.9704412058869298,-1.609546691104888,-1.590035816431196,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,-0.5613893220144716,0.08461300283670425 +638202,2,-3.1295530017066437,-1.8189765614793936,-1.9719727790903323,,,,,,,,,,,,,0.08461300283670425 +639601,0,-0.9385338539320537,-1.000669460045355,-0.8351539579881,-1.1164445321960008,-1.3644410883850133,-0.6804312289064511,-1.5224443378991586,-0.748036011032936,-1.2156141133912417,-1.432801541987221,-0.5613165400266386,-0.13173296267509654,-2.5822157519969178,-1.388853942113607,-0.6875644123724536,1.1583552360534668 +639601,1,-0.8169921553562683,0.5285571507320932,0.35034070611991114,,,,,,,,,,-1.1887333502953,-1.3914893931436731,0.6927973321038463,1.7749511003494263 +639601,2,-0.7681343199482997,-0.33981307655348536,-0.17192215510611902,,,,,,,,,,,,,1.7749511003494263 +641603,0,-0.03493941435979663,-0.5404369563759129,-0.3413299128685955,-1.1164445321960008,-1.4901592762752198,-2.671645501579353,-0.7925970202303356,-1.5314657443220383,-1.2156141133912417,-1.432801541987221,-2.920359292869476,-1.3918785079011935,0.49778314283978853,-1.388853942113607,0.8737234706124865,0.8862864971160889 +641603,1,-0.6247506469344914,0.08311885034938876,0.5545908663884488,,,,,,,,,,0.2373400917434395,1.8141914255436393,0.4419600012801827,0.2957175374031067 +641603,2,-1.0633116551680928,-0.10626094735465771,0.638100625686777,,,,,,,,,,,,,0.2957175374031067 +644202,0,-1.3903310737181822,-1.000669460045355,-0.8351539579881,-0.37905084107887943,-1.1130047126046003,-1.2493495925272802,-1.1575206790647472,-1.4712019186844152,-0.8863975124670236,0.9581833684000187,1.0113786285352542,0.7083640674756347,0.49778314283978853,-0.2910724881500066,0.20460009219036931,1.5894548892974854 +644202,1,-1.2975959264107106,-1.431371370951806,-1.7942859766997337,,,,,,,,,,0.2373400917434395,-0.3229291202479022,0.4419600012801827,1.8060486316680908 +644202,2,-1.2600965453146213,-1.6632751420135086,-1.521960123094279,,,,,,,,,,,,,1.8060486316680908 +644203,0,-1.6162296836112464,0.03485367321088963,-0.4647859241484716,-0.37905084107887943,-1.1130047126046003,-1.2493495925272802,-1.1575206790647472,-1.4712019186844152,-0.8863975124670236,0.9581833684000187,1.0113786285352542,0.7083640674756347,1.267782866548965,-0.2910724881500066,0.20460009219036931,1.8060486316680908 +644203,1,-0.528629892723603,0.08311885034938876,0.5545908663884488,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.059714660367144415,1.7931030988693237 +644203,2,0.2157901307843435,-0.2619623668205428,-0.26192468630532967,,,,,,,,,,,,,1.7931030988693237 +644503,0,-0.37378732919939306,-0.42537883045855246,0.7697741886502898,-1.5588807468662738,-1.1130047126046003,-0.9648904107168657,-1.0662897643561442,-1.5917295699596616,-1.0510058129291326,-0.835055314390411,-2.13401170858853,-1.3918785079011935,-1.812216028287741,-0.2910724881500066,-0.24148216009104212,0.5962517857551575 +644503,1,0.52869840359617,-0.6295824302629383,-0.7730351753570456,,,,,,,,,,0.2373400917434395,-1.3914893931436731,1.1944719937511734,0.6382931470870972 +644503,2,-0.7681343199482997,-0.9626187544170256,-0.35192721750454037,,,,,,,,,,,,,0.6382931470870972 +644504,0,-0.9385338539320537,-1.000669460045355,-0.8351539579881,-1.5588807468662738,-1.1130047126046003,-0.9648904107168657,-1.0662897643561442,-1.5917295699596616,-1.0510058129291326,-0.835055314390411,-2.13401170858853,-1.3918785079011935,0.49778314283978853,-0.2910724881500066,0.8737234706124865,0.6382931470870972 +644504,1,-0.4325091385127145,-1.1641083907221836,-1.4879107362969273,,,,,,,,,,0.2373400917434395,-1.3914893931436731,-0.310551991190808,0.41023147106170654 +644504,2,-0.9649192100948284,-1.040469464149968,-0.8019398735005937,,,,,,,,,,,,,0.41023147106170654 +644505,0,-1.27738176877165,0.14991179912825014,-0.2178739015887193,-1.5588807468662738,-1.1130047126046003,-0.9648904107168657,-1.0662897643561442,-1.5917295699596616,-1.0510058129291326,-0.835055314390411,-2.13401170858853,-1.3918785079011935,1.267782866548965,-1.388853942113607,-0.4645232862317478,0.3093876242637634 +644505,1,-2.0665619600978182,-0.09505646980369299,-1.2836605760283897,,,,,,,,,,1.663413533782179,0.7456311526478686,0.4419600012801827,-0.1311200112104416 +644505,2,-0.4729569847285068,-0.4955144960193704,-1.7019651854927003,,,,,,,,,,,,,-0.1311200112104416 +645002,0,-0.48673663414592516,-0.42537883045855246,-0.7116979467082238,-0.674008317525728,-0.9872865247143939,-0.1115128652856221,0.4846357856901046,-1.4712019186844152,-0.5571809115428055,0.36043714080320877,-0.9544903321671111,-0.9718299928258278,-0.27221658086938805,-0.2910724881500066,-0.4645232862317478,0.3613131642341614 +645002,1,-0.4325091385127145,0.08311885034938876,-0.568785015088508,,,,,,,,,,0.2373400917434395,1.8141914255436393,0.19112267045651915,-0.6931471824645996 +645002,2,-0.5713494298017712,-0.6512159154852555,-0.5319322799029617,,,,,,,,,,,,,-0.6931471824645996 +645503,0,-0.48673663414592516,-0.1952625786238314,-0.3413299128685955,-1.1164445321960008,-0.6101319610437744,0.7418646801456215,0.940790359233119,0.5175043273571525,-0.5571809115428055,-0.23730908679360116,0.22503104425430823,0.28831555240026907,-1.812216028287741,-0.2910724881500066,-1.3566877907945707,1.5064141750335693 +645503,1,1.4899059457050545,-0.00596880972715211,-0.46665993495423924,,,,,,,,,,1.663413533782179,-0.3229291202479022,-0.8122266528381351,1.5211694240570068 +645503,2,0.019005240637814846,0.20514189157711243,-1.1619499982974364,,,,,,,,,,,,,1.5211694240570068 +646101,0,-1.6162296836112464,-1.5759600896321577,-1.4524340143874808,-0.8214870557491524,-1.615877464165426,-0.3959720470960366,-0.61013519081313,-0.5069807084824429,-1.0510058129291326,0.36043714080320877,-0.16814274788616518,0.7083640674756347,0.49778314283978853,-1.388853942113607,-0.9106055385131593,0.04113364592194557 +646101,1,-1.393716680621599,-0.896845410492561,-0.9772853356255832,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.5613893220144716,0.48787549138069153 +646101,2,-0.8665267650215641,-0.729066625218198,-0.26192468630532967,,,,,,,,,,,,,0.48787549138069153 +646102,0,-0.03493941435979663,-0.5404369563759129,-0.4647859241484716,-0.8214870557491524,-1.615877464165426,-0.3959720470960366,-0.61013519081313,-0.5069807084824429,-1.0510058129291326,0.36043714080320877,-0.16814274788616518,0.7083640674756347,0.49778314283978853,0.806708965813594,-0.6875644123724536,1.0250657796859741 +646102,1,-1.201475172199822,-1.0750207306456427,0.6567159465227176,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,-0.5613893220144716,-0.28944888710975647 +646102,2,-0.9649192100948284,-1.2740215933487957,-1.7019651854927003,,,,,,,,,,,,,-0.28944888710975647 +648901,0,-0.7126352440389895,-0.8856113341279945,-0.8351539579881,-0.9689657939725767,-1.1130047126046003,-2.102727137958524,-0.7013661055217327,-0.4467168828448197,-0.3925726110806964,0.36043714080320877,-0.5613165400266386,-1.3918785079011935,-1.0422163045785646,1.9044904197771946,-0.018441033950336395,1.5368752479553223 +648901,1,-0.24026763009093757,-0.3623194500333156,-0.9772853356255832,,,,,,,,,,0.2373400917434395,1.8141914255436393,0.6927973321038463,1.4185444116592407 +648901,2,0.019005240637814846,-0.41766378628642786,-0.26192468630532967,,,,,,,,,,,,,1.4185444116592407 +651502,0,-0.14788871930632877,2.105899939723379,1.5105102563295467,0.2108641118148177,-0.6101319610437744,0.7418646801456215,-0.61013519081313,-0.26592540593194997,0.7596854921540671,0.9581833684000187,0.22503104425430823,-0.13173296267509654,0.49778314283978853,0.806708965813594,-0.6875644123724536,1.8845422267913818 +651502,1,1.1054229288615007,1.7757843918036655,1.1673413471940615,,,,,,,,,,1.663413533782179,0.7456311526478686,-0.5613893220144716,2.026191473007202 +651502,2,1.1997145815169867,2.151409634900676,0.008082907292302316,,,,,,,,,,,,,2.026191473007202 +651602,0,-1.164432463825118,-1.000669460045355,-0.8351539579881,-1.1164445321960008,-1.1130047126046003,-2.102727137958524,-1.24875159377335,-1.712257221234908,-1.0510058129291326,0.36043714080320877,-0.9544903321671111,-0.9718299928258278,-0.27221658086938805,0.806708965813594,-1.133646664653865,-0.6931471824645996 +651602,1,-1.9704412058869298,0.4394694906555523,-1.3857856561626585,,,,,,,,,,0.2373400917434395,1.8141914255436393,-1.3139013144854623,-0.27459201216697693 +651602,2,-1.3584889903878858,-0.10626094735465771,0.638100625686777,,,,,,,,,,,,,-0.27459201216697693 +664303,0,-0.48673663414592516,-0.1952625786238314,-0.2178739015887193,0.5058215882616662,0.7727681057484966,0.7418646801456215,0.3934048709815018,0.3367128504442826,-0.3925726110806964,1.5559295959968287,1.7977262128162,0.28831555240026907,0.49778314283978853,0.806708965813594,0.20460009219036931,0.9701385498046875 +664303,1,0.048094632541727786,-0.00596880972715211,0.45246578625417994,,,,,,,,,,-0.47569662927593015,0.7456311526478686,0.4419600012801827,0.777299165725708 +664303,2,-0.5713494298017712,-0.10626094735465771,0.2780905008899343,,,,,,,,,,,,,0.777299165725708 +665102,0,-1.7291789885577786,-1.000669460045355,-0.8351539579881,-0.674008317525728,-1.7415956520556326,-1.2493495925272802,-1.24875159377335,-1.712257221234908,-1.3802224138533508,-0.835055314390411,-0.16814274788616518,0.7083640674756347,1.267782866548965,1.9044904197771946,3.104134732019544,0.7495623230934143 +665102,1,-2.1626827143087066,-1.9658973314110515,-1.8964110568340025,,,,,,,,,,1.663413533782179,-0.3229291202479022,-1.0630639836617988,0.27320346236228943 +665102,2,-2.735983221413586,-2.130379400411164,-2.151977841488754,,,,,,,,,,,,,0.27320346236228943 +667602,0,-1.27738176877165,-1.9211344673842392,-1.8228020482271092,-0.08409336463203088,0.6470499178582901,0.17294631652479245,-0.7925970202303356,-0.3261892315695732,-0.22796431061858732,0.36043714080320877,-0.5613165400266386,-1.8119270229765592,-1.812216028287741,-1.388853942113607,-0.24148216009104212,1.082613229751587 +667602,1,-1.7781996974651528,-1.520459031028347,-2.10066121710254,,,,,,,,,,-1.1887333502953,0.7456311526478686,-0.059714660367144415,0.687514066696167 +667602,2,-1.9488436608274717,-1.429723012814681,-0.8019398735005937,,,,,,,,,,,,,0.687514066696167 +669301,0,0.19095919553326762,0.3800280509629712,0.2759501435307853,1.2432152793787876,0.018458978407257843,0.7418646801456215,0.210943041564296,0.5175043273571525,1.5827269944646125,-0.23730908679360116,0.22503104425430823,0.7083640674756347,-0.27221658086938805,-0.2910724881500066,-0.6875644123724536,2.995732307434082 +669301,1,0.7209399120179469,0.5285571507320932,0.04396546571710477,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.059714660367144415,2.756405830383301 +669301,2,0.31418257585760784,0.43869402077594005,0.9981107504836196,,,,,,,,,,,,,2.756405830383301 +670901,0,-0.37378732919939306,-0.8856113341279945,-0.7116979467082238,-1.4114020086428494,-0.9872865247143939,-0.6804312289064511,-0.2452115319787184,0.2161851991690361,-0.8863975124670236,0.36043714080320877,-2.5271855007290034,-0.5517814777504622,-1.0422163045785646,-1.388853942113607,0.20460009219036931,1.3454829454421997 +670901,1,0.4325776493852816,-0.7186700903394792,-0.05815961441716403,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.059714660367144415,1.0215626955032349 +670901,2,-0.5713494298017712,-0.8847680446840831,-0.441929748703751,,,,,,,,,,,,,1.0215626955032349 +670903,0,-0.9385338539320537,-0.770553208210634,-0.2178739015887193,-1.4114020086428494,-0.9872865247143939,-0.6804312289064511,-0.2452115319787184,0.2161851991690361,-0.8863975124670236,0.36043714080320877,-2.5271855007290034,-0.5517814777504622,-0.27221658086938805,-0.2910724881500066,0.8737234706124865,1.384527564048767 +670903,1,0.2403361409635047,0.08311885034938876,0.24821562598564237,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.8122266528381351,1.5555419921875 +670903,2,0.019005240637814846,-0.18411165708760024,-0.441929748703751,,,,,,,,,,,,,1.5555419921875 +674202,0,-1.5032803786647144,-1.230785711880076,-1.0820659805478523,-0.8214870557491524,-0.35869558526336154,0.457405498335207,0.4846357856901046,1.1804064093710083,-0.5571809115428055,-0.23730908679360116,-0.5613165400266386,-0.13173296267509654,0.49778314283978853,-0.2910724881500066,0.8737234706124865,0.8318341970443726 +674202,1,-2.7394072395740374,-1.7877220112579697,-1.9985361369682713,,,,,,,,,,0.2373400917434395,-0.3229291202479022,0.4419600012801827,0.1124754473567009 +674202,2,-1.9488436608274717,-1.8968272712123362,-1.791967716691911,,,,,,,,,,,,,0.1124754473567009 +675202,0,-0.8255845489855216,-0.08020445270647089,1.2635982337697944,-0.674008317525728,0.7727681057484966,-0.1115128652856221,-3.0733698879454074,-2.435423128886387,-0.3925726110806964,-0.835055314390411,0.22503104425430823,-0.13173296267509654,1.267782866548965,-0.2910724881500066,3.104134732019544,1.0724180936813354 +675202,1,-0.04802612166916067,-0.09505646980369299,-0.9772853356255832,,,,,,,,,,-1.9017700713146695,0.7456311526478686,-0.059714660367144415,1.404684066772461 +675202,2,-0.27617209458197817,-0.573365205752313,-0.981944935899015,,,,,,,,,,,,,1.404684066772461 +675205,0,-0.37378732919939306,-0.08020445270647089,-0.4647859241484716,-0.674008317525728,0.7727681057484966,-0.1115128652856221,-3.0733698879454074,-2.435423128886387,-0.3925726110806964,-0.835055314390411,0.22503104425430823,-0.13173296267509654,-1.812216028287741,-1.388853942113607,0.20460009219036931,1.2826331853866577 +675205,1,0.52869840359617,2.132135032109829,0.45246578625417994,,,,,,,,,,0.9503768127628092,-1.3914893931436731,-0.310551991190808,0.6603667140007019 +675205,2,0.019005240637814846,0.36084331104299755,-0.26192468630532967,,,,,,,,,,,,,0.6603667140007019 +677302,0,-1.5032803786647144,-0.8856113341279945,-0.8351539579881,-1.4114020086428494,-1.9930320278360456,-1.2493495925272802,-2.799677143819599,-2.4956869545240106,-0.8863975124670236,-2.030547769584031,-0.16814274788616518,-0.5517814777504622,1.267782866548965,1.9044904197771946,-1.3566877907945707,0.24670489132404327 +677302,1,-1.4898374348324874,-1.7877220112579697,-1.8964110568340025,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-1.3139013144854623,-0.4602424204349518 +677302,2,-2.735983221413586,-2.130379400411164,-1.9719727790903323,,,,,,,,,,,,,-0.4602424204349518 +680702,0,0.6427564153193962,0.03485367321088963,0.15249413225090913,0.6533003264850905,0.8984862936387031,0.7418646801456215,0.4846357856901046,0.3367128504442826,0.2658605907677399,1.5559295959968287,1.7977262128162,0.28831555240026907,-0.27221658086938805,-1.388853942113607,-1.3566877907945707,1.6853389739990234 +680702,1,0.8170606662288354,0.08311885034938876,0.04396546571710477,,,,,,,,,,0.9503768127628092,0.7456311526478686,0.4419600012801827,1.743966817855835 +680702,2,1.3964994716635155,-0.573365205752313,0.45809556328835566,,,,,,,,,,,,,1.743966817855835 +682601,0,3.5794383439292314,5.097411213574753,2.621614357848432,1.5381727558256364,1.149922669419116,0.7418646801456215,-0.33644244668732126,-0.3261892315695732,1.5827269944646125,0.9581833684000187,-0.16814274788616518,0.28831555240026907,0.49778314283978853,-0.2910724881500066,0.20460009219036931,2.995732307434082 +682601,1,3.0278380130792697,3.3793622731814015,1.1673413471940615,,,,,,,,,,1.663413533782179,0.7456311526478686,-0.5613893220144716,2.995732307434082 +682601,2,2.085246587176366,2.462812473832446,2.978166436866254,,,,,,,,,,,,,2.995732307434082 +684502,0,1.207502940052057,0.3800280509629712,0.5228621660905376,-1.4114020086428494,-0.2329773973731551,-0.1115128652856221,-0.2452115319787184,-0.3261892315695732,-0.5571809115428055,-0.835055314390411,-0.16814274788616518,-0.13173296267509654,-1.812216028287741,-0.2910724881500066,-0.6875644123724536,1.9332695007324219 +684502,1,0.2403361409635047,0.7958201309617158,0.5545908663884488,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-0.8122266528381351,1.3579683303833008 +684502,2,-0.27617209458197817,0.20514189157711243,0.18808796969072364,,,,,,,,,,,,,1.3579683303833008 +684503,0,1.4334015499451211,0.03485367321088963,0.3994061548106614,-1.4114020086428494,-0.2329773973731551,-0.1115128652856221,-0.2452115319787184,-0.3261892315695732,-0.5571809115428055,-0.835055314390411,-0.16814274788616518,-0.13173296267509654,-1.0422163045785646,-1.388853942113607,-0.9106055385131593,1.3579683303833008 +684503,1,-0.24026763009093757,-0.09505646980369299,0.24821562598564237,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-1.0630639836617988,1.6807031631469727 +684503,2,-0.1777796495087138,1.0614996986394805,0.18808796969072364,,,,,,,,,,,,,1.6807031631469727 +685201,0,2.1110973796243138,1.875783687888658,1.8808782901691752,0.9482578029319392,1.149922669419116,0.7418646801456215,0.6670976151073104,0.6982958042700221,0.9242937926161762,-0.835055314390411,1.0113786285352542,0.7083640674756347,1.267782866548965,-0.2910724881500066,-0.9106055385131593,2.4955623149871826 +685201,1,1.4899059457050545,2.577573332492533,1.6779667478654055,,,,,,,,,,-1.1887333502953,0.7456311526478686,-0.5613893220144716,2.4643607139587402 +685201,2,1.593284361810044,1.1393504083724229,-0.26192468630532967,,,,,,,,,,,,,2.4643607139587402 +686202,0,-0.5996859390924573,-0.08020445270647089,0.15249413225090913,-0.674008317525728,0.6470499178582901,0.457405498335207,-1.4312134231905558,-0.748036011032936,-0.8863975124670236,-0.835055314390411,-0.16814274788616518,0.28831555240026907,-1.0422163045785646,-0.2910724881500066,-0.6875644123724536,2.170846700668335 +686202,1,1.1054229288615007,0.5285571507320932,0.04396546571710477,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.059714660367144415,1.6261838674545288 +686202,2,-0.8665267650215641,-0.18411165708760024,0.18808796969072364,,,,,,,,,,,,,1.6261838674545288 +687602,0,1.7722494647847176,-0.42537883045855246,-0.5882419354283478,0.06338537359139342,1.0242044815289095,0.7418646801456215,1.3969449327761334,-0.38645305720719647,0.9242937926161762,0.36043714080320877,0.6182048363947807,-0.9718299928258278,0.49778314283978853,3.002271873740795,0.8737234706124865,1.68544602394104 +687602,1,0.4325776493852816,-0.00596880972715211,-0.8751602554913144,,,,,,,,,,1.663413533782179,0.7456311526478686,1.1944719937511734,1.8464181423187256 +687602,2,-0.07938720443544948,-0.6512159154852555,-0.441929748703751,,,,,,,,,,,,,1.8464181423187256 +688103,0,1.207502940052057,1.4155511842192159,2.3747023352886796,-0.08409336463203088,-0.6101319610437744,-0.1115128652856221,-0.8838279349389385,-1.1698827904962987,-1.3802224138533508,0.36043714080320877,0.22503104425430823,1.1284125825510003,-1.812216028287741,-0.2910724881500066,0.8737234706124865,1.6086946725845337 +688103,1,1.3937851914941661,1.0630831111913384,0.35034070611991114,,,,,,,,,,-1.9017700713146695,-0.3229291202479022,-1.3139013144854623,2.301387310028076 +688103,2,0.9045372462971938,0.7500968597077102,0.5480980944875663,,,,,,,,,,,,,2.301387310028076 +688501,0,-1.3903310737181822,-1.000669460045355,-0.8351539579881,-1.1164445321960008,-1.3644410883850133,-1.2493495925272802,0.028481212147090252,-0.8685636623081825,-0.8863975124670236,-0.835055314390411,-0.9544903321671111,-0.5517814777504622,0.49778314283978853,-0.2910724881500066,0.20460009219036931,0.8586603403091431 +688501,1,-1.4898374348324874,-1.7877220112579697,-1.4879107362969273,,,,,,,,,,1.663413533782179,1.8141914255436393,-0.5613893220144716,0.17535093426704407 +688501,2,-1.6536663256076787,-1.9746779809452786,-1.6119626542934897,,,,,,,,,,,,,0.17535093426704407 +691303,0,-0.9385338539320537,-0.6554950822932735,-0.5882419354283478,0.06338537359139342,0.7727681057484966,-0.3959720470960366,-0.8838279349389385,-0.6877721853953127,-0.22796431061858732,0.9581833684000187,0.22503104425430823,0.7083640674756347,0.49778314283978853,0.806708965813594,0.20460009219036931,1.1913950443267822 +691303,1,-1.0092336637780452,-1.6986343511814288,-1.6921608965654649,,,,,,,,,,1.663413533782179,-1.3914893931436731,0.4419600012801827,1.617070198059082 +691303,2,0.019005240637814846,-1.429723012814681,-1.6119626542934897,,,,,,,,,,,,,1.617070198059082 +695202,0,-0.14788871930632877,-1.000669460045355,-0.8351539579881,-0.5265295793023037,-1.1130047126046003,-0.9648904107168657,-0.8838279349389385,-0.4467168828448197,-1.2156141133912417,0.36043714080320877,-0.5613165400266386,0.28831555240026907,-1.0422163045785646,0.806708965813594,-0.24148216009104212,0.8586603403091431 +695202,1,-1.585958189043376,-1.6986343511814288,-1.6921608965654649,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.8122266528381351,0.611970067024231 +695202,2,-1.2600965453146213,-0.573365205752313,-1.3419550606958577,,,,,,,,,,,,,0.611970067024231 +695302,0,0.8686550252124604,1.5306093101365763,1.2635982337697944,-0.37905084107887943,0.1441771662974643,0.7418646801456215,-1.0662897643561442,-0.4467168828448197,0.2658605907677399,-0.23730908679360116,1.0113786285352542,-1.3918785079011935,-1.0422163045785646,-0.2910724881500066,-0.6875644123724536,1.557302474975586 +695302,1,-0.04802612166916067,1.2412584313444202,1.2694664273283303,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.8122266528381351,1.6848872900009155 +695302,2,0.2157901307843435,0.7500968597077102,0.18808796969072364,,,,,,,,,,,,,1.6848872900009155 +695702,0,-0.5996859390924573,-0.770553208210634,-0.7116979467082238,-1.1164445321960008,0.018458978407257843,0.457405498335207,-0.7013661055217327,-0.8082998366705593,-0.5571809115428055,1.5559295959968287,0.6182048363947807,0.28831555240026907,0.49778314283978853,0.806708965813594,1.9889291013160153,1.2500165700912476 +695702,1,-1.1053544179889336,-0.18414412988023388,0.5545908663884488,,,,,,,,,,0.9503768127628092,1.8141914255436393,-0.310551991190808,1.6071908473968506 +695702,2,0.019005240637814846,0.20514189157711243,0.18808796969072364,,,,,,,,,,,,,1.6071908473968506 +696603,0,-0.14788871930632877,-0.770553208210634,-0.09441789030884316,-0.23157210285545515,-0.2329773973731551,-0.9648904107168657,-1.24875159377335,-0.5069807084824429,-0.7217892120049145,0.9581833684000187,1.0113786285352542,1.548461097626366,-1.0422163045785646,-1.388853942113607,-0.6875644123724536,0.5205920338630676 +696603,1,-1.2975959264107106,-1.3422837108752652,-1.590035816431196,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.5613893220144716,-0.6931471824645996 +696603,2,-1.0633116551680928,-1.1183201738829107,-1.4319575918950684,,,,,,,,,,,,,-0.6931471824645996 +696704,0,-1.0514831588785858,-0.5404369563759129,-0.8351539579881,-1.4114020086428494,-1.9930320278360456,-1.2493495925272802,-2.1610607408593787,-2.6764784314368804,-0.8863975124670236,0.36043714080320877,-0.9544903321671111,0.7083640674756347,-0.27221658086938805,-0.2910724881500066,1.5428468490346037,0.0069354516454041 +696704,1,-0.7208714011453798,-0.7186700903394792,-0.05815961441716403,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-0.059714660367144415,0.4744674563407898 +696704,2,-0.8665267650215641,-0.729066625218198,-1.791967716691911,,,,,,,,,,,,,0.4744674563407898 +697101,0,0.19095919553326762,-0.08020445270647089,-0.4647859241484716,1.0957365411553635,0.018458978407257843,0.17294631652479245,0.6670976151073104,-0.6275083597576895,-0.22796431061858732,0.36043714080320877,1.4045524206757267,0.7083640674756347,0.49778314283978853,0.806708965813594,3.104134732019544,1.036523461341858 +697101,1,0.52869840359617,0.3503818305790114,-0.46665993495423924,,,,,,,,,,0.9503768127628092,-0.3229291202479022,3.7028453019878094,1.2641807794570923 +697101,2,-0.1777796495087138,0.36084331104299755,-0.08191962390690835,,,,,,,,,,,,,1.2641807794570923 +697102,0,1.320452244998589,0.3800280509629712,0.3994061548106614,1.0957365411553635,0.018458978407257843,0.17294631652479245,0.6670976151073104,-0.6275083597576895,-0.22796431061858732,0.36043714080320877,1.4045524206757267,0.7083640674756347,-1.0422163045785646,0.806708965813594,0.8737234706124865,1.0127716064453125 +697102,1,0.33645689517439314,0.08311885034938876,0.14609054585137357,,,,,,,,,,0.9503768127628092,-1.3914893931436731,1.1944719937511734,0.8152689933776855 +697102,2,0.6093599110774008,1.0614996986394805,1.5381259376788836,,,,,,,,,,,,,0.8152689933776855 +697103,0,0.19095919553326762,1.7607255619712974,0.6463181773704137,1.0957365411553635,0.018458978407257843,0.17294631652479245,0.6670976151073104,-0.6275083597576895,-0.22796431061858732,0.36043714080320877,1.4045524206757267,0.7083640674756347,0.49778314283978853,0.806708965813594,-0.24148216009104212,0.9402173161506653 +697103,1,0.7209399120179469,3.2011869530283197,1.0652162670597927,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.059714660367144415,0.3549081087112427 +697103,2,-0.37456453965524245,1.5286039570371357,1.0881132816828303,,,,,,,,,,,,,0.3549081087112427 +698902,0,0.3039085004797998,-0.3103207045411919,-0.2178739015887193,-0.9689657939725767,0.6470499178582901,0.457405498335207,-0.9750588496475414,-0.5672445341200663,-0.22796431061858732,-0.23730908679360116,-0.9544903321671111,0.28831555240026907,-1.0422163045785646,0.806708965813594,-0.4645232862317478,1.470105767250061 +698902,1,-1.201475172199822,0.08311885034938876,0.8609661067912552,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.5613893220144716,0.5334247946739197 +698902,2,1.6916768068833083,0.9836489889065378,1.178115812882041,,,,,,,,,,,,,0.5334247946739197 +704601,0,-0.7126352440389895,1.5306093101365763,0.6463181773704137,-0.37905084107887943,-0.35869558526336154,0.457405498335207,0.3021739562728989,0.2764490248066594,-0.7217892120049145,-0.835055314390411,-0.16814274788616518,-0.5517814777504622,-2.5822157519969178,-1.388853942113607,-0.4645232862317478,1.353195071220398 +704601,1,0.2403361409635047,0.4394694906555523,1.5758416677311367,,,,,,,,,,-1.9017700713146695,-0.3229291202479022,-0.5613893220144716,1.5886214971542358 +704601,2,0.7077523561506651,1.1393504083724229,1.6281284688780944,,,,,,,,,,,,,1.5886214971542358 +704902,0,-0.03493941435979663,-0.08020445270647089,-0.4647859241484716,-0.23157210285545515,0.8984862936387031,1.026323861956036,-1.0662897643561442,-0.8082998366705593,0.7596854921540671,0.36043714080320877,0.6182048363947807,0.7083640674756347,-1.812216028287741,-1.388853942113607,-1.133646664653865,1.7459635734558105 +704902,1,0.14421538675261625,0.17220651042592966,0.24821562598564237,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-1.0630639836617988,2.220890760421753 +704902,2,1.0029296913704582,0.8279475694406527,-0.441929748703751,,,,,,,,,,,,,2.220890760421753 +704903,0,-0.9385338539320537,-0.5404369563759129,-0.4647859241484716,-0.23157210285545515,0.8984862936387031,1.026323861956036,-1.0662897643561442,-0.8082998366705593,0.7596854921540671,0.36043714080320877,0.6182048363947807,0.7083640674756347,0.49778314283978853,-1.388853942113607,-0.9106055385131593,1.3556981086730957 +704903,1,-0.4325091385127145,-0.09505646980369299,0.6567159465227176,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-0.5613893220144716,1.095194697380066 +704903,2,-0.27617209458197817,0.36084331104299755,0.008082907292302316,,,,,,,,,,,,,1.095194697380066 +706401,0,0.4168578054263319,-0.6554950822932735,0.029038120971032973,-0.08409336463203088,-0.7358501489339809,-2.102727137958524,-1.4312134231905558,-1.3506742674091685,-1.3802224138533508,0.9581833684000187,0.22503104425430823,-0.9718299928258278,0.49778314283978853,0.806708965813594,0.20460009219036931,0.16714361310005188 +706401,1,-0.528629892723603,-0.18414412988023388,0.8609661067912552,,,,,,,,,,1.663413533782179,2.88275169843941,-0.059714660367144415,0.08839824050664902 +706401,2,-0.4729569847285068,-0.41766378628642786,-0.17192215510611902,,,,,,,,,,,,,0.08839824050664902 +707703,0,1.4334015499451211,0.03485367321088963,1.016686211210042,-0.5265295793023037,-0.10725920948294862,0.17294631652479245,0.3934048709815018,0.8188234555452687,-1.2156141133912417,0.36043714080320877,0.6182048363947807,0.28831555240026907,-0.27221658086938805,-0.2910724881500066,-0.24148216009104212,1.094746470451355 +707703,1,-0.04802612166916067,-0.18414412988023388,0.24821562598564237,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-1.0630639836617988,1.5337891578674316 +707703,2,0.11739768571107917,0.5943954402418251,-1.3419550606958577,,,,,,,,,,,,,1.5337891578674316 +708401,0,1.8851987697312496,2.105899939723379,2.745070369128308,0.6533003264850905,0.6470499178582901,-0.1115128652856221,0.8495594445245161,1.1804064093710083,0.595077191691958,1.5559295959968287,1.0113786285352542,0.28831555240026907,-1.0422163045785646,0.806708965813594,-0.24148216009104212,2.482635021209717 +708401,1,2.0666304709703853,2.0430473720332882,1.1673413471940615,,,,,,,,,,-1.1887333502953,-0.3229291202479022,0.4419600012801827,2.4234797954559326 +708401,2,1.7900692519565728,1.6843053765030207,2.8881639056670436,,,,,,,,,,,,,2.4234797954559326 +708402,0,1.5463508548916531,0.7252024287150527,0.5228621660905376,0.6533003264850905,0.6470499178582901,-0.1115128652856221,0.8495594445245161,1.1804064093710083,0.595077191691958,1.5559295959968287,1.0113786285352542,0.28831555240026907,-0.27221658086938805,-0.2910724881500066,0.20460009219036931,2.4234797954559326 +708402,1,0.52869840359617,1.2412584313444202,0.8609661067912552,,,,,,,,,,-1.1887333502953,-0.3229291202479022,1.1944719937511734,2.6081390380859375 +708402,2,0.8061448012239295,0.8279475694406527,0.8181056880851983,,,,,,,,,,,,,2.6081390380859375 +708403,0,0.6427564153193962,0.6101443027976923,0.7697741886502898,0.6533003264850905,0.6470499178582901,-0.1115128652856221,0.8495594445245161,1.1804064093710083,0.595077191691958,1.5559295959968287,1.0113786285352542,0.28831555240026907,-1.0422163045785646,-0.2910724881500066,-0.24148216009104212,2.6081390380859375 +708403,1,0.2403361409635047,0.7958201309617158,0.45246578625417994,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.5613893220144716,2.7568225860595703 +708403,2,0.31418257585760784,0.6722461499747677,1.3581208752804623,,,,,,,,,,,,,2.7568225860595703 +710501,0,0.19095919553326762,0.7252024287150527,-0.09441789030884316,-0.674008317525728,0.2698953541876708,0.457405498335207,0.4846357856901046,0.5777681529947757,-0.22796431061858732,-0.23730908679360116,0.22503104425430823,-0.13173296267509654,0.49778314283978853,0.806708965813594,-0.4645232862317478,1.5365381240844727 +710501,1,0.14421538675261625,-0.2732317899567748,-0.7730351753570456,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.5613893220144716,1.545040488243103 +710501,2,-0.37456453965524245,-0.2619623668205428,-1.0719474670982256,,,,,,,,,,,,,1.545040488243103 +711502,0,1.320452244998589,1.5306093101365763,0.5228621660905376,-0.37905084107887943,0.7727681057484966,0.7418646801456215,-0.518904276104527,-0.08513392901908017,0.2658605907677399,0.36043714080320877,1.7977262128162,1.1284125825510003,-1.0422163045785646,1.9044904197771946,0.8737234706124865,0.19534938037395477 +711502,1,0.9131814204397238,1.1521707712678793,1.4737165875968679,,,,,,,,,,-1.1887333502953,0.7456311526478686,0.4419600012801827,0.29579710960388184 +711502,2,1.0029296913704582,2.0735589251677333,0.09808543849151298,,,,,,,,,,,,,0.29579710960388184 +712303,0,0.4168578054263319,0.3800280509629712,-0.09441789030884316,-1.1164445321960008,-0.2329773973731551,-0.9648904107168657,-0.61013519081313,-0.6877721853953127,-0.7217892120049145,0.36043714080320877,0.6182048363947807,-0.5517814777504622,-0.27221658086938805,-1.388853942113607,-0.4645232862317478,1.0705281496047974 +712303,1,0.6248191578070585,0.2612941705024705,-0.8751602554913144,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-0.5613893220144716,1.2847071886062622 +712303,2,-0.5713494298017712,0.6722461499747677,-0.08191962390690835,,,,,,,,,,,,,1.2847071886062622 +712402,0,-1.5032803786647144,-0.42537883045855246,0.3994061548106614,-1.7063594850896981,-0.9872865247143939,-0.6804312289064511,-0.42767336139592416,-1.4712019186844152,-1.0510058129291326,1.5559295959968287,0.22503104425430823,-1.8119270229765592,-0.27221658086938805,-1.388853942113607,-0.6875644123724536,2.380452871322632 +712402,1,-2.4510449769413722,0.08311885034938876,0.5545908663884488,,,,,,,,,,1.663413533782179,-1.3914893931436731,-1.0630639836617988,2.5043182373046875 +712402,2,-1.9488436608274717,-0.573365205752313,0.09808543849151298,,,,,,,,,,,,,2.5043182373046875 +712802,0,2.336995989517378,1.7607255619712974,2.004334301449051,-0.5265295793023037,-0.7358501489339809,-0.3959720470960366,-0.33644244668732126,0.15592137353141286,-0.3925726110806964,1.5559295959968287,-0.16814274788616518,1.1284125825510003,-1.812216028287741,0.806708965813594,-0.9106055385131593,0.5090728998184204 +712802,1,-0.4325091385127145,-0.3623194500333156,-1.2836605760283897,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.5613893220144716,0.8125841021537781 +712802,2,-0.6697418748750354,0.1272911818441699,0.18808796969072364,,,,,,,,,,,,,0.8125841021537781 +713902,0,-0.8255845489855216,-0.5404369563759129,-0.8351539579881,-0.8214870557491524,-1.9930320278360456,-1.8182679561481092,-2.3435225702765847,-2.314895477611141,-0.7217892120049145,-0.835055314390411,-2.13401170858853,-0.5517814777504622,-1.812216028287741,-1.388853942113607,-1.133646664653865,-0.6931471824645996 +713902,1,-0.33638838430182605,-1.0750207306456427,-0.6709100952227768,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,-0.5613893220144716,-0.6931471824645996 +713902,2,-0.8665267650215641,-0.9626187544170256,-0.8919424046998043,,,,,,,,,,,,,-0.6931471824645996 +713903,0,-1.7291789885577786,-2.3813669710536813,-2.316626093346614,-0.8214870557491524,-1.9930320278360456,-1.8182679561481092,-2.3435225702765847,-2.314895477611141,-0.7217892120049145,-0.835055314390411,-2.13401170858853,-0.5517814777504622,-1.0422163045785646,-1.388853942113607,-1.3566877907945707,-0.6931471824645996 +713903,1,-2.5471657311522606,-2.500423291870297,-2.5091615376396152,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-1.3139013144854623,-0.6931471824645996 +713903,2,-3.6215152270729654,-2.7531850782747043,-2.691993028684018,,,,,,,,,,,,,-0.6931471824645996 +714402,0,-1.3903310737181822,-1.3458438377974367,-1.2055219918277285,1.0957365411553635,0.1441771662974643,0.17294631652479245,-1.1575206790647472,0.2161851991690361,0.9242937926161762,-0.23730908679360116,0.22503104425430823,-0.5517814777504622,-0.27221658086938805,1.9044904197771946,-0.24148216009104212,1.0508196353912354 +714402,1,-1.201475172199822,-1.8768096713345106,-1.7942859766997337,,,,,,,,,,0.9503768127628092,2.88275169843941,0.6927973321038463,0.7744470238685608 +714402,2,-1.2600965453146213,-2.208230110144106,-2.331982903887175,,,,,,,,,,,,,0.7744470238685608 +715201,0,-1.0514831588785858,-0.5404369563759129,-0.4647859241484716,-0.674008317525728,-0.8615683368241874,0.17294631652479245,-1.24875159377335,-0.4467168828448197,-0.7217892120049145,0.36043714080320877,-1.740837916448057,-2.2319755380519246,0.49778314283978853,0.806708965813594,1.319805722893898,2.143651247024536 +715201,1,0.4325776493852816,-1.520459031028347,-0.568785015088508,,,,,,,,,,0.2373400917434395,0.7456311526478686,0.4419600012801827,2.2054340839385986 +715201,2,-0.8665267650215641,-1.6632751420135086,-1.791967716691911,,,,,,,,,,,,,2.2054340839385986 +715601,0,-1.27738176877165,-0.770553208210634,-0.8351539579881,-0.674008317525728,-0.35869558526336154,0.457405498335207,0.210943041564296,-0.024870103381456905,0.430468891229849,0.36043714080320877,0.6182048363947807,1.1284125825510003,-0.27221658086938805,-0.2910724881500066,-0.9106055385131593,0.45304128527641296 +715601,1,-0.6247506469344914,-0.18414412988023388,0.04396546571710477,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.5613893220144716,0.6636877059936523 +715601,2,-0.4729569847285068,-0.18411165708760024,0.09808543849151298,,,,,,,,,,,,,0.6636877059936523 +715602,0,-1.0514831588785858,-0.42537883045855246,-0.4647859241484716,-0.674008317525728,-0.35869558526336154,0.457405498335207,0.210943041564296,-0.024870103381456905,0.430468891229849,0.36043714080320877,0.6182048363947807,1.1284125825510003,-1.812216028287741,-1.388853942113607,-0.4645232862317478,0.6636877059936523 +715602,1,-0.6247506469344914,-1.0750207306456427,-1.1815354958941209,,,,,,,,,,-1.9017700713146695,0.7456311526478686,-0.5613893220144716,0.817485511302948 +715602,2,-0.5713494298017712,-1.1183201738829107,-0.5319322799029617,,,,,,,,,,,,,0.817485511302948 +715804,0,0.4168578054263319,0.03485367321088963,-0.2178739015887193,-0.674008317525728,-1.7415956520556326,-2.102727137958524,-1.8873679967335701,-0.5672445341200663,-1.7094390147775689,-0.835055314390411,-0.9544903321671111,0.28831555240026907,1.267782866548965,-0.2910724881500066,0.8737234706124865,-0.14483897387981415 +715804,1,-0.33638838430182605,-0.3623194500333156,-0.26240977468570165,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.310551991190808,0.1670992225408554 +715804,2,-0.7681343199482997,-0.10626094735465771,-0.441929748703751,,,,,,,,,,,,,0.1670992225408554 +715805,0,-0.03493941435979663,0.7252024287150527,0.5228621660905376,-0.674008317525728,-1.7415956520556326,-2.102727137958524,-1.8873679967335701,-0.5672445341200663,-1.7094390147775689,-0.835055314390411,-0.9544903321671111,0.28831555240026907,1.267782866548965,-0.2910724881500066,-0.4645232862317478,-0.3943285644054413 +715805,1,0.7209399120179469,0.2612941705024705,-0.6709100952227768,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.8122266528381351,-0.00778490724042058 +715805,2,0.5109674660041365,-0.41766378628642786,0.638100625686777,,,,,,,,,,,,,-0.00778490724042058 +717501,0,-0.9385338539320537,-0.6554950822932735,-0.5882419354283478,-1.1164445321960008,0.1441771662974643,0.457405498335207,-0.06274970256151263,-0.9288274879458058,-0.8863975124670236,1.5559295959968287,-0.16814274788616518,0.28831555240026907,0.49778314283978853,0.806708965813594,0.8737234706124865,1.6569554805755615 +717501,1,-0.528629892723603,-0.7186700903394792,-0.9772853356255832,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.310551991190808,1.766926884651184 +717501,2,0.31418257585760784,-0.8069173349511406,-0.441929748703751,,,,,,,,,,,,,1.766926884651184 +722802,0,-1.5032803786647144,-1.000669460045355,-0.8351539579881,-0.8214870557491524,-0.9872865247143939,-0.1115128652856221,-0.06274970256151263,-0.6275083597576895,-0.22796431061858732,-0.835055314390411,-0.9544903321671111,-1.3918785079011935,0.49778314283978853,0.806708965813594,-0.4645232862317478,0.5757072567939758 +722802,1,-1.1053544179889336,-1.1641083907221836,-1.1815354958941209,,,,,,,,,,-0.47569662927593015,1.8141914255436393,-0.8122266528381351,2.0254647731781006 +722802,2,-0.7681343199482997,-0.8847680446840831,0.18808796969072364,,,,,,,,,,,,,2.0254647731781006 +722803,0,-0.5996859390924573,-0.3103207045411919,1.2635982337697944,-0.8214870557491524,-0.9872865247143939,-0.1115128652856221,-0.06274970256151263,-0.6275083597576895,-0.22796431061858732,-0.835055314390411,-0.9544903321671111,-1.3918785079011935,-1.0422163045785646,-0.2910724881500066,-0.4645232862317478,1.927304744720459 +722803,1,0.33645689517439314,-0.5404947701863974,-1.8964110568340025,,,,,,,,,,0.9503768127628092,0.7456311526478686,2.197821317045828,1.9618428945541382 +722803,2,0.7077523561506651,-1.2740215933487957,-0.7119373423013831,,,,,,,,,,,,,1.9618428945541382 +723503,0,-1.3903310737181822,-1.1157275859627156,-0.9586099692679761,-0.23157210285545515,-1.4901592762752198,-2.671645501579353,-0.7013661055217327,-0.748036011032936,-1.3802224138533508,-1.432801541987221,-0.9544903321671111,-0.9718299928258278,-0.27221658086938805,-0.2910724881500066,-0.24148216009104212,1.4152991771697998 +723503,1,-0.04802612166916067,-0.00596880972715211,0.14609054585137357,,,,,,,,,,1.663413533782179,-1.3914893931436731,-0.8122266528381351,0.9502330422401428 +723503,2,-0.37456453965524245,-0.2619623668205428,-1.7019651854927003,,,,,,,,,,,,,0.9502330422401428 +723602,0,-1.27738176877165,-0.5404369563759129,-0.7116979467082238,-0.23157210285545515,-0.2329773973731551,-0.1115128652856221,1.2144831033589276,0.6982958042700221,-0.7217892120049145,-0.23730908679360116,-0.5613165400266386,-0.5517814777504622,0.49778314283978853,-0.2910724881500066,-0.24148216009104212,2.1158957481384277 +723602,1,-0.9131129095671567,0.17220651042592966,0.6567159465227176,,,,,,,,,,0.9503768127628092,2.88275169843941,-0.8122266528381351,2.077674627304077 +723602,2,-0.6697418748750354,-0.41766378628642786,0.638100625686777,,,,,,,,,,,,,2.077674627304077 +724402,0,-0.37378732919939306,0.3800280509629712,-0.2178739015887193,-1.4114020086428494,-1.3644410883850133,-0.3959720470960366,-0.06274970256151263,-0.024870103381456905,-1.2156141133912417,-0.835055314390411,-1.3476641243075844,-0.5517814777504622,-1.0422163045785646,-0.2910724881500066,0.20460009219036931,0.4316272437572479 +724402,1,-0.14414687588004912,0.08311885034938876,1.0652162670597927,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,0.4419600012801827,0.5832832455635071 +724402,2,-0.07938720443544948,0.7500968597077102,0.8181056880851983,,,,,,,,,,,,,0.5832832455635071 +724403,0,0.3039085004797998,0.9553186805497738,0.6463181773704137,-1.4114020086428494,-1.3644410883850133,-0.3959720470960366,-0.06274970256151263,-0.024870103381456905,-1.2156141133912417,-0.835055314390411,-1.3476641243075844,-0.5517814777504622,-1.0422163045785646,-1.388853942113607,0.20460009219036931,0.5832832455635071 +724403,1,-0.33638838430182605,0.7067324708851749,0.963091186925524,,,,,,,,,,0.9503768127628092,-1.3914893931436731,0.4419600012801827,0.4146827459335327 +724403,2,-0.1777796495087138,1.9178575057018483,0.18808796969072364,,,,,,,,,,,,,0.4146827459335327 +728503,0,-0.48673663414592516,0.4950861768803317,-0.7116979467082238,0.358342850038242,0.6470499178582901,1.3107830437664505,1.4881758474847362,0.2161851991690361,0.9242937926161762,-1.432801541987221,-0.5613165400266386,-0.13173296267509654,-1.812216028287741,-0.2910724881500066,-0.9106055385131593,1.6323636770248413 +728503,1,0.2403361409635047,-0.00596880972715211,0.24821562598564237,,,,,,,,,,-1.9017700713146695,-0.3229291202479022,0.4419600012801827,1.8294824361801147 +728503,2,0.2157901307843435,0.5943954402418251,0.5480980944875663,,,,,,,,,,,,,1.8294824361801147 +728601,0,-0.2608380242528609,-0.42537883045855246,-0.7116979467082238,0.9482578029319392,1.0242044815289095,1.026323861956036,-0.06274970256151263,0.09565754789378961,1.9119435953888306,-0.835055314390411,-0.16814274788616518,-0.5517814777504622,0.49778314283978853,0.806708965813594,0.20460009219036931,2.760448932647705 +728601,1,0.2403361409635047,-0.9859330705691017,-0.46665993495423924,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.5613893220144716,2.914477825164795 +728601,2,-0.1777796495087138,-0.8069173349511406,-0.5319322799029617,,,,,,,,,,,,,2.914477825164795 +731702,0,-1.5032803786647144,-1.000669460045355,-0.8351539579881,-0.674008317525728,-0.35869558526336154,-0.1115128652856221,-0.1539806172701155,-1.5314657443220383,-0.5571809115428055,1.5559295959968287,0.22503104425430823,0.7083640674756347,-0.27221658086938805,-1.388853942113607,0.42764121833107505,1.8684189319610596 +731702,1,-1.201475172199822,-0.4514071101098565,-0.8751602554913144,,,,,,,,,,0.2373400917434395,-0.3229291202479022,0.6927973321038463,1.9674564599990845 +731702,2,-0.7681343199482997,-0.729066625218198,0.45809556328835566,,,,,,,,,,,,,1.9674564599990845 +732403,0,-1.0514831588785858,-0.3103207045411919,0.15249413225090913,-0.8214870557491524,-1.3644410883850133,-0.9648904107168657,-0.9750588496475414,-1.712257221234908,-1.5448307143154598,-0.23730908679360116,-0.5613165400266386,-1.3918785079011935,-1.0422163045785646,-1.388853942113607,-0.9106055385131593,0.042797770351171494 +732403,1,0.14421538675261625,0.7958201309617158,-0.9772853356255832,,,,,,,,,,0.2373400917434395,1.8141914255436393,-0.059714660367144415,0.4141573905944824 +732403,2,-0.27617209458197817,-0.2619623668205428,-0.981944935899015,,,,,,,,,,,,,0.4141573905944824 +737702,0,-0.37378732919939306,-0.1952625786238314,-0.4647859241484716,-1.2639232704194252,-2.4959047793968714,-0.6804312289064511,-1.1575206790647472,-1.7725210468725314,-1.0510058129291326,0.9581833684000187,1.0113786285352542,0.28831555240026907,-0.27221658086938805,-0.2910724881500066,-0.6875644123724536,0.8404447436332703 +737702,1,-0.9131129095671567,-1.1641083907221836,-1.4879107362969273,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.310551991190808,1.1139354705810547 +737702,2,-0.1777796495087138,-1.1961708836158533,-1.1619499982974364,,,,,,,,,,,,,1.1139354705810547 +737801,0,0.19095919553326762,1.4155511842192159,0.6463181773704137,0.6533003264850905,-0.7358501489339809,0.7418646801456215,0.7583285298159133,-0.20566158029432668,0.2658605907677399,0.9581833684000187,0.6182048363947807,0.28831555240026907,-0.27221658086938805,-1.388853942113607,-0.6875644123724536,1.8687939643859863 +737801,1,0.4325776493852816,2.755748652645615,0.8609661067912552,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.8122266528381351,1.8571891784667969 +737801,2,0.019005240637814846,1.5286039570371357,0.638100625686777,,,,,,,,,,,,,1.8571891784667969 +738201,0,0.07800989058673549,-0.08020445270647089,0.5228621660905376,-0.08409336463203088,-0.35869558526336154,0.457405498335207,0.4846357856901046,0.2161851991690361,-1.0510058129291326,-0.23730908679360116,-0.16814274788616518,0.7083640674756347,0.49778314283978853,0.806708965813594,-0.9106055385131593,1.10997474193573 +738201,1,-0.04802612166916067,0.7958201309617158,0.45246578625417994,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.310551991190808,-0.5867891311645508 +738201,2,0.41257502093087217,0.282992601310055,0.18808796969072364,,,,,,,,,,,,,-0.5867891311645508 +738802,0,-0.03493941435979663,-0.3103207045411919,-0.2178739015887193,0.5058215882616662,1.2756408573093225,0.457405498335207,0.11971212685569313,0.035393722256166354,0.9242937926161762,0.36043714080320877,0.6182048363947807,-0.13173296267509654,-1.812216028287741,0.806708965813594,0.8737234706124865,1.7749511003494263 +738802,1,-0.9131129095671567,-0.3623194500333156,0.45246578625417994,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.5613893220144716,1.7447443008422852 +738802,2,0.8061448012239295,-0.028410237621715174,0.908108219284409,,,,,,,,,,,,,1.7447443008422852 +739602,0,-0.2608380242528609,0.3800280509629712,0.029038120971032973,-0.674008317525728,-0.10725920948294862,0.457405498335207,1.1232521886503248,0.4572405017195292,-0.22796431061858732,0.36043714080320877,0.22503104425430823,0.7083640674756347,1.267782866548965,0.806708965813594,-0.018441033950336395,2.3018417358398438 +739602,1,0.048094632541727786,0.17220651042592966,-1.079410415759852,,,,,,,,,,0.2373400917434395,0.7456311526478686,0.4419600012801827,2.2991676330566406 +739602,2,-0.27617209458197817,-0.41766378628642786,0.45809556328835566,,,,,,,,,,,,,2.2991676330566406 +742301,0,0.3039085004797998,0.4950861768803317,0.6463181773704137,0.6533003264850905,0.8984862936387031,0.7418646801456215,-0.1539806172701155,0.09565754789378961,1.7473352949267216,1.5559295959968287,-0.16814274788616518,0.7083640674756347,1.267782866548965,0.806708965813594,0.20460009219036931,1.4201829433441162 +742301,1,0.048094632541727786,-0.09505646980369299,0.14609054585137357,,,,,,,,,,1.663413533782179,-0.3229291202479022,0.4419600012801827,1.8486546277999878 +742301,2,0.11739768571107917,-0.18411165708760024,0.638100625686777,,,,,,,,,,,,,1.8486546277999878 +743701,0,0.3039085004797998,0.9553186805497738,0.15249413225090913,0.2108641118148177,-0.8615683368241874,-0.9648904107168657,0.5758667003987075,-0.6275083597576895,-0.22796431061858732,1.5559295959968287,1.7977262128162,-0.9718299928258278,1.267782866548965,1.9044904197771946,0.8737234706124865,1.5084161758422852 +743701,1,-0.528629892723603,-0.09505646980369299,0.6567159465227176,,,,,,,,,,1.663413533782179,0.7456311526478686,0.6927973321038463,1.616479516029358 +743701,2,-0.6697418748750354,-0.028410237621715174,-0.35192721750454037,,,,,,,,,,,,,1.616479516029358 +744601,0,-1.3903310737181822,-3.0717157265578443,-3.0573621610258708,-1.2639232704194252,-2.2444684036164584,-1.8182679561481092,-2.708446229110996,-2.5559507801616337,-1.0510058129291326,-4.42153267997127,-0.9544903321671111,-0.9718299928258278,1.267782866548965,-1.388853942113607,-0.018441033950336395,-0.6931471824645996 +744601,1,-2.7394072395740374,-1.1641083907221836,-1.2836605760283897,,,,,,,,,,0.9503768127628092,-1.3914893931436731,-0.059714660367144415,-0.5048196315765381 +744601,2,-0.1777796495087138,-1.585424432280566,-2.2419803726879644,,,,,,,,,,,,,-0.5048196315765381 +744602,0,-0.37378732919939306,-0.08020445270647089,-0.5882419354283478,-1.2639232704194252,-2.2444684036164584,-1.8182679561481092,-2.708446229110996,-2.5559507801616337,-1.0510058129291326,-4.42153267997127,-0.9544903321671111,-0.9718299928258278,0.49778314283978853,-1.388853942113607,-0.24148216009104212,-0.5048196315765381 +744602,1,-2.1626827143087066,0.8849077910382567,-0.46665993495423924,,,,,,,,,,1.663413533782179,-1.3914893931436731,-0.5613893220144716,-0.23798243701457977 +744602,2,-0.9649192100948284,-0.729066625218198,-0.08191962390690835,,,,,,,,,,,,,-0.23798243701457977 +744804,0,-0.2608380242528609,-0.5404369563759129,-0.2178739015887193,-1.4114020086428494,-1.615877464165426,-2.3871863197689382,-2.3435225702765847,-2.134104000698271,-0.8863975124670236,-0.23730908679360116,-0.5613165400266386,-2.2319755380519246,-0.27221658086938805,-1.388853942113607,-0.6875644123724536,0.25154638290405273 +744804,1,-1.585958189043376,-0.00596880972715211,0.04396546571710477,,,,,,,,,,-1.9017700713146695,-1.3914893931436731,-0.310551991190808,0.8474550843238831 +744804,2,-0.7681343199482997,-0.729066625218198,-1.251952529496647,,,,,,,,,,,,,0.8474550843238831 +744805,0,-0.5996859390924573,-0.6554950822932735,-0.5882419354283478,-1.4114020086428494,-1.615877464165426,-2.3871863197689382,-2.3435225702765847,-2.134104000698271,-0.8863975124670236,-0.23730908679360116,-0.5613165400266386,-2.2319755380519246,-0.27221658086938805,-1.388853942113607,-0.24148216009104212,0.25154638290405273 +744805,1,-1.585958189043376,-0.09505646980369299,0.6567159465227176,,,,,,,,,,-1.1887333502953,-1.3914893931436731,0.6927973321038463,0.8474550843238831 +744805,2,-0.4729569847285068,0.5165447305088826,1.0881132816828303,,,,,,,,,,,,,0.8474550843238831 +745101,0,-0.14788871930632877,-0.1952625786238314,0.15249413225090913,-0.8214870557491524,1.2756408573093225,0.457405498335207,-0.518904276104527,-1.8327848725101548,-0.06335601015647824,1.5559295959968287,1.7977262128162,0.7083640674756347,-1.0422163045785646,-1.388853942113607,-0.9106055385131593,2.060159683227539 +745101,1,0.33645689517439314,-0.09505646980369299,0.45246578625417994,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.8122266528381351,1.5717346668243408 +745101,2,1.8884616970298371,0.5165447305088826,1.5381259376788836,,,,,,,,,,,,,1.5717346668243408 +745102,0,0.7557057202659283,1.4155511842192159,1.1401422224899183,-0.8214870557491524,1.2756408573093225,0.457405498335207,-0.518904276104527,-1.8327848725101548,-0.06335601015647824,1.5559295959968287,1.7977262128162,0.7083640674756347,-1.0422163045785646,0.806708965813594,-0.4645232862317478,1.5717346668243408 +745102,1,-0.04802612166916067,1.5085214115740428,2.494967388939556,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.8122266528381351,1.607377529144287 +745102,2,1.0029296913704582,0.9836489889065378,0.008082907292302316,,,,,,,,,,,,,1.607377529144287 +746404,0,-1.164432463825118,-0.6554950822932735,-0.4647859241484716,-0.8214870557491524,-1.1130047126046003,-0.9648904107168657,-0.518904276104527,-0.5069807084824429,-0.5571809115428055,1.5559295959968287,0.6182048363947807,0.7083640674756347,0.49778314283978853,0.806708965813594,-0.9106055385131593,1.4185444116592407 +746404,1,-0.33638838430182605,-0.00596880972715211,-0.9772853356255832,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.5613893220144716,1.5729546546936035 +746404,2,-0.5713494298017712,-0.10626094735465771,-0.26192468630532967,,,,,,,,,,,,,1.5729546546936035 +747902,0,0.19095919553326762,-0.42537883045855246,0.15249413225090913,-1.2639232704194252,-0.8615683368241874,0.457405498335207,0.4846357856901046,-0.024870103381456905,-1.2156141133912417,1.5559295959968287,1.0113786285352542,0.7083640674756347,0.49778314283978853,0.806708965813594,-0.9106055385131593,1.8684189319610596 +747902,1,-0.14414687588004912,-0.00596880972715211,-0.05815961441716403,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.8122266528381351,2.0360493659973145 +747902,2,-0.5713494298017712,0.5943954402418251,0.18808796969072364,,,,,,,,,,,,,2.0360493659973145 +748003,0,0.07800989058673549,-0.08020445270647089,-0.3413299128685955,-0.674008317525728,-1.4901592762752198,0.457405498335207,-0.42767336139592416,-0.6877721853953127,-0.7217892120049145,0.9581833684000187,1.4045524206757267,0.28831555240026907,-1.0422163045785646,-1.388853942113607,-0.9106055385131593,2.369898557662964 +748003,1,0.14421538675261625,-0.2732317899567748,1.371591507462599,,,,,,,,,,0.2373400917434395,-1.3914893931436731,3.7028453019878094,2.332099676132202 +748003,2,-0.37456453965524245,0.1272911818441699,0.5480980944875663,,,,,,,,,,,,,2.332099676132202 +749701,0,-0.7126352440389895,-1.000669460045355,-0.8351539579881,-1.4114020086428494,-1.867313839945839,-0.3959720470960366,-0.8838279349389385,-1.0493551392210523,-0.8863975124670236,-0.835055314390411,-0.9544903321671111,-0.9718299928258278,0.49778314283978853,0.806708965813594,-0.9106055385131593,1.9662433862686157 +749701,1,-0.6247506469344914,-0.3623194500333156,-0.8751602554913144,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.310551991190808,0.7462761998176575 +749701,2,-0.1777796495087138,-0.10626094735465771,0.45809556328835566,,,,,,,,,,,,,0.7462761998176575 +749802,0,1.320452244998589,0.4950861768803317,0.6463181773704137,0.9482578029319392,1.149922669419116,1.3107830437664505,1.3969449327761334,0.6380319786323989,1.2535103935403944,1.5559295959968287,-0.16814274788616518,-1.8119270229765592,-1.0422163045785646,-1.388853942113607,0.8737234706124865,2.0841472148895264 +749802,1,0.7209399120179469,0.4394694906555523,1.0652162670597927,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,3.7028453019878094,2.1526081562042236 +749802,2,1.7900692519565728,0.7500968597077102,0.7281031568859877,,,,,,,,,,,,,2.1526081562042236 +750103,0,-0.5996859390924573,-0.8856113341279945,-0.5882419354283478,-0.23157210285545515,-1.2387229004948068,-0.3959720470960366,-0.7013661055217327,-0.20566158029432668,-0.06335601015647824,-0.835055314390411,-0.9544903321671111,0.7083640674756347,-1.812216028287741,-1.388853942113607,0.20460009219036931,0.051239874213933945 +750103,1,-1.6820789432542644,-1.431371370951806,-1.1815354958941209,,,,,,,,,,-1.1887333502953,-0.3229291202479022,0.4419600012801827,2.4011685848236084 +750103,2,-1.4568814354611501,-1.2740215933487957,-2.061975310289543,,,,,,,,,,,,,2.4011685848236084 +750104,0,-0.9385338539320537,-1.000669460045355,-0.8351539579881,-0.23157210285545515,-1.2387229004948068,-0.3959720470960366,-0.7013661055217327,-0.20566158029432668,-0.06335601015647824,-0.835055314390411,-0.9544903321671111,0.7083640674756347,-1.0422163045785646,-1.388853942113607,1.319805722893898,-0.6931471824645996 +750104,1,-1.8743204516760412,-0.18414412988023388,-0.8751602554913144,,,,,,,,,,-0.47569662927593015,1.8141914255436393,-0.5613893220144716,2.254472017288208 +750104,2,-1.6536663256076787,-0.4955144960193704,-1.3419550606958577,,,,,,,,,,,,,2.254472017288208 +750105,0,-0.03493941435979663,0.03485367321088963,-0.3413299128685955,-0.23157210285545515,-1.2387229004948068,-0.3959720470960366,-0.7013661055217327,-0.20566158029432668,-0.06335601015647824,-0.835055314390411,-0.9544903321671111,0.7083640674756347,-1.0422163045785646,0.806708965813594,-0.018441033950336395,2.254472017288208 +750105,1,0.14421538675261625,-0.09505646980369299,-0.16028469455143282,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.5613893220144716,1.6728168725967407 +750105,2,-0.37456453965524245,0.282992601310055,0.008082907292302316,,,,,,,,,,,,,1.6728168725967407 +750301,0,-0.5996859390924573,-0.6554950822932735,-0.8351539579881,-1.2639232704194252,-1.615877464165426,-1.2493495925272802,-0.8838279349389385,-1.8327848725101548,-0.3925726110806964,0.9581833684000187,0.6182048363947807,0.28831555240026907,0.49778314283978853,-0.2910724881500066,-0.6875644123724536,1.5790977478027344 +750301,1,-0.528629892723603,-1.431371370951806,-1.6921608965654649,,,,,,,,,,-0.47569662927593015,0.7456311526478686,0.9436346629275099,1.5715423822402954 +750301,2,-1.4568814354611501,-1.6632751420135086,-1.3419550606958577,,,,,,,,,,,,,1.5715423822402954 +750404,0,-0.7126352440389895,-0.42537883045855246,-0.5882419354283478,-1.1164445321960008,-1.3644410883850133,-0.9648904107168657,-0.42767336139592416,-0.3261892315695732,-0.8863975124670236,-0.835055314390411,-0.16814274788616518,-1.8119270229765592,-1.0422163045785646,-1.388853942113607,0.8737234706124865,1.4227486848831177 +750404,1,0.7209399120179469,-1.1641083907221836,-0.9772853356255832,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.8122266528381351,1.0968455076217651 +750404,2,0.11739768571107917,-1.040469464149968,0.368093032089145,,,,,,,,,,,,,1.0968455076217651 +750405,0,-0.9385338539320537,0.14991179912825014,-0.09441789030884316,-1.1164445321960008,-1.3644410883850133,-0.9648904107168657,-0.42767336139592416,-0.3261892315695732,-0.8863975124670236,-0.835055314390411,-0.16814274788616518,-1.8119270229765592,-0.27221658086938805,-1.388853942113607,0.8737234706124865,1.4227486848831177 +750405,1,-0.6247506469344914,0.08311885034938876,0.6567159465227176,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.5613893220144716,1.0968455076217651 +750405,2,-0.8665267650215641,-0.41766378628642786,-0.6219348111021723,,,,,,,,,,,,,1.0968455076217651 +751402,0,0.19095919553326762,0.9553186805497738,2.004334301449051,0.06338537359139342,1.149922669419116,0.7418646801456215,-0.1539806172701155,-0.9288274879458058,0.595077191691958,1.5559295959968287,1.7977262128162,1.548461097626366,-1.812216028287741,-0.2910724881500066,0.8737234706124865,1.0286067724227905 +751402,1,0.048094632541727786,0.9739954511147976,0.8609661067912552,,,,,,,,,,-1.1887333502953,0.7456311526478686,-0.310551991190808,1.3031600713729858 +751402,2,0.019005240637814846,0.6722461499747677,0.908108219284409,,,,,,,,,,,,,1.3031600713729858 +752501,0,-1.0514831588785858,-1.000669460045355,-0.8351539579881,0.2108641118148177,0.39561354207787724,0.17294631652479245,1.3969449327761334,0.3367128504442826,-0.5571809115428055,-0.23730908679360116,-0.16814274788616518,-0.13173296267509654,0.49778314283978853,3.002271873740795,0.8737234706124865,0.9975906014442444 +752501,1,-0.528629892723603,-1.3422837108752652,-1.1815354958941209,,,,,,,,,,1.663413533782179,1.8141914255436393,1.1944719937511734,1.666351318359375 +752501,2,-0.6697418748750354,-1.429723012814681,-0.26192468630532967,,,,,,,,,,,,,1.666351318359375 +752701,0,1.5463508548916531,0.9553186805497738,0.3994061548106614,1.833130232272485,0.7727681057484966,0.457405498335207,1.3057140180675306,1.602253188834371,1.9119435953888306,1.5559295959968287,1.0113786285352542,1.1284125825510003,1.267782866548965,0.806708965813594,0.20460009219036931,2.900031805038452 +752701,1,-0.14414687588004912,0.3503818305790114,0.04396546571710477,,,,,,,,,,0.9503768127628092,0.7456311526478686,0.4419600012801827,2.5977070331573486 +752701,2,-0.4729569847285068,1.3729025375712505,-0.35192721750454037,,,,,,,,,,,,,2.5977070331573486 +756001,0,-1.27738176877165,-0.5404369563759129,-0.5882419354283478,-0.5265295793023037,0.1441771662974643,0.457405498335207,0.7583285298159133,0.7585596299076455,0.430468891229849,-0.23730908679360116,0.22503104425430823,0.7083640674756347,0.49778314283978853,-1.388853942113607,-0.6875644123724536,0.8771734237670898 +756001,1,-0.14414687588004912,-0.18414412988023388,-1.4879107362969273,,,,,,,,,,0.9503768127628092,-0.3229291202479022,0.4419600012801827,0.5719466209411621 +756001,2,-0.37456453965524245,-0.41766378628642786,-1.251952529496647,,,,,,,,,,,,,0.5719466209411621 +757502,0,-0.2608380242528609,-0.08020445270647089,-0.5882419354283478,-0.23157210285545515,1.0242044815289095,0.7418646801456215,0.5758667003987075,-0.6877721853953127,-0.3925726110806964,1.5559295959968287,1.7977262128162,1.1284125825510003,-0.27221658086938805,-0.2910724881500066,-0.24148216009104212,2.3008182048797607 +757502,1,-0.04802612166916067,-0.6295824302629383,1.7800918279996742,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.5613893220144716,2.275500535964966 +757502,2,-0.4729569847285068,-0.573365205752313,0.2780905008899343,,,,,,,,,,,,,2.275500535964966 +760602,0,-0.2608380242528609,-0.6554950822932735,-0.7116979467082238,-0.37905084107887943,1.0242044815289095,0.457405498335207,-0.7013661055217327,-1.1096189648586756,-1.0510058129291326,-0.835055314390411,1.4045524206757267,1.9685096127017316,1.267782866548965,-1.388853942113607,-0.24148216009104212,2.0023252964019775 +760602,1,0.4325776493852816,-0.896845410492561,-1.2836605760283897,,,,,,,,,,1.663413533782179,-1.3914893931436731,0.4419600012801827,2.1837191581726074 +760602,2,-0.5713494298017712,-0.573365205752313,-1.0719474670982256,,,,,,,,,,,,,2.1837191581726074 +761601,0,-1.3903310737181822,-0.8856113341279945,-0.8351539579881,-0.674008317525728,-1.615877464165426,-2.102727137958524,-0.7925970202303356,-0.26592540593194997,-0.5571809115428055,0.36043714080320877,-0.16814274788616518,-0.9718299928258278,-0.27221658086938805,0.806708965813594,0.20460009219036931,0.281955748796463 +761601,1,-1.393716680621599,-1.520459031028347,-1.1815354958941209,,,,,,,,,,1.663413533782179,0.7456311526478686,-1.0630639836617988,-0.2370988428592682 +761601,2,-0.6697418748750354,-1.741125851746451,-1.251952529496647,,,,,,,,,,,,,-0.2370988428592682 +761802,0,-0.8255845489855216,-0.6554950822932735,-0.5882419354283478,-1.1164445321960008,-1.615877464165426,-1.5338087743376947,-0.61013519081313,-0.024870103381456905,-1.2156141133912417,-2.628293997180841,-0.5613165400266386,-0.9718299928258278,-0.27221658086938805,-1.388853942113607,1.7658879751753094,0.9014517664909363 +761802,1,0.048094632541727786,-0.80775775041602,-0.16028469455143282,,,,,,,,,,1.663413533782179,2.88275169843941,0.4419600012801827,0.6268419027328491 +761802,2,-0.6697418748750354,-0.8069173349511406,-0.17192215510611902,,,,,,,,,,,,,0.6268419027328491 +764502,0,-1.164432463825118,-1.000669460045355,-0.8351539579881,-0.9689657939725767,-1.7415956520556326,-1.8182679561481092,-0.7013661055217327,-2.5559507801616337,-0.8863975124670236,-0.23730908679360116,0.6182048363947807,-0.13173296267509654,-1.0422163045785646,-1.388853942113607,-1.3566877907945707,0.1766740381717682 +764502,1,0.048094632541727786,-0.4514071101098565,-0.46665993495423924,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-1.3139013144854623,0.24496731162071228 +764502,2,-0.8665267650215641,-0.2619623668205428,-0.26192468630532967,,,,,,,,,,,,,0.24496731162071228 +767002,0,0.6427564153193962,-0.1952625786238314,0.2759501435307853,-1.2639232704194252,0.1441771662974643,-1.2493495925272802,-1.339982508481953,-0.38645305720719647,-1.5448307143154598,1.5559295959968287,1.7977262128162,-0.5517814777504622,-0.27221658086938805,0.806708965813594,-0.4645232862317478,1.6853389739990234 +767002,1,-0.528629892723603,-0.2732317899567748,-0.36453485481997044,,,,,,,,,,-0.47569662927593015,1.8141914255436393,-0.059714660367144415,1.1561801433563232 +767002,2,-0.7681343199482997,-0.729066625218198,1.3581208752804623,,,,,,,,,,,,,1.1561801433563232 +768401,0,1.207502940052057,0.2649699250456107,0.15249413225090913,0.2108641118148177,-0.35869558526336154,0.457405498335207,-0.61013519081313,0.15592137353141286,-0.06335601015647824,-0.835055314390411,-0.16814274788616518,-1.8119270229765592,-0.27221658086938805,-1.388853942113607,-0.24148216009104212,1.9648857116699219 +768401,1,1.8743889625486083,0.17220651042592966,0.35034070611991114,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.5613893220144716,1.8869439363479614 +768401,2,0.7077523561506651,-0.10626094735465771,0.368093032089145,,,,,,,,,,,,,1.8869439363479614 +768802,0,-1.6162296836112464,-1.5759600896321577,-1.4524340143874808,-0.8214870557491524,-0.2329773973731551,-0.3959720470960366,0.3021739562728989,0.8790872811828919,-0.5571809115428055,0.36043714080320877,1.0113786285352542,1.548461097626366,-0.27221658086938805,-0.2910724881500066,-0.9106055385131593,0.6174983382225037 +768802,1,-1.1053544179889336,-1.0750207306456427,-0.36453485481997044,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.310551991190808,1.6572585105895996 +768802,2,0.7077523561506651,-0.41766378628642786,-0.35192721750454037,,,,,,,,,,,,,1.6572585105895996 +769101,0,-0.8255845489855216,-1.000669460045355,-0.8351539579881,-1.1164445321960008,-0.48441377315356804,-0.1115128652856221,0.3934048709815018,-0.26592540593194997,-0.7217892120049145,-0.835055314390411,1.7977262128162,-0.13173296267509654,1.267782866548965,0.806708965813594,0.8737234706124865,1.8467730283737183 +769101,1,0.14421538675261625,0.8849077910382567,0.6567159465227176,,,,,,,,,,-1.9017700713146695,1.8141914255436393,-0.8122266528381351,2.445986270904541 +769101,2,0.2157901307843435,0.5165447305088826,1.2681183440812516,,,,,,,,,,,,,2.445986270904541 +769403,0,-0.5996859390924573,-0.08020445270647089,0.2759501435307853,-0.8214870557491524,-1.867313839945839,-1.8182679561481092,-0.7925970202303356,-0.14539775465670343,-1.0510058129291326,-1.432801541987221,-1.3476641243075844,-0.5517814777504622,0.49778314283978853,0.806708965813594,0.8737234706124865,0.9882259368896484 +769403,1,0.52869840359617,0.17220651042592966,0.24821562598564237,,,,,,,,,,-1.9017700713146695,-0.3229291202479022,-0.059714660367144415,1.3424479961395264 +769403,2,0.8061448012239295,-0.028410237621715174,0.18808796969072364,,,,,,,,,,,,,1.3424479961395264 +769501,0,-0.14788871930632877,-0.8856113341279945,0.029038120971032973,-0.9689657939725767,-0.9872865247143939,-0.3959720470960366,-1.24875159377335,-0.6877721853953127,-0.5571809115428055,-0.835055314390411,-0.5613165400266386,-0.9718299928258278,-0.27221658086938805,0.806708965813594,-0.9106055385131593,1.6239888668060303 +769501,1,-0.24026763009093757,-0.09505646980369299,-0.05815961441716403,,,,,,,,,,0.9503768127628092,1.8141914255436393,-0.8122266528381351,1.8519121408462524 +769501,2,-0.7681343199482997,0.20514189157711243,-0.26192468630532967,,,,,,,,,,,,,1.8519121408462524 +769504,0,0.07800989058673549,0.4950861768803317,0.5228621660905376,-0.9689657939725767,-0.9872865247143939,-0.3959720470960366,-1.24875159377335,-0.6877721853953127,-0.5571809115428055,-0.835055314390411,-0.5613165400266386,-0.9718299928258278,1.267782866548965,-0.2910724881500066,-0.9106055385131593,1.3828768730163574 +769504,1,0.2403361409635047,0.08311885034938876,0.45246578625417994,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-1.0630639836617988,2.1283438205718994 +769504,2,0.31418257585760784,0.6722461499747677,-0.17192215510611902,,,,,,,,,,,,,2.1283438205718994 +775401,0,0.529807110372864,3.1414230729796238,3.1154384029679365,0.06338537359139342,0.6470499178582901,0.17294631652479245,0.940790359233119,-0.26592540593194997,0.10125229030563083,0.9581833684000187,-0.5613165400266386,1.9685096127017316,-0.27221658086938805,0.806708965813594,-0.6875644123724536,1.5523203611373901 +775401,1,-0.14414687588004912,0.9739954511147976,1.2694664273283303,,,,,,,,,,-1.1887333502953,0.7456311526478686,-0.8122266528381351,2.3468987941741943 +775401,2,-0.07938720443544948,2.0735589251677333,0.368093032089145,,,,,,,,,,,,,2.3468987941741943 +778903,0,-0.48673663414592516,-1.000669460045355,-0.8351539579881,-0.9689657939725767,-0.10725920948294862,-1.8182679561481092,-2.2522916555679817,-1.1698827904962987,-1.7094390147775689,-0.835055314390411,-0.5613165400266386,1.1284125825510003,-2.5822157519969178,-0.2910724881500066,-0.4645232862317478,2.3154640197753906 +778903,1,0.33645689517439314,-0.3623194500333156,-0.26240977468570165,,,,,,,,,,0.9503768127628092,0.7456311526478686,0.6927973321038463,1.97854483127594 +778903,2,-0.4729569847285068,-0.18411165708760024,-0.5319322799029617,,,,,,,,,,,,,1.97854483127594 +778904,0,-0.5996859390924573,-0.3103207045411919,-0.3413299128685955,-0.9689657939725767,-0.10725920948294862,-1.8182679561481092,-2.2522916555679817,-1.1698827904962987,-1.7094390147775689,-0.835055314390411,-0.5613165400266386,1.1284125825510003,-1.812216028287741,-0.2910724881500066,-0.4645232862317478,1.2272639274597168 +778904,1,0.6248191578070585,1.0630831111913384,0.35034070611991114,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.5613893220144716,1.3009729385375977 +778904,2,-0.7681343199482997,1.9178575057018483,-1.7019651854927003,,,,,,,,,,,,,1.3009729385375977 +779702,0,-1.27738176877165,-0.6554950822932735,-0.4647859241484716,-0.9689657939725767,-0.8615683368241874,-1.2493495925272802,0.028481212147090252,-0.6275083597576895,-0.7217892120049145,-0.835055314390411,-0.5613165400266386,-0.13173296267509654,-0.27221658086938805,-1.388853942113607,-1.3566877907945707,-0.05908258259296417 +779702,1,-0.9131129095671567,-0.5404947701863974,0.35034070611991114,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,-0.059714660367144415,-0.14796800911426544 +779702,2,0.11739768571107917,-0.41766378628642786,0.09808543849151298,,,,,,,,,,,,,-0.14796800911426544 +781001,0,-0.48673663414592516,-0.6554950822932735,-0.8351539579881,-0.9689657939725767,-0.7358501489339809,-0.9648904107168657,-0.2452115319787184,-0.14539775465670343,-1.0510058129291326,-0.835055314390411,-0.16814274788616518,0.28831555240026907,-2.5822157519969178,-1.388853942113607,-1.133646664653865,0.8606327176094055 +781001,1,0.14421538675261625,-0.4514071101098565,-0.05815961441716403,,,,,,,,,,-1.1887333502953,0.7456311526478686,-0.5613893220144716,-0.16049788892269135 +781001,2,0.019005240637814846,-0.4955144960193704,-0.8019398735005937,,,,,,,,,,,,,-0.16049788892269135 +781403,0,0.07800989058673549,0.7252024287150527,-0.5882419354283478,0.2108641118148177,-0.7358501489339809,-1.5338087743376947,-0.42767336139592416,-0.08513392901908017,-0.3925726110806964,0.9581833684000187,0.6182048363947807,-0.5517814777504622,-1.0422163045785646,1.9044904197771946,0.8737234706124865,2.0930798053741455 +781403,1,0.14421538675261625,0.5285571507320932,-0.8751602554913144,,,,,,,,,,-0.47569662927593015,0.7456311526478686,0.19112267045651915,1.9305620193481445 +781403,2,-0.27617209458197817,-0.4955144960193704,-0.08191962390690835,,,,,,,,,,,,,1.9305620193481445 +785602,0,-0.8255845489855216,-0.5404369563759129,-0.4647859241484716,-0.9689657939725767,-0.48441377315356804,-0.6804312289064511,0.11971212685569313,-0.5672445341200663,-0.8863975124670236,-0.23730908679360116,-0.9544903321671111,1.1284125825510003,-0.27221658086938805,-0.2910724881500066,-0.4645232862317478,0.36678001284599304 +785602,1,-0.4325091385127145,-0.00596880972715211,-1.1815354958941209,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.059714660367144415,0.5030383467674255 +785602,2,-0.6697418748750354,1.9178575057018483,-0.17192215510611902,,,,,,,,,,,,,0.5030383467674255 +786404,0,-0.37378732919939306,1.4155511842192159,2.2512463240088034,0.5058215882616662,-0.10725920948294862,-0.1115128652856221,-0.7925970202303356,-0.5672445341200663,-0.8863975124670236,-0.835055314390411,0.6182048363947807,1.1284125825510003,-1.812216028287741,-0.2910724881500066,-0.4645232862317478,0.9527450203895569 +786404,1,-1.1053544179889336,1.419433751497502,0.35034070611991114,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.5613893220144716,1.5351004600524902 +786404,2,-0.8665267650215641,1.450753247304193,0.008082907292302316,,,,,,,,,,,,,1.5351004600524902 +786901,0,-1.5032803786647144,-1.9211344673842392,-1.8228020482271092,-0.5265295793023037,-1.4901592762752198,-1.2493495925272802,-0.33644244668732126,0.3367128504442826,-0.7217892120049145,-0.835055314390411,-1.3476641243075844,-0.5517814777504622,0.49778314283978853,-0.2910724881500066,-0.6875644123724536,1.518728256225586 +786901,1,0.4325776493852816,-2.054984991487592,-1.8964110568340025,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.8122266528381351,0.6841567754745483 +786901,2,-1.0633116551680928,-1.2740215933487957,-1.8819702478911218,,,,,,,,,,,,,0.6841567754745483 +786904,0,-1.8421282935043108,-1.9211344673842392,-1.8228020482271092,-0.5265295793023037,-1.4901592762752198,-1.2493495925272802,-0.33644244668732126,0.3367128504442826,-0.7217892120049145,-0.835055314390411,-1.3476641243075844,-0.5517814777504622,-0.27221658086938805,-0.2910724881500066,-0.6875644123724536,1.3929792642593384 +786904,1,-2.3549242227304834,-1.6986343511814288,-2.10066121710254,,,,,,,,,,0.9503768127628092,1.8141914255436393,-1.3139013144854623,1.6429179906845093 +786904,2,-0.6697418748750354,-2.130379400411164,-1.9719727790903323,,,,,,,,,,,,,1.6429179906845093 +788203,0,-0.9385338539320537,-1.1157275859627156,-0.9586099692679761,0.2108641118148177,0.2698953541876708,0.17294631652479245,-0.2452115319787184,0.4572405017195292,-1.0510058129291326,-0.835055314390411,-0.9544903321671111,0.28831555240026907,-0.27221658086938805,-0.2910724881500066,-0.6875644123724536,2.017352819442749 +788203,1,-1.0092336637780452,-0.80775775041602,-0.8751602554913144,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.8122266528381351,2.2761619091033936 +788203,2,-0.6697418748750354,-0.028410237621715174,-0.6219348111021723,,,,,,,,,,,,,2.2761619091033936 +788302,0,-1.6162296836112464,-1.000669460045355,-0.8351539579881,0.06338537359139342,1.2756408573093225,0.457405498335207,-0.9750588496475414,0.2764490248066594,-0.5571809115428055,0.9581833684000187,1.7977262128162,-0.13173296267509654,-1.0422163045785646,0.806708965813594,-0.24148216009104212,1.9243402481079102 +788302,1,-1.4898374348324874,-1.6986343511814288,-1.9985361369682713,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.5613893220144716,2.145266056060791 +788302,2,-1.9488436608274717,-1.040469464149968,-2.421985435086386,,,,,,,,,,,,,2.145266056060791 +788303,0,-1.164432463825118,-0.8856113341279945,-0.7116979467082238,0.06338537359139342,1.2756408573093225,0.457405498335207,-0.9750588496475414,0.2764490248066594,-0.5571809115428055,0.9581833684000187,1.7977262128162,-0.13173296267509654,-1.0422163045785646,-0.2910724881500066,-0.6875644123724536,2.145266056060791 +788303,1,-1.2975959264107106,-1.3422837108752652,-1.9985361369682713,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.5613893220144716,2.1911191940307617 +788303,2,-1.161704100241357,-2.130379400411164,-1.4319575918950684,,,,,,,,,,,,,2.1911191940307617 +790001,0,-0.2608380242528609,-0.42537883045855246,-0.4647859241484716,-0.5265295793023037,0.5213317299680837,1.026323861956036,0.4846357856901046,-0.14539775465670343,-0.8863975124670236,0.36043714080320877,-0.5613165400266386,0.7083640674756347,1.267782866548965,-0.2910724881500066,0.8737234706124865,1.9634854793548584 +790001,1,0.8170606662288354,0.4394694906555523,0.6567159465227176,,,,,,,,,,0.9503768127628092,0.7456311526478686,1.1944719937511734,2.265265941619873 +790001,2,-0.27617209458197817,1.1393504083724229,0.368093032089145,,,,,,,,,,,,,2.265265941619873 +792704,0,0.4168578054263319,-0.770553208210634,-0.7116979467082238,0.358342850038242,0.018458978407257843,-0.6804312289064511,0.3021739562728989,0.4572405017195292,0.9242937926161762,0.36043714080320877,1.4045524206757267,-0.13173296267509654,0.49778314283978853,0.806708965813594,0.8737234706124865,1.98080313205719 +792704,1,-0.6247506469344914,-0.5404947701863974,-0.16028469455143282,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.059714660367144415,1.32845139503479 +792704,2,0.019005240637814846,-0.573365205752313,-0.8919424046998043,,,,,,,,,,,,,1.32845139503479 +793102,0,0.529807110372864,0.3800280509629712,0.029038120971032973,-0.9689657939725767,-2.2444684036164584,-1.5338087743376947,-1.4312134231905558,-1.7725210468725314,-1.5448307143154598,-1.432801541987221,-0.5613165400266386,-0.13173296267509654,-1.812216028287741,-0.2910724881500066,-1.133646664653865,1.6107815504074097 +793102,1,1.1054229288615007,0.9739954511147976,-0.568785015088508,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,-0.5613893220144716,1.4838675260543823 +793102,2,1.0029296913704582,0.36084331104299755,0.09808543849151298,,,,,,,,,,,,,1.4838675260543823 +793804,0,-1.164432463825118,-0.8856113341279945,-0.8351539579881,-1.4114020086428494,-1.7415956520556326,-1.5338087743376947,-1.4312134231905558,-1.9533125237854012,-0.7217892120049145,-0.835055314390411,0.22503104425430823,0.28831555240026907,-2.5822157519969178,-1.388853942113607,0.20460009219036931,0.8606327176094055 +793804,1,-0.9131129095671567,-1.3422837108752652,-1.8964110568340025,,,,,,,,,,0.2373400917434395,-1.3914893931436731,-1.3139013144854623,0.8166834712028503 +793804,2,-1.5552738805344144,-1.2740215933487957,-1.0719474670982256,,,,,,,,,,,,,0.8166834712028503 +794502,0,-1.27738176877165,0.2649699250456107,0.15249413225090913,-1.5588807468662738,-0.48441377315356804,0.17294631652479245,-1.1575206790647472,-0.20566158029432668,-0.7217892120049145,-0.835055314390411,-0.5613165400266386,0.28831555240026907,-2.5822157519969178,-0.2910724881500066,-0.24148216009104212,1.2004246711730957 +794502,1,-1.9704412058869298,2.3103103522629107,0.5545908663884488,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.8122266528381351,0.7210030555725098 +794502,2,-1.8504512157542075,0.5165447305088826,-0.26192468630532967,,,,,,,,,,,,,0.7210030555725098 +796703,0,0.19095919553326762,-0.770553208210634,-0.5882419354283478,-1.2639232704194252,-0.10725920948294862,-0.1115128652856221,-0.518904276104527,-0.08513392901908017,-0.8863975124670236,-0.23730908679360116,-0.9544903321671111,0.28831555240026907,-1.0422163045785646,-0.2910724881500066,0.8737234706124865,1.401166558265686 +796703,1,-0.14414687588004912,-1.1641083907221836,-1.590035816431196,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-0.059714660367144415,1.7245936393737793 +796703,2,-0.6697418748750354,-1.2740215933487957,-0.7119373423013831,,,,,,,,,,,,,1.7245936393737793 +797103,0,-1.5032803786647144,-1.460901963714797,-1.3289780031076046,-0.9689657939725767,-1.867313839945839,-1.8182679561481092,-2.6172153144023933,-2.194367826335894,-1.2156141133912417,-0.835055314390411,-0.9544903321671111,1.548461097626366,0.49778314283978853,0.806708965813594,0.42764121833107505,0.9032858610153198 +797103,1,-1.2975959264107106,-1.609546691104888,-1.6921608965654649,,,,,,,,,,0.2373400917434395,0.7456311526478686,1.1944719937511734,0.9590807557106018 +797103,2,-2.637590776340322,-2.0525286906782214,-1.791967716691911,,,,,,,,,,,,,0.9590807557106018 +797401,0,-0.2608380242528609,-0.6554950822932735,-0.8351539579881,-0.9689657939725767,-0.7358501489339809,-0.9648904107168657,-0.06274970256151263,-1.2904104417715454,-0.5571809115428055,-0.23730908679360116,0.22503104425430823,0.28831555240026907,-1.0422163045785646,-1.388853942113607,-0.9106055385131593,1.3331875801086426 +797401,1,0.33645689517439314,0.3503818305790114,1.0652162670597927,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-1.0630639836617988,1.689704418182373 +797401,2,-0.5713494298017712,-0.33981307655348536,0.008082907292302316,,,,,,,,,,,,,1.689704418182373 +798302,0,0.9816043301589925,-0.8856113341279945,-0.3413299128685955,0.5058215882616662,-0.10725920948294862,-0.6804312289064511,-0.33644244668732126,0.6982958042700221,-0.22796431061858732,0.36043714080320877,-0.5613165400266386,0.28831555240026907,-1.0422163045785646,-0.2910724881500066,-0.6875644123724536,1.7373297214508057 +798302,1,0.048094632541727786,-1.3422837108752652,-1.7942859766997337,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,-0.8122266528381351,1.7739202976226807 +798302,2,-0.1777796495087138,-1.3518723030817383,-0.35192721750454037,,,,,,,,,,,,,1.7739202976226807 +799703,0,0.4168578054263319,2.3360161915581,2.004334301449051,0.9482578029319392,1.149922669419116,0.457405498335207,0.6670976151073104,1.5419893631967478,1.7473352949267216,-0.23730908679360116,-0.16814274788616518,0.28831555240026907,1.267782866548965,-0.2910724881500066,0.20460009219036931,2.3532345294952393 +799703,1,2.5472342420248277,0.9739954511147976,1.0652162670597927,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,0.4419600012801827,2.7192394733428955 +799703,2,1.1013221364437225,1.606454666770078,1.6281284688780944,,,,,,,,,,,,,2.7192394733428955 +800001,0,1.207502940052057,2.105899939723379,4.226542504486822,0.9482578029319392,1.2756408573093225,1.026323861956036,1.4881758474847362,0.8790872811828919,0.7596854921540671,1.5559295959968287,1.0113786285352542,0.7083640674756347,-1.812216028287741,-1.388853942113607,0.8737234706124865,2.995732307434082 +800001,1,0.4325776493852816,1.330346091420961,0.8609661067912552,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.059714660367144415,2.995732307434082 +800001,2,2.085246587176366,1.6843053765030207,0.7281031568859877,,,,,,,,,,,,,2.995732307434082 +800002,0,1.320452244998589,0.4950861768803317,0.15249413225090913,0.9482578029319392,1.2756408573093225,1.026323861956036,1.4881758474847362,0.8790872811828919,0.7596854921540671,1.5559295959968287,1.0113786285352542,0.7083640674756347,-0.27221658086938805,0.806708965813594,-0.24148216009104212,2.995732307434082 +800002,1,0.52869840359617,2.755748652645615,0.45246578625417994,,,,,,,,,,-1.1887333502953,0.7456311526478686,-0.5613893220144716,2.995732307434082 +800002,2,1.9868541421031014,1.0614996986394805,1.718131000077305,,,,,,,,,,,,,2.995732307434082 +800601,0,-0.2608380242528609,-0.5404369563759129,-0.3413299128685955,0.2108641118148177,-0.48441377315356804,-0.1115128652856221,-0.2452115319787184,0.5175043273571525,-0.3925726110806964,-0.835055314390411,-0.9544903321671111,-0.13173296267509654,-0.27221658086938805,0.806708965813594,-0.9106055385131593,1.8914724588394165 +800601,1,0.2403361409635047,1.330346091420961,1.0652162670597927,,,,,,,,,,-1.1887333502953,0.7456311526478686,-0.5613893220144716,1.8279719352722168 +800601,2,-0.7681343199482997,0.7500968597077102,-0.17192215510611902,,,,,,,,,,,,,1.8279719352722168 +800603,0,0.9816043301589925,0.14991179912825014,-0.7116979467082238,0.2108641118148177,-0.48441377315356804,-0.1115128652856221,-0.2452115319787184,0.5175043273571525,-0.3925726110806964,-0.835055314390411,-0.9544903321671111,-0.13173296267509654,-1.0422163045785646,0.806708965813594,-0.9106055385131593,2.546053647994995 +800603,1,0.7209399120179469,0.3503818305790114,-1.079410415759852,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.310551991190808,1.835005760192871 +800603,2,0.019005240637814846,-0.2619623668205428,-1.4319575918950684,,,,,,,,,,,,,1.835005760192871 +803001,0,-0.03493941435979663,-0.3103207045411919,-0.7116979467082238,-0.37905084107887943,-0.7358501489339809,-0.3959720470960366,0.028481212147090252,0.6380319786323989,-1.3802224138533508,-0.23730908679360116,-1.3476641243075844,0.7083640674756347,-1.0422163045785646,-0.2910724881500066,-0.24148216009104212,0.4929080307483673 +803001,1,-0.24026763009093757,-0.7186700903394792,-1.079410415759852,,,,,,,,,,-0.47569662927593015,1.8141914255436393,-0.5613893220144716,0.6929920315742493 +803001,2,-0.5713494298017712,-0.729066625218198,0.2780905008899343,,,,,,,,,,,,,0.6929920315742493 +803101,0,-0.2608380242528609,-0.6554950822932735,-0.8351539579881,-0.8214870557491524,-1.9930320278360456,-0.3959720470960366,-1.7961370820249674,-0.6275083597576895,-1.0510058129291326,-0.835055314390411,-0.9544903321671111,-0.5517814777504622,-1.0422163045785646,-0.2910724881500066,-0.6875644123724536,0.6381300687789917 +803101,1,-0.8169921553562683,-0.18414412988023388,0.5545908663884488,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,0.4419600012801827,0.9759406447410583 +803101,2,-0.9649192100948284,-0.028410237621715174,0.2780905008899343,,,,,,,,,,,,,0.9759406447410583 +803103,0,0.07800989058673549,-0.1952625786238314,0.3994061548106614,-0.8214870557491524,-1.9930320278360456,-0.3959720470960366,-1.7961370820249674,-0.6275083597576895,-1.0510058129291326,-0.835055314390411,-0.9544903321671111,-0.5517814777504622,-1.0422163045785646,0.806708965813594,-0.6875644123724536,0.46625256538391113 +803103,1,-0.4325091385127145,-0.6295824302629383,-0.8751602554913144,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.8122266528381351,1.426360011100769 +803103,2,0.2157901307843435,-0.6512159154852555,-0.7119373423013831,,,,,,,,,,,,,1.426360011100769 +804401,0,0.529807110372864,-0.5404369563759129,-0.4647859241484716,-0.08409336463203088,-0.6101319610437744,-0.1115128652856221,-0.33644244668732126,-0.08513392901908017,0.2658605907677399,-0.23730908679360116,-1.740837916448057,1.1284125825510003,0.49778314283978853,-0.2910724881500066,-0.4645232862317478,1.3585395812988281 +804401,1,0.4325776493852816,-0.00596880972715211,0.45246578625417994,,,,,,,,,,0.9503768127628092,2.88275169843941,-0.5613893220144716,1.6221328973770142 +804401,2,1.0029296913704582,0.04944047211122737,0.09808543849151298,,,,,,,,,,,,,1.6221328973770142 +804402,0,0.529807110372864,0.4950861768803317,-0.09441789030884316,-0.08409336463203088,-0.6101319610437744,-0.1115128652856221,-0.33644244668732126,-0.08513392901908017,0.2658605907677399,-0.23730908679360116,-1.740837916448057,1.1284125825510003,0.49778314283978853,3.002271873740795,-0.6875644123724536,1.6221328973770142 +804402,1,0.9131814204397238,0.3503818305790114,0.35034070611991114,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.5613893220144716,1.4197745323181152 +804402,2,0.6093599110774008,0.36084331104299755,1.5381259376788836,,,,,,,,,,,,,1.4197745323181152 +804901,0,0.6427564153193962,1.5306093101365763,1.5105102563295467,-1.1164445321960008,0.5213317299680837,0.17294631652479245,1.3969449327761334,1.1804064093710083,1.0889020930782853,-0.835055314390411,0.22503104425430823,-0.9718299928258278,-1.0422163045785646,0.806708965813594,-0.4645232862317478,0.8391745686531067 +804901,1,1.0093021746506123,2.22122269218637,2.086467068402481,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.8122266528381351,1.1373738050460815 +804901,2,0.7077523561506651,-1.1183201738829107,0.908108219284409,,,,,,,,,,,,,1.1373738050460815 +804902,0,0.19095919553326762,-0.770553208210634,-0.2178739015887193,-1.1164445321960008,0.5213317299680837,0.17294631652479245,1.3969449327761334,1.1804064093710083,1.0889020930782853,-0.835055314390411,0.22503104425430823,-0.9718299928258278,-1.0422163045785646,-0.2910724881500066,-0.6875644123724536,2.667398691177368 +804902,1,1.1054229288615007,-0.00596880972715211,0.45246578625417994,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.8122266528381351,2.888021469116211 +804902,2,0.5109674660041365,0.9057982791735953,0.9981107504836196,,,,,,,,,,,,,2.888021469116211 +811302,0,-1.27738176877165,-1.000669460045355,-0.8351539579881,1.0957365411553635,0.8984862936387031,0.7418646801456215,1.2144831033589276,-0.08513392901908017,1.4181186940025035,-0.23730908679360116,1.7977262128162,1.1284125825510003,-1.812216028287741,-0.2910724881500066,-0.9106055385131593,2.5370912551879883 +811302,1,-1.585958189043376,-1.6986343511814288,-1.590035816431196,,,,,,,,,,-1.1887333502953,0.7456311526478686,-0.5613893220144716,2.0105955600738525 +811302,2,-0.7681343199482997,-0.573365205752313,0.638100625686777,,,,,,,,,,,,,2.0105955600738525 +815202,0,0.4168578054263319,1.875783687888658,0.3994061548106614,-0.5265295793023037,0.7727681057484966,0.457405498335207,0.940790359233119,1.5419893631967478,-0.06335601015647824,1.5559295959968287,1.7977262128162,0.7083640674756347,0.49778314283978853,0.806708965813594,0.8737234706124865,2.995732307434082 +815202,1,-0.24026763009093757,3.2902746131048604,0.7588410266569864,,,,,,,,,,1.663413533782179,0.7456311526478686,-0.059714660367144415,2.9948654174804688 +815202,2,0.31418257585760784,1.606454666770078,0.09808543849151298,,,,,,,,,,,,,2.9948654174804688 +816101,0,-0.14788871930632877,0.4950861768803317,0.7697741886502898,-2.148795699759971,-1.7415956520556326,-2.671645501579353,-2.982138973236805,-2.6764784314368804,-1.3802224138533508,-2.030547769584031,-0.9544903321671111,-1.8119270229765592,-0.27221658086938805,-1.388853942113607,-1.133646664653865,0.24349652230739594 +816101,1,0.4325776493852816,0.7067324708851749,0.6567159465227176,,,,,,,,,,0.2373400917434395,1.8141914255436393,-0.8122266528381351,-0.6931471824645996 +816101,2,-0.07938720443544948,0.8279475694406527,0.368093032089145,,,,,,,,,,,,,-0.6931471824645996 +817403,0,0.4168578054263319,-0.1952625786238314,-0.8351539579881,-1.2639232704194252,-1.7415956520556326,-1.8182679561481092,-1.5224443378991586,-1.5917295699596616,-0.8863975124670236,-0.835055314390411,-0.5613165400266386,-0.5517814777504622,-1.812216028287741,-0.2910724881500066,-1.3566877907945707,1.4489400386810303 +817403,1,-0.14414687588004912,-1.1641083907221836,-0.46665993495423924,,,,,,,,,,0.2373400917434395,1.8141914255436393,-1.3139013144854623,1.3976569175720215 +817403,2,-0.07938720443544948,-1.429723012814681,-0.8019398735005937,,,,,,,,,,,,,1.3976569175720215 +817801,0,-0.7126352440389895,-0.8856113341279945,-0.8351539579881,-0.9689657939725767,-1.3644410883850133,-2.3871863197689382,-1.7049061673163644,-1.4712019186844152,-0.8863975124670236,0.36043714080320877,-0.5613165400266386,0.7083640674756347,0.49778314283978853,-0.2910724881500066,-1.3566877907945707,1.5103520154953003 +817801,1,-0.33638838430182605,-0.7186700903394792,-0.8751602554913144,,,,,,,,,,0.2373400917434395,0.7456311526478686,-1.3139013144854623,0.9975906014442444 +817801,2,-0.07938720443544948,-1.2740215933487957,-0.35192721750454037,,,,,,,,,,,,,0.9975906014442444 +819302,0,-1.27738176877165,-0.3103207045411919,-0.09441789030884316,1.390694017602212,0.1441771662974643,0.7418646801456215,0.940790359233119,1.361197886283878,-0.3925726110806964,0.9581833684000187,0.22503104425430823,1.548461097626366,1.267782866548965,0.806708965813594,1.7658879751753094,2.3130669593811035 +819302,1,-1.585958189043376,-0.5404947701863974,-1.079410415759852,,,,,,,,,,0.2373400917434395,-0.3229291202479022,1.1944719937511734,2.3207790851593018 +819302,2,-0.6697418748750354,-0.729066625218198,-1.791967716691911,,,,,,,,,,,,,2.3207790851593018 +819502,0,-0.2608380242528609,-0.3103207045411919,0.893230199930166,-0.5265295793023037,-1.3644410883850133,-0.6804312289064511,-0.42767336139592416,0.3969766760819059,-1.2156141133912417,-0.835055314390411,-2.13401170858853,-2.2319755380519246,1.267782866548965,-1.388853942113607,-0.4645232862317478,1.451264500617981 +819502,1,0.6248191578070585,0.3503818305790114,0.24821562598564237,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.8122266528381351,1.7045929431915283 +819502,2,0.9045372462971938,0.36084331104299755,1.2681183440812516,,,,,,,,,,,,,1.7045929431915283 +821202,0,0.8686550252124604,0.7252024287150527,0.029038120971032973,0.9482578029319392,0.7727681057484966,0.7418646801456215,1.3057140180675306,0.5175043273571525,2.07655189585094,-0.23730908679360116,0.6182048363947807,-0.5517814777504622,-1.812216028287741,-0.2910724881500066,-0.9106055385131593,1.9620232582092285 +821202,1,0.4325776493852816,0.4394694906555523,-0.26240977468570165,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.059714660367144415,2.010808229446411 +821202,2,1.6916768068833083,-0.10626094735465771,0.5480980944875663,,,,,,,,,,,,,2.010808229446411 +822601,0,1.7722494647847176,3.0263649470622633,2.745070369128308,1.2432152793787876,1.401359045199529,1.026323861956036,1.4881758474847362,0.7585596299076455,2.07655189585094,0.9581833684000187,1.0113786285352542,1.548461097626366,0.49778314283978853,0.806708965813594,-0.24148216009104212,2.995732307434082 +822601,1,2.0666304709703853,1.2412584313444202,2.8013426293423622,,,,,,,,,,-1.1887333502953,0.7456311526478686,0.4419600012801827,2.995732307434082 +822601,2,1.1997145815169867,1.1393504083724229,2.258146187272569,,,,,,,,,,,,,2.995732307434082 +822602,0,1.6593001598381854,1.7607255619712974,1.016686211210042,1.2432152793787876,1.401359045199529,1.026323861956036,1.4881758474847362,0.7585596299076455,2.07655189585094,0.9581833684000187,1.0113786285352542,1.548461097626366,0.49778314283978853,1.9044904197771946,-0.24148216009104212,2.995732307434082 +822602,1,0.33645689517439314,0.7958201309617158,0.6567159465227176,,,,,,,,,,-0.47569662927593015,1.8141914255436393,-0.5613893220144716,2.995732307434082 +822602,2,1.1013221364437225,0.43869402077594005,1.718131000077305,,,,,,,,,,,,,2.995732307434082 +822701,0,1.6593001598381854,1.5306093101365763,2.621614357848432,0.5058215882616662,1.0242044815289095,1.026323861956036,0.8495594445245161,0.3367128504442826,1.5827269944646125,0.9581833684000187,0.6182048363947807,-0.5517814777504622,-2.5822157519969178,0.806708965813594,0.20460009219036931,2.995732307434082 +822701,1,1.2015436830723893,0.5285571507320932,1.1673413471940615,,,,,,,,,,-1.9017700713146695,1.8141914255436393,0.4419600012801827,2.995732307434082 +822701,2,2.9707785928357446,1.0614996986394805,1.8981360624757264,,,,,,,,,,,,,2.995732307434082 +825702,0,-1.0514831588785858,-1.000669460045355,-0.8351539579881,-1.4114020086428494,-0.10725920948294862,0.17294631652479245,-0.06274970256151263,0.5175043273571525,-0.7217892120049145,1.5559295959968287,1.7977262128162,1.9685096127017316,0.49778314283978853,-0.2910724881500066,-0.4645232862317478,2.407790422439575 +825702,1,-1.585958189043376,-1.3422837108752652,-1.3857856561626585,,,,,,,,,,0.9503768127628092,-1.3914893931436731,-0.5613893220144716,2.3139476776123047 +825702,2,-1.8504512157542075,-1.1183201738829107,-0.8019398735005937,,,,,,,,,,,,,2.3139476776123047 +826105,0,-1.0514831588785858,-0.5404369563759129,-0.4647859241484716,-1.1164445321960008,-1.7415956520556326,-0.3959720470960366,-2.069829826150776,-2.073840175060648,-0.7217892120049145,0.36043714080320877,-0.16814274788616518,-0.5517814777504622,0.49778314283978853,-0.2910724881500066,-0.24148216009104212,1.5618313550949097 +826105,1,-0.4325091385127145,2.9339239727986968,0.24821562598564237,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.059714660367144415,-0.06553414463996887 +826105,2,0.11739768571107917,1.0614996986394805,0.008082907292302316,,,,,,,,,,,,,-0.06553414463996887 +826202,0,0.3039085004797998,0.7252024287150527,-0.2178739015887193,-0.674008317525728,-0.35869558526336154,-1.2493495925272802,-0.8838279349389385,1.4214617119215014,-1.0510058129291326,1.5559295959968287,0.22503104425430823,-0.5517814777504622,1.267782866548965,-0.2910724881500066,-0.4645232862317478,2.995732307434082 +826202,1,0.14421538675261625,-0.09505646980369299,-0.46665993495423924,,,,,,,,,,-1.1887333502953,-1.3914893931436731,1.6961466553985005,2.995732307434082 +826202,2,0.6093599110774008,1.995708215434791,0.09808543849151298,,,,,,,,,,,,,2.995732307434082 +826203,0,0.19095919553326762,0.8402605546324132,0.5228621660905376,-0.674008317525728,-0.35869558526336154,-1.2493495925272802,-0.8838279349389385,1.4214617119215014,-1.0510058129291326,1.5559295959968287,0.22503104425430823,-0.5517814777504622,1.267782866548965,-1.388853942113607,1.319805722893898,2.995732307434082 +826203,1,0.4325776493852816,0.3503818305790114,0.04396546571710477,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.059714660367144415,2.995732307434082 +826203,2,-0.4729569847285068,0.36084331104299755,-0.6219348111021723,,,,,,,,,,,,,2.995732307434082 +827303,0,0.07800989058673549,0.6101443027976923,1.5105102563295467,0.5058215882616662,1.149922669419116,0.7418646801456215,0.4846357856901046,1.361197886283878,0.595077191691958,1.5559295959968287,1.7977262128162,-0.13173296267509654,-0.27221658086938805,0.806708965813594,-0.24148216009104212,2.3221967220306396 +827303,1,0.9131814204397238,1.0630831111913384,0.5545908663884488,,,,,,,,,,-0.47569662927593015,0.7456311526478686,0.4419600012801827,2.752803325653076 +827303,2,-0.1777796495087138,1.3729025375712505,0.008082907292302316,,,,,,,,,,,,,2.752803325653076 +827901,0,-0.9385338539320537,-1.000669460045355,-0.8351539579881,-0.8214870557491524,-0.8615683368241874,-0.3959720470960366,-0.06274970256151263,-1.1698827904962987,-0.06335601015647824,0.9581833684000187,1.4045524206757267,0.28831555240026907,0.49778314283978853,-1.388853942113607,-0.9106055385131593,0.48023536801338196 +827901,1,-0.8169921553562683,0.6176448108086341,0.45246578625417994,,,,,,,,,,-1.1887333502953,-0.3229291202479022,2.4486586478694914,1.6807416677474976 +827901,2,-1.3584889903878858,0.6722461499747677,0.008082907292302316,,,,,,,,,,,,,1.6807416677474976 +828604,0,-0.5996859390924573,-0.3103207045411919,1.016686211210042,-0.674008317525728,-0.48441377315356804,0.17294631652479245,-1.24875159377335,-0.024870103381456905,-1.0510058129291326,-0.23730908679360116,-0.5613165400266386,0.28831555240026907,1.267782866548965,0.806708965813594,-0.6875644123724536,0.8576897382736206 +828604,1,0.14421538675261625,-0.2732317899567748,0.35034070611991114,,,,,,,,,,-1.1887333502953,-0.3229291202479022,0.19112267045651915,1.616479516029358 +828604,2,-0.6697418748750354,-0.33981307655348536,-0.26192468630532967,,,,,,,,,,,,,1.616479516029358 +828703,0,-0.14788871930632877,-1.1157275859627156,-0.9586099692679761,-1.4114020086428494,-1.7415956520556326,-1.2493495925272802,-0.2452115319787184,0.5777681529947757,-1.0510058129291326,-0.23730908679360116,-0.16814274788616518,-0.13173296267509654,0.49778314283978853,-0.2910724881500066,-0.24148216009104212,0.6727573275566101 +828703,1,-0.33638838430182605,0.17220651042592966,0.5545908663884488,,,,,,,,,,0.9503768127628092,-0.3229291202479022,2.4486586478694914,0.7665178179740906 +828703,2,-0.4729569847285068,0.1272911818441699,-0.5319322799029617,,,,,,,,,,,,,0.7665178179740906 +828902,0,-1.9550775984508428,-1.000669460045355,-0.8351539579881,-0.37905084107887943,-1.9930320278360456,-2.102727137958524,-1.1575206790647472,-0.6275083597576895,-0.3925726110806964,-0.23730908679360116,1.0113786285352542,-2.2319755380519246,1.267782866548965,-1.388853942113607,-1.3566877907945707,0.7422600388526917 +828902,1,-1.1053544179889336,-1.8768096713345106,-1.079410415759852,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-1.3139013144854623,1.0138639211654663 +828902,2,-0.4729569847285068,-1.585424432280566,-1.0719474670982256,,,,,,,,,,,,,1.0138639211654663 +828904,0,-1.5032803786647144,-1.1157275859627156,-0.9586099692679761,-0.37905084107887943,-1.9930320278360456,-2.102727137958524,-1.1575206790647472,-0.6275083597576895,-0.3925726110806964,-0.23730908679360116,1.0113786285352542,-2.2319755380519246,-1.812216028287741,-1.388853942113607,-1.3566877907945707,1.0138639211654663 +828904,1,-1.6820789432542644,-1.609546691104888,-1.3857856561626585,,,,,,,,,,-1.9017700713146695,-1.3914893931436731,-1.3139013144854623,0.8473845720291138 +828904,2,-2.4408058861937936,-2.286080819877049,-2.421985435086386,,,,,,,,,,,,,0.8473845720291138 +828905,0,-1.5032803786647144,-1.000669460045355,-0.8351539579881,-0.37905084107887943,-1.9930320278360456,-2.102727137958524,-1.1575206790647472,-0.6275083597576895,-0.3925726110806964,-0.23730908679360116,1.0113786285352542,-2.2319755380519246,-2.5822157519969178,-1.388853942113607,0.42764121833107505,0.8473845720291138 +828905,1,-2.1626827143087066,-1.6986343511814288,-1.1815354958941209,,,,,,,,,,-1.1887333502953,0.7456311526478686,-1.3139013144854623,0.9859139323234558 +828905,2,-0.8665267650215641,-1.3518723030817383,-1.9719727790903323,,,,,,,,,,,,,0.9859139323234558 +829401,0,-0.7126352440389895,-0.770553208210634,-0.8351539579881,-1.1164445321960008,-0.9872865247143939,-1.5338087743376947,-0.8838279349389385,0.3969766760819059,-0.7217892120049145,-0.23730908679360116,1.7977262128162,1.9685096127017316,0.49778314283978853,-0.2910724881500066,-0.6875644123724536,1.2641254663467407 +829401,1,-0.7208714011453798,-0.3623194500333156,-1.590035816431196,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.5613893220144716,1.492652416229248 +829401,2,-1.2600965453146213,-0.10626094735465771,-0.08191962390690835,,,,,,,,,,,,,1.492652416229248 +830503,0,-1.0514831588785858,-1.9211344673842392,-1.8228020482271092,-0.674008317525728,-2.621622967287078,-1.8182679561481092,-1.4312134231905558,-1.9533125237854012,-1.2156141133912417,-0.23730908679360116,-1.3476641243075844,-0.9718299928258278,-2.5822157519969178,-1.388853942113607,-0.4645232862317478,-0.6931471824645996 +830503,1,-1.4898374348324874,-1.8768096713345106,-1.8964110568340025,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,-0.8122266528381351,1.20381760597229 +830503,2,-0.1777796495087138,-1.429723012814681,-1.251952529496647,,,,,,,,,,,,,1.20381760597229 +830504,0,-1.27738176877165,-1.3458438377974367,-1.2055219918277285,-0.674008317525728,-2.621622967287078,-1.8182679561481092,-1.4312134231905558,-1.9533125237854012,-1.2156141133912417,-0.23730908679360116,-1.3476641243075844,-0.9718299928258278,-1.0422163045785646,-1.388853942113607,-0.4645232862317478,1.20381760597229 +830504,1,-2.258803468519595,-1.7877220112579697,-1.079410415759852,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,-1.0630639836617988,0.8111194372177124 +830504,2,-0.7681343199482997,-1.3518723030817383,-1.4319575918950684,,,,,,,,,,,,,0.8111194372177124 +830906,0,-0.48673663414592516,0.4950861768803317,-0.09441789030884316,-0.23157210285545515,-1.867313839945839,-2.102727137958524,-1.339982508481953,-1.4712019186844152,-1.3802224138533508,-0.835055314390411,-0.5613165400266386,-1.8119270229765592,0.49778314283978853,-1.388853942113607,-0.9106055385131593,2.0119855403900146 +830906,1,0.33645689517439314,-0.6295824302629383,-0.05815961441716403,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,-0.059714660367144415,2.1076858043670654 +830906,2,1.298107026590251,-0.729066625218198,-1.521960123094279,,,,,,,,,,,,,2.1076858043670654 +832901,0,-0.7126352440389895,-0.6554950822932735,-0.7116979467082238,-0.37905084107887943,-1.2387229004948068,-1.5338087743376947,-0.8838279349389385,0.3969766760819059,-1.2156141133912417,-1.432801541987221,-0.5613165400266386,-0.9718299928258278,-0.27221658086938805,-1.388853942113607,-0.4645232862317478,0.4068944454193115 +832901,1,-0.14414687588004912,1.5976090716505837,0.24821562598564237,,,,,,,,,,-1.9017700713146695,-1.3914893931436731,0.4419600012801827,0.8529248237609863 +832901,2,-0.7681343199482997,-0.33981307655348536,-0.5319322799029617,,,,,,,,,,,,,0.8529248237609863 +832902,0,-0.9385338539320537,-0.8856113341279945,-0.7116979467082238,-0.37905084107887943,-1.2387229004948068,-1.5338087743376947,-0.8838279349389385,0.3969766760819059,-1.2156141133912417,-1.432801541987221,-0.5613165400266386,-0.9718299928258278,-2.5822157519969178,-1.388853942113607,0.8737234706124865,0.8529248237609863 +832902,1,-1.201475172199822,-0.00596880972715211,0.5545908663884488,,,,,,,,,,-1.9017700713146695,-1.3914893931436731,-0.5613893220144716,0.8743267059326172 +832902,2,0.2157901307843435,-0.41766378628642786,0.09808543849151298,,,,,,,,,,,,,0.8743267059326172 +832903,0,-0.5996859390924573,-0.42537883045855246,-0.5882419354283478,-0.37905084107887943,-1.2387229004948068,-1.5338087743376947,-0.8838279349389385,0.3969766760819059,-1.2156141133912417,-1.432801541987221,-0.5613165400266386,-0.9718299928258278,1.267782866548965,-1.388853942113607,-0.24148216009104212,0.8743267059326172 +832903,1,-0.14414687588004912,0.4394694906555523,1.0652162670597927,,,,,,,,,,0.2373400917434395,-1.3914893931436731,-1.0630639836617988,0.8036295175552368 +832903,2,0.019005240637814846,0.20514189157711243,0.09808543849151298,,,,,,,,,,,,,0.8036295175552368 +833401,0,-1.3903310737181822,-0.8856113341279945,-0.2178739015887193,-0.37905084107887943,-0.9872865247143939,-1.5338087743376947,0.8495594445245161,0.3367128504442826,-1.2156141133912417,-0.835055314390411,-0.16814274788616518,-0.9718299928258278,-0.27221658086938805,-0.2910724881500066,-0.4645232862317478,1.3510891199111938 +833401,1,-1.6820789432542644,-1.520459031028347,-1.4879107362969273,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,-0.059714660367144415,1.0140403509140015 +833401,2,-1.0633116551680928,-3.9987964340017847,-4.132033527871388,,,,,,,,,,,,,1.0140403509140015 +833402,0,-1.0514831588785858,-0.8856113341279945,-0.7116979467082238,-0.37905084107887943,-0.9872865247143939,-1.5338087743376947,0.8495594445245161,0.3367128504442826,-1.2156141133912417,-0.835055314390411,-0.16814274788616518,-0.9718299928258278,0.49778314283978853,-1.388853942113607,-1.133646664653865,1.731703758239746 +833402,1,-2.835527993784926,-0.5404947701863974,-1.590035816431196,,,,,,,,,,0.9503768127628092,-0.3229291202479022,0.19112267045651915,1.807160496711731 +833402,2,-0.9649192100948284,-1.040469464149968,-1.521960123094279,,,,,,,,,,,,,1.807160496711731 +833601,0,0.7557057202659283,0.4950861768803317,0.5228621660905376,-0.08409336463203088,0.7727681057484966,0.457405498335207,1.1232521886503248,1.1804064093710083,-0.8863975124670236,1.5559295959968287,1.7977262128162,1.548461097626366,-0.27221658086938805,-0.2910724881500066,-0.9106055385131593,1.6535903215408325 +833601,1,0.048094632541727786,0.17220651042592966,0.14609054585137357,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-0.5613893220144716,1.7243309020996094 +833601,2,-0.37456453965524245,-0.2619623668205428,0.18808796969072364,,,,,,,,,,,,,1.7243309020996094 +834501,0,0.07800989058673549,0.7252024287150527,0.3994061548106614,-1.1164445321960008,-0.9872865247143939,-1.5338087743376947,-0.61013519081313,-1.2904104417715454,-0.3925726110806964,-0.835055314390411,-0.16814274788616518,-0.13173296267509654,0.49778314283978853,0.806708965813594,3.104134732019544,-0.5234033465385437 +834501,1,-0.04802612166916067,0.3503818305790114,0.7588410266569864,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.059714660367144415,1.9218922853469849 +834501,2,-0.07938720443544948,-0.2619623668205428,0.8181056880851983,,,,,,,,,,,,,1.9218922853469849 +835202,0,0.9816043301589925,0.03485367321088963,0.6463181773704137,-0.9689657939725767,-0.2329773973731551,-0.1115128652856221,0.7583285298159133,-1.0493551392210523,-1.0510058129291326,-0.835055314390411,-0.16814274788616518,-1.8119270229765592,1.267782866548965,-0.2910724881500066,0.20460009219036931,1.8506172895431519 +835202,1,0.4325776493852816,-0.18414412988023388,0.8609661067912552,,,,,,,,,,1.663413533782179,-0.3229291202479022,-0.059714660367144415,2.0023252964019775 +835202,2,-0.5713494298017712,1.295051827838308,0.45809556328835566,,,,,,,,,,,,,2.0023252964019775 +835203,0,-0.03493941435979663,-0.42537883045855246,-0.4647859241484716,-0.9689657939725767,-0.2329773973731551,-0.1115128652856221,0.7583285298159133,-1.0493551392210523,-1.0510058129291326,-0.835055314390411,-0.16814274788616518,-1.8119270229765592,1.267782866548965,-0.2910724881500066,0.20460009219036931,2.0023252964019775 +835203,1,-0.6247506469344914,-0.18414412988023388,0.45246578625417994,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.059714660367144415,1.9737452268600464 +835203,2,-0.7681343199482997,1.6843053765030207,0.5480980944875663,,,,,,,,,,,,,1.9737452268600464 +835702,0,0.529807110372864,-1.000669460045355,-0.8351539579881,-1.1164445321960008,-1.7415956520556326,-1.5338087743376947,-0.42767336139592416,-0.748036011032936,-0.22796431061858732,-0.835055314390411,-0.5613165400266386,0.7083640674756347,0.49778314283978853,-0.2910724881500066,-0.24148216009104212,1.5856728553771973 +835702,1,-0.8169921553562683,-0.9859330705691017,-1.1815354958941209,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,-0.8122266528381351,1.522819995880127 +835702,2,0.2157901307843435,-0.41766378628642786,-0.441929748703751,,,,,,,,,,,,,1.522819995880127 +837401,0,-1.3903310737181822,-0.770553208210634,-0.4647859241484716,-0.23157210285545515,-0.48441377315356804,0.7418646801456215,0.11971212685569313,0.2161851991690361,0.2658605907677399,0.36043714080320877,-0.9544903321671111,-0.13173296267509654,-0.27221658086938805,-1.388853942113607,-0.9106055385131593,1.3704848289489746 +837401,1,-1.2975959264107106,-0.896845410492561,-0.6709100952227768,,,,,,,,,,0.9503768127628092,-1.3914893931436731,-0.310551991190808,1.3922568559646606 +837401,2,-0.5713494298017712,-0.8847680446840831,-0.26192468630532967,,,,,,,,,,,,,1.3922568559646606 +837501,0,-1.3903310737181822,-1.1157275859627156,-0.9586099692679761,-1.4114020086428494,-0.35869558526336154,0.17294631652479245,-0.9750588496475414,-0.14539775465670343,0.10125229030563083,-0.23730908679360116,-1.3476641243075844,-0.13173296267509654,-1.812216028287741,-1.388853942113607,-0.24148216009104212,-0.3416321575641632 +837501,1,-1.393716680621599,-1.0750207306456427,-1.1815354958941209,,,,,,,,,,-1.1887333502953,-1.3914893931436731,0.4419600012801827,0.23271861672401428 +837501,2,-2.047236105900736,-0.8069173349511406,-0.8019398735005937,,,,,,,,,,,,,0.23271861672401428 +837502,0,-1.27738176877165,-1.000669460045355,-0.8351539579881,-1.4114020086428494,-0.35869558526336154,0.17294631652479245,-0.9750588496475414,-0.14539775465670343,0.10125229030563083,-0.23730908679360116,-1.3476641243075844,-0.13173296267509654,-1.812216028287741,-1.388853942113607,-0.6875644123724536,0.3648323118686676 +837502,1,-0.7208714011453798,-1.3422837108752652,-1.590035816431196,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-1.0630639836617988,0.752189040184021 +837502,2,-0.7681343199482997,0.04944047211122737,-0.6219348111021723,,,,,,,,,,,,,0.752189040184021 +837503,0,-1.3903310737181822,-0.3103207045411919,-0.3413299128685955,-1.4114020086428494,-0.35869558526336154,0.17294631652479245,-0.9750588496475414,-0.14539775465670343,0.10125229030563083,-0.23730908679360116,-1.3476641243075844,-0.13173296267509654,-1.0422163045785646,0.806708965813594,-0.24148216009104212,0.8735378980636597 +837503,1,-1.2975959264107106,-0.3623194500333156,-0.9772853356255832,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.8122266528381351,0.42754459381103516 +837503,2,-0.27617209458197817,0.04944047211122737,-1.0719474670982256,,,,,,,,,,,,,0.42754459381103516 +837504,0,-1.3903310737181822,-1.230785711880076,-1.0820659805478523,-1.4114020086428494,-0.35869558526336154,0.17294631652479245,-0.9750588496475414,-0.14539775465670343,0.10125229030563083,-0.23730908679360116,-1.3476641243075844,-0.13173296267509654,-1.812216028287741,0.806708965813594,-0.4645232862317478,0.42754459381103516 +837504,1,-0.6247506469344914,-1.6986343511814288,-1.8964110568340025,,,,,,,,,,-1.1887333502953,-0.3229291202479022,0.4419600012801827,0.5518285036087036 +837504,2,-2.2440209960472646,-1.1961708836158533,-1.521960123094279,,,,,,,,,,,,,0.5518285036087036 +837702,0,-1.27738176877165,-1.000669460045355,-0.8351539579881,-0.674008317525728,-1.4901592762752198,-1.8182679561481092,-1.9785989114421731,-2.2546316519735177,-1.3802224138533508,-2.030547769584031,-0.5613165400266386,-0.9718299928258278,-0.27221658086938805,-0.2910724881500066,0.20460009219036931,1.021496057510376 +837702,1,-1.2975959264107106,-0.6295824302629383,-1.1815354958941209,,,,,,,,,,0.2373400917434395,-1.3914893931436731,-0.5613893220144716,-0.1895303875207901 +837702,2,-1.8504512157542075,0.1272911818441699,-0.5319322799029617,,,,,,,,,,,,,-0.1895303875207901 +838701,0,0.529807110372864,-1.1157275859627156,-0.9586099692679761,-0.9689657939725767,-0.7358501489339809,-0.3959720470960366,-0.61013519081313,-1.3506742674091685,-1.0510058129291326,0.36043714080320877,1.4045524206757267,-0.9718299928258278,0.49778314283978853,0.806708965813594,0.8737234706124865,0.38975751399993896 +838701,1,-0.8169921553562683,-0.2732317899567748,0.45246578625417994,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,1.1944719937511734,0.6877025961875916 +838701,2,-0.9649192100948284,0.5165447305088826,0.18808796969072364,,,,,,,,,,,,,0.6877025961875916 +838902,0,-1.27738176877165,0.03485367321088963,-0.3413299128685955,-0.37905084107887943,-0.48441377315356804,-1.5338087743376947,0.6670976151073104,0.4572405017195292,-1.2156141133912417,-0.835055314390411,-1.3476641243075844,-0.9718299928258278,-1.812216028287741,-0.2910724881500066,-1.133646664653865,1.7672069072723389 +838902,1,0.6248191578070585,-0.6295824302629383,-0.36453485481997044,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-1.3139013144854623,1.6882779598236084 +838902,2,0.2157901307843435,-1.1961708836158533,0.45809556328835566,,,,,,,,,,,,,1.6882779598236084 +839103,0,-2.068026903397375,-0.770553208210634,-0.8351539579881,0.358342850038242,0.39561354207787724,-0.3959720470960366,0.8495594445245161,1.120142583733385,-0.7217892120049145,-0.835055314390411,-0.9544903321671111,-0.5517814777504622,-1.812216028287741,-1.388853942113607,-0.9106055385131593,1.402454137802124 +839103,1,-1.9704412058869298,-1.7877220112579697,-1.7942859766997337,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-1.3139013144854623,1.7210513353347778 +839103,2,-0.6697418748750354,-1.741125851746451,-1.251952529496647,,,,,,,,,,,,,1.7210513353347778 +839304,0,0.6427564153193962,0.3800280509629712,-0.09441789030884316,-1.1164445321960008,-0.7358501489339809,-1.2493495925272802,0.3021739562728989,0.15592137353141286,-1.0510058129291326,-0.23730908679360116,-0.9544903321671111,0.28831555240026907,-2.5822157519969178,-1.388853942113607,-1.133646664653865,1.4967767000198364 +839304,1,0.6248191578070585,-0.18414412988023388,0.14609054585137357,,,,,,,,,,-1.9017700713146695,-0.3229291202479022,-0.059714660367144415,1.480457067489624 +839304,2,0.9045372462971938,0.5165447305088826,-0.441929748703751,,,,,,,,,,,,,1.480457067489624 +839501,0,1.207502940052057,-0.3103207045411919,1.1401422224899183,1.0957365411553635,0.5213317299680837,0.17294631652479245,0.5758667003987075,-0.8685636623081825,1.5827269944646125,-0.23730908679360116,-0.5613165400266386,-0.5517814777504622,1.267782866548965,0.806708965813594,-0.9106055385131593,2.225468873977661 +839501,1,0.33645689517439314,0.08311885034938876,0.7588410266569864,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.8122266528381351,2.3939902782440186 +839501,2,0.2157901307843435,0.7500968597077102,0.9981107504836196,,,,,,,,,,,,,2.3939902782440186 +839502,0,0.4168578054263319,-0.1952625786238314,0.029038120971032973,1.0957365411553635,0.5213317299680837,0.17294631652479245,0.5758667003987075,-0.8685636623081825,1.5827269944646125,-0.23730908679360116,-0.5613165400266386,-0.5517814777504622,0.49778314283978853,-0.2910724881500066,-0.9106055385131593,2.3939902782440186 +839502,1,0.6248191578070585,-0.896845410492561,0.45246578625417994,,,,,,,,,,0.9503768127628092,-1.3914893931436731,-1.3139013144854623,2.4089431762695312 +839502,2,1.0029296913704582,0.6722461499747677,0.45809556328835566,,,,,,,,,,,,,2.4089431762695312 +839801,0,-0.9385338539320537,-0.42537883045855246,-0.5882419354283478,-1.1164445321960008,0.018458978407257843,-0.6804312289064511,-0.8838279349389385,-0.20566158029432668,-0.5571809115428055,-0.835055314390411,-1.3476641243075844,-0.13173296267509654,0.49778314283978853,-1.388853942113607,-0.6875644123724536,1.4451113939285278 +839801,1,0.9131814204397238,0.6176448108086341,1.7800918279996742,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,-0.059714660367144415,1.7448049783706665 +839801,2,-0.7681343199482997,0.1272911818441699,0.008082907292302316,,,,,,,,,,,,,1.7448049783706665 +840501,0,0.6427564153193962,-0.3103207045411919,-0.5882419354283478,-1.2639232704194252,-1.9930320278360456,-1.5338087743376947,-1.24875159377335,-2.314895477611141,-1.2156141133912417,-0.835055314390411,-0.5613165400266386,-0.5517814777504622,-1.0422163045785646,-1.388853942113607,-0.6875644123724536,-0.6929159164428711 +840501,1,0.4325776493852816,0.08311885034938876,-0.7730351753570456,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,-0.8122266528381351,0.1780426800251007 +840501,2,-0.5713494298017712,-0.573365205752313,-0.441929748703751,,,,,,,,,,,,,0.1780426800251007 +841601,0,-0.14788871930632877,0.8402605546324132,0.3994061548106614,0.2108641118148177,-0.2329773973731551,-0.1115128652856221,-0.2452115319787184,0.2764490248066594,0.10125229030563083,-0.835055314390411,0.22503104425430823,0.28831555240026907,0.49778314283978853,-0.2910724881500066,-0.018441033950336395,2.3393518924713135 +841601,1,0.048094632541727786,-0.00596880972715211,-0.9772853356255832,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.8122266528381351,2.6696367263793945 +841601,2,-0.5713494298017712,0.36084331104299755,0.5480980944875663,,,,,,,,,,,,,2.6696367263793945 +842201,0,-0.2608380242528609,-1.000669460045355,-0.8351539579881,0.6533003264850905,-0.2329773973731551,0.7418646801456215,-0.06274970256151263,-0.5069807084824429,0.430468891229849,-0.23730908679360116,-1.3476641243075844,-1.8119270229765592,-1.812216028287741,-1.388853942113607,-1.133646664653865,1.565287709236145 +842201,1,-1.1053544179889336,0.2612941705024705,-0.568785015088508,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-1.0630639836617988,1.492652416229248 +842201,2,-0.4729569847285068,-0.2619623668205428,-0.17192215510611902,,,,,,,,,,,,,1.492652416229248 +847302,0,-0.9385338539320537,-0.5404369563759129,-0.8351539579881,-0.23157210285545515,0.2698953541876708,-0.6804312289064511,-0.1539806172701155,-1.8327848725101548,-0.3925726110806964,-0.835055314390411,0.22503104425430823,-0.5517814777504622,-0.27221658086938805,-0.2910724881500066,0.8737234706124865,2.3900279998779297 +847302,1,0.6248191578070585,-1.6986343511814288,-1.1815354958941209,,,,,,,,,,1.663413533782179,-0.3229291202479022,-0.059714660367144415,1.1466591358184814 +847302,2,0.31418257585760784,-1.5075737225476233,-0.7119373423013831,,,,,,,,,,,,,1.1466591358184814 +847702,0,-0.7126352440389895,0.9553186805497738,-0.09441789030884316,-1.2639232704194252,-1.3644410883850133,-0.9648904107168657,-0.42767336139592416,0.2161851991690361,-1.2156141133912417,-0.23730908679360116,1.4045524206757267,-0.5517814777504622,-1.812216028287741,1.9044904197771946,-0.24148216009104212,2.868598222732544 +847702,1,-0.528629892723603,-0.09505646980369299,1.1673413471940615,,,,,,,,,,0.9503768127628092,1.8141914255436393,-0.059714660367144415,1.945996880531311 +847702,2,-0.37456453965524245,0.1272911818441699,-0.08191962390690835,,,,,,,,,,,,,1.945996880531311 +848002,0,-1.164432463825118,-0.3103207045411919,-3.0573621610258708,-0.8214870557491524,-1.7415956520556326,-0.9648904107168657,-1.24875159377335,-0.38645305720719647,-0.5571809115428055,-0.23730908679360116,0.22503104425430823,-0.5517814777504622,-0.27221658086938805,-1.388853942113607,-1.3566877907945707,1.0868301391601562 +848002,1,-0.33638838430182605,-0.09505646980369299,1.0652162670597927,,,,,,,,,,-1.9017700713146695,-1.3914893931436731,0.4419600012801827,1.0918900966644287 +848002,2,0.2157901307843435,0.36084331104299755,-0.08191962390690835,,,,,,,,,,,,,1.0918900966644287 +848202,0,-0.48673663414592516,-0.08020445270647089,0.2759501435307853,-0.8214870557491524,-0.7358501489339809,-0.9648904107168657,-0.1539806172701155,0.15592137353141286,-1.0510058129291326,-0.23730908679360116,-0.9544903321671111,-0.9718299928258278,0.49778314283978853,0.806708965813594,-0.4645232862317478,1.4882373809814453 +848202,1,0.52869840359617,-0.00596880972715211,1.4737165875968679,,,,,,,,,,0.9503768127628092,-1.3914893931436731,-0.8122266528381351,1.5029147863388062 +848202,2,1.593284361810044,-0.6512159154852555,0.368093032089145,,,,,,,,,,,,,1.5029147863388062 +848401,0,-0.48673663414592516,-0.8856113341279945,-0.7116979467082238,0.358342850038242,0.1441771662974643,-0.1115128652856221,-0.8838279349389385,-0.8685636623081825,1.2535103935403944,-0.835055314390411,0.6182048363947807,0.28831555240026907,-1.0422163045785646,-0.2910724881500066,-0.6875644123724536,1.326094627380371 +848401,1,-0.24026763009093757,-0.2732317899567748,-0.26240977468570165,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.8122266528381351,1.769005537033081 +848401,2,-0.7681343199482997,-0.028410237621715174,0.7281031568859877,,,,,,,,,,,,,1.769005537033081 +848402,0,-1.7291789885577786,-1.000669460045355,-0.8351539579881,0.358342850038242,0.1441771662974643,-0.1115128652856221,-0.8838279349389385,-0.8685636623081825,1.2535103935403944,-0.835055314390411,0.6182048363947807,0.28831555240026907,0.49778314283978853,-0.2910724881500066,0.8737234706124865,2.1296610832214355 +848402,1,-0.33638838430182605,-0.6295824302629383,-1.2836605760283897,,,,,,,,,,-1.9017700713146695,-1.3914893931436731,-0.8122266528381351,2.3137216567993164 +848402,2,-0.27617209458197817,-0.729066625218198,-0.441929748703751,,,,,,,,,,,,,2.3137216567993164 +849403,0,-0.2608380242528609,-0.3103207045411919,-0.3413299128685955,-0.9689657939725767,-0.6101319610437744,-0.9648904107168657,-0.61013519081313,-0.024870103381456905,-1.2156141133912417,-0.835055314390411,-0.16814274788616518,-0.13173296267509654,1.267782866548965,-1.388853942113607,0.20460009219036931,0.5960701704025269 +849403,1,0.2403361409635047,-0.4514071101098565,0.14609054585137357,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.5613893220144716,0.022437866777181625 +849403,2,-0.1777796495087138,-0.4955144960193704,0.18808796969072364,,,,,,,,,,,,,0.022437866777181625 +850302,0,0.19095919553326762,-1.230785711880076,-1.0820659805478523,-0.9689657939725767,-1.4901592762752198,-2.102727137958524,-1.4312134231905558,-2.134104000698271,-0.22796431061858732,-0.835055314390411,-0.9544903321671111,0.7083640674756347,0.49778314283978853,-0.2910724881500066,-0.6875644123724536,-0.395932674407959 +850302,1,-2.0665619600978182,-0.9859330705691017,-1.1815354958941209,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.5613893220144716,0.16403116285800934 +850302,2,-0.6697418748750354,-0.41766378628642786,-1.251952529496647,,,,,,,,,,,,,0.16403116285800934 +853202,0,-0.9385338539320537,-1.1157275859627156,-0.9586099692679761,-0.674008317525728,-1.4901592762752198,-0.6804312289064511,-1.4312134231905558,0.2161851991690361,-1.0510058129291326,-0.835055314390411,-0.5613165400266386,0.28831555240026907,-1.0422163045785646,-1.388853942113607,-0.9106055385131593,1.8348360061645508 +853202,1,-0.33638838430182605,-1.1641083907221836,-0.8751602554913144,,,,,,,,,,-1.9017700713146695,-0.3229291202479022,-1.3139013144854623,1.9098578691482544 +853202,2,-0.4729569847285068,-0.41766378628642786,0.008082907292302316,,,,,,,,,,,,,1.9098578691482544 +853203,0,0.529807110372864,0.03485367321088963,0.029038120971032973,-0.674008317525728,-1.4901592762752198,-0.6804312289064511,-1.4312134231905558,0.2161851991690361,-1.0510058129291326,-0.835055314390411,-0.5613165400266386,0.28831555240026907,1.267782866548965,-1.388853942113607,-1.3566877907945707,1.601650595664978 +853203,1,0.7209399120179469,0.2612941705024705,0.45246578625417994,,,,,,,,,,-1.9017700713146695,-1.3914893931436731,-0.8122266528381351,2.1712863445281982 +853203,2,-0.07938720443544948,0.282992601310055,0.008082907292302316,,,,,,,,,,,,,2.1712863445281982 +854003,0,0.529807110372864,0.4950861768803317,-0.3413299128685955,-0.08409336463203088,-0.6101319610437744,-0.6804312289064511,0.4846357856901046,0.035393722256166354,-0.06335601015647824,0.36043714080320877,1.4045524206757267,0.7083640674756347,1.267782866548965,-0.2910724881500066,1.9889291013160153,1.148128628730774 +854003,1,0.2403361409635047,0.17220651042592966,0.8609661067912552,,,,,,,,,,-0.47569662927593015,0.7456311526478686,0.4419600012801827,1.310645580291748 +854003,2,0.019005240637814846,-0.33981307655348536,0.09808543849151298,,,,,,,,,,,,,1.310645580291748 +854902,0,1.4334015499451211,2.2209580656407395,2.3747023352886796,-0.5265295793023037,1.2756408573093225,1.3107830437664505,0.6670976151073104,-0.4467168828448197,0.430468891229849,1.5559295959968287,-0.16814274788616518,1.1284125825510003,-0.27221658086938805,0.806708965813594,-0.24148216009104212,2.022714614868164 +854902,1,0.2403361409635047,1.6866967317271246,1.6779667478654055,,,,,,,,,,-1.1887333502953,0.7456311526478686,1.1944719937511734,2.044905662536621 +854902,2,0.8061448012239295,1.2172011181053655,0.908108219284409,,,,,,,,,,,,,2.044905662536621 +856101,0,-0.03493941435979663,0.4950861768803317,0.5228621660905376,-1.2639232704194252,-0.7358501489339809,-0.3959720470960366,-0.33644244668732126,-0.26592540593194997,-0.8863975124670236,0.9581833684000187,1.0113786285352542,-0.5517814777504622,-2.5822157519969178,-1.388853942113607,-0.24148216009104212,0.8063206672668457 +856101,1,-0.33638838430182605,1.330346091420961,-0.05815961441716403,,,,,,,,,,-1.9017700713146695,-1.3914893931436731,-0.5613893220144716,1.113524079322815 +856101,2,-0.7681343199482997,1.2172011181053655,-1.0719474670982256,,,,,,,,,,,,,1.113524079322815 +857001,0,0.9816043301589925,-0.08020445270647089,-0.5882419354283478,-0.8214870557491524,-1.9930320278360456,-2.102727137958524,-1.7961370820249674,-1.712257221234908,-0.5571809115428055,-1.432801541987221,-0.5613165400266386,0.7083640674756347,-0.27221658086938805,-1.388853942113607,0.6506823444717807,1.6527677774429321 +857001,1,-0.6247506469344914,-0.18414412988023388,-0.26240977468570165,,,,,,,,,,0.2373400917434395,-1.3914893931436731,-1.3139013144854623,1.2153352499008179 +857001,2,0.019005240637814846,-0.33981307655348536,0.18808796969072364,,,,,,,,,,,,,1.2153352499008179 +857003,0,-0.48673663414592516,-0.5404369563759129,-0.4647859241484716,-0.8214870557491524,-1.9930320278360456,-2.102727137958524,-1.7961370820249674,-1.712257221234908,-0.5571809115428055,-1.432801541987221,-0.5613165400266386,0.7083640674756347,-1.812216028287741,-1.388853942113607,-0.24148216009104212,1.2153352499008179 +857003,1,-1.4898374348324874,-0.896845410492561,-0.9772853356255832,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,-0.059714660367144415,1.0943048000335693 +857003,2,-0.9649192100948284,-1.040469464149968,-1.521960123094279,,,,,,,,,,,,,1.0943048000335693 +857903,0,0.8686550252124604,0.4950861768803317,0.029038120971032973,-1.1164445321960008,-1.4901592762752198,-2.102727137958524,-2.3435225702765847,-1.8327848725101548,-0.8863975124670236,-0.835055314390411,-1.3476641243075844,-0.9718299928258278,0.49778314283978853,-1.388853942113607,-1.3566877907945707,1.1419421434402466 +857903,1,0.52869840359617,-0.7186700903394792,-0.16028469455143282,,,,,,,,,,-1.9017700713146695,-1.3914893931436731,-1.3139013144854623,0.8615133762359619 +857903,2,-0.07938720443544948,-0.18411165708760024,-0.26192468630532967,,,,,,,,,,,,,0.8615133762359619 +857904,0,-1.0514831588785858,1.4155511842192159,1.3870542450496706,-1.1164445321960008,-1.4901592762752198,-2.102727137958524,-2.3435225702765847,-1.8327848725101548,-0.8863975124670236,-0.835055314390411,-1.3476641243075844,-0.9718299928258278,-0.27221658086938805,-1.388853942113607,-1.133646664653865,-0.10603423416614532 +857904,1,0.33645689517439314,1.419433751497502,1.2694664273283303,,,,,,,,,,-1.9017700713146695,-1.3914893931436731,-0.8122266528381351,-0.6931471824645996 +857904,2,0.6093599110774008,0.43869402077594005,1.988138593674937,,,,,,,,,,,,,-0.6931471824645996 +862202,0,-0.7126352440389895,-1.000669460045355,-0.8351539579881,-1.4114020086428494,-0.9872865247143939,-1.2493495925272802,1.3969449327761334,-1.3506742674091685,-0.7217892120049145,1.5559295959968287,0.22503104425430823,-0.9718299928258278,1.267782866548965,-0.2910724881500066,-0.9106055385131593,0.5672407746315002 +862202,1,0.7209399120179469,-0.00596880972715211,0.8609661067912552,,,,,,,,,,0.9503768127628092,-0.3229291202479022,0.4419600012801827,0.2842644155025482 +862202,2,0.41257502093087217,0.8279475694406527,-0.441929748703751,,,,,,,,,,,,,0.2842644155025482 +863102,0,-0.8255845489855216,-0.8856113341279945,-0.5882419354283478,-1.4114020086428494,-2.2444684036164584,-2.3871863197689382,-2.1610607408593787,-1.8327848725101548,-1.2156141133912417,-0.23730908679360116,-0.5613165400266386,-1.8119270229765592,0.49778314283978853,0.806708965813594,-1.133646664653865,0.8933416604995728 +863102,1,-1.201475172199822,-1.7877220112579697,-1.8964110568340025,,,,,,,,,,-1.9017700713146695,0.7456311526478686,-1.0630639836617988,1.7954797744750977 +863102,2,-1.161704100241357,-2.0525286906782214,-1.8819702478911218,,,,,,,,,,,,,1.7954797744750977 +863403,0,-1.3903310737181822,-0.8856113341279945,-0.5882419354283478,-1.1164445321960008,-0.8615683368241874,0.7418646801456215,1.1232521886503248,1.3009340606462547,-0.7217892120049145,0.9581833684000187,-0.16814274788616518,0.28831555240026907,0.49778314283978853,0.806708965813594,-1.133646664653865,0.5119994282722473 +863403,1,-0.9131129095671567,0.08311885034938876,-0.9772853356255832,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.8122266528381351,0.4533287584781647 +863403,2,-0.6697418748750354,-0.10626094735465771,-1.6119626542934897,,,,,,,,,,,,,0.4533287584781647 +863405,0,-0.7126352440389895,-0.770553208210634,-0.7116979467082238,-1.1164445321960008,-0.8615683368241874,0.7418646801456215,1.1232521886503248,1.3009340606462547,-0.7217892120049145,0.9581833684000187,-0.16814274788616518,0.28831555240026907,-1.0422163045785646,-0.2910724881500066,-1.3566877907945707,1.018851399421692 +863405,1,0.7209399120179469,-0.7186700903394792,-0.6709100952227768,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,-1.0630639836617988,1.1350666284561157 +863405,2,0.7077523561506651,-1.1961708836158533,-0.8019398735005937,,,,,,,,,,,,,1.1350666284561157 +864202,0,0.07800989058673549,-0.3103207045411919,-0.7116979467082238,-0.674008317525728,-1.4901592762752198,-2.3871863197689382,-0.1539806172701155,0.2161851991690361,0.10125229030563083,-1.432801541987221,-0.16814274788616518,-0.9718299928258278,0.49778314283978853,-1.388853942113607,-1.133646664653865,0.7603731751441956 +864202,1,-0.4325091385127145,-0.5404947701863974,-1.079410415759852,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-1.0630639836617988,0.6913803815841675 +864202,2,0.11739768571107917,-1.5075737225476233,-1.4319575918950684,,,,,,,,,,,,,0.6913803815841675 +864802,0,0.19095919553326762,-0.42537883045855246,-0.3413299128685955,-0.08409336463203088,-1.7415956520556326,-0.3959720470960366,0.11971212685569313,0.09565754789378961,-0.06335601015647824,-0.23730908679360116,-0.5613165400266386,-1.8119270229765592,1.267782866548965,0.806708965813594,-1.3566877907945707,1.9990390539169312 +864802,1,0.52869840359617,-1.2531960507987243,-1.2836605760283897,,,,,,,,,,0.9503768127628092,0.7456311526478686,0.4419600012801827,2.286637306213379 +864802,2,0.8061448012239295,-0.6512159154852555,-0.26192468630532967,,,,,,,,,,,,,2.286637306213379 +865801,0,-0.2608380242528609,-0.08020445270647089,-0.2178739015887193,-0.37905084107887943,-0.35869558526336154,-0.6804312289064511,1.3969449327761334,0.2161851991690361,-0.3925726110806964,-0.835055314390411,-0.5613165400266386,0.28831555240026907,-0.27221658086938805,0.806708965813594,-0.4645232862317478,2.14208722114563 +865801,1,-2.3549242227304834,0.5285571507320932,-0.36453485481997044,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.5613893220144716,2.157371759414673 +865801,2,-0.6697418748750354,-0.028410237621715174,-0.7119373423013831,,,,,,,,,,,,,2.157371759414673 +866206,0,-1.7291789885577786,-1.000669460045355,-0.8351539579881,-1.1164445321960008,-1.867313839945839,-1.8182679561481092,0.6670976151073104,0.15592137353141286,-0.8863975124670236,-0.835055314390411,-0.16814274788616518,-1.3918785079011935,0.49778314283978853,-1.388853942113607,-0.24148216009104212,-0.12683576345443726 +866206,1,-1.9704412058869298,-0.4514071101098565,-0.9772853356255832,,,,,,,,,,1.663413533782179,-0.3229291202479022,-1.0630639836617988,0.3354036211967468 +866206,2,-2.047236105900736,-0.8069173349511406,-2.151977841488754,,,,,,,,,,,,,0.3354036211967468 +869602,0,-0.5996859390924573,-0.3103207045411919,0.029038120971032973,-0.674008317525728,-0.7358501489339809,-0.6804312289064511,-0.518904276104527,-1.8327848725101548,-0.5571809115428055,0.9581833684000187,1.7977262128162,-0.5517814777504622,-0.27221658086938805,-1.388853942113607,3.104134732019544,0.7335761785507202 +869602,1,-0.528629892723603,-0.4514071101098565,0.35034070611991114,,,,,,,,,,0.2373400917434395,0.7456311526478686,0.4419600012801827,1.12765634059906 +869602,2,-0.8665267650215641,-0.4955144960193704,-0.981944935899015,,,,,,,,,,,,,1.12765634059906 +869701,0,-1.27738176877165,-0.42537883045855246,0.029038120971032973,-0.9689657939725767,-0.2329773973731551,-0.9648904107168657,-0.1539806172701155,-2.0135763494230243,-0.5571809115428055,-0.835055314390411,1.7977262128162,-0.5517814777504622,0.49778314283978853,0.806708965813594,0.8737234706124865,1.3458973169326782 +869701,1,-0.9131129095671567,-1.6986343511814288,-1.1815354958941209,,,,,,,,,,1.663413533782179,0.7456311526478686,-1.0630639836617988,1.848672866821289 +869701,2,-1.2600965453146213,-1.585424432280566,-1.521960123094279,,,,,,,,,,,,,1.848672866821289 +870503,0,0.19095919553326762,-1.1157275859627156,-0.9586099692679761,-0.5265295793023037,-0.6101319610437744,-1.2493495925272802,1.0320212739417218,-0.38645305720719647,-1.3802224138533508,-0.835055314390411,-0.9544903321671111,-0.13173296267509654,-2.5822157519969178,-1.388853942113607,-1.133646664653865,0.13007454574108124 +870503,1,-1.2975959264107106,-0.18414412988023388,-0.26240977468570165,,,,,,,,,,0.2373400917434395,-1.3914893931436731,-0.8122266528381351,-0.6931471824645996 +870503,2,-1.0633116551680928,-0.573365205752313,-0.35192721750454037,,,,,,,,,,,,,-0.6931471824645996 +870803,0,1.0945536351055247,0.9553186805497738,0.5228621660905376,-1.1164445321960008,-1.4901592762752198,-0.9648904107168657,-0.518904276104527,-1.1096189648586756,-1.3802224138533508,-1.432801541987221,-1.740837916448057,-0.9718299928258278,0.49778314283978853,-0.2910724881500066,-0.6875644123724536,1.6754510402679443 +870803,1,1.6821474541268315,0.8849077910382567,0.04396546571710477,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.5613893220144716,2.1084463596343994 +870803,2,1.6916768068833083,0.43869402077594005,0.2780905008899343,,,,,,,,,,,,,2.1084463596343994 +885301,0,-0.2608380242528609,0.8402605546324132,0.6463181773704137,0.06338537359139342,-0.48441377315356804,-0.9648904107168657,-0.1539806172701155,-0.024870103381456905,-0.06335601015647824,-0.835055314390411,-0.16814274788616518,-1.3918785079011935,-1.0422163045785646,-1.388853942113607,-1.133646664653865,1.3729783296585083 +885301,1,0.048094632541727786,0.3503818305790114,-0.16028469455143282,,,,,,,,,,-1.1887333502953,0.7456311526478686,-0.8122266528381351,1.3363447189331055 +885301,2,0.2157901307843435,2.384961764099504,-2.5119879662855964,,,,,,,,,,,,,1.3363447189331055 +886701,0,-0.5996859390924573,0.7252024287150527,-0.2178739015887193,-0.5265295793023037,-1.615877464165426,-0.9648904107168657,-0.9750588496475414,-0.4467168828448197,-0.8863975124670236,-2.030547769584031,-0.9544903321671111,-1.8119270229765592,-0.27221658086938805,0.806708965813594,-1.133646664653865,0.4474456310272217 +886701,1,0.14421538675261625,-0.4514071101098565,-0.36453485481997044,,,,,,,,,,0.2373400917434395,2.88275169843941,-1.3139013144854623,0.7396634817123413 +886701,2,-0.8665267650215641,-1.040469464149968,-0.08191962390690835,,,,,,,,,,,,,0.7396634817123413 +886702,0,-1.3903310737181822,-0.5404369563759129,-0.7116979467082238,-0.5265295793023037,-1.615877464165426,-0.9648904107168657,-0.9750588496475414,-0.4467168828448197,-0.8863975124670236,-2.030547769584031,-0.9544903321671111,-1.8119270229765592,-0.27221658086938805,-0.2910724881500066,-1.3566877907945707,0.7396634817123413 +886702,1,-0.7208714011453798,-0.3623194500333156,0.35034070611991114,,,,,,,,,,0.2373400917434395,1.8141914255436393,-0.310551991190808,0.6211280226707458 +886702,2,-0.37456453965524245,-0.8069173349511406,-0.441929748703751,,,,,,,,,,,,,0.6211280226707458 +887801,0,1.0945536351055247,0.6101443027976923,0.3994061548106614,-0.37905084107887943,-1.615877464165426,-0.3959720470960366,-0.61013519081313,-0.3261892315695732,0.10125229030563083,0.36043714080320877,0.6182048363947807,-0.5517814777504622,0.49778314283978853,-0.2910724881500066,0.8737234706124865,2.2362797260284424 +887801,1,0.52869840359617,0.7958201309617158,0.8609661067912552,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-1.0630639836617988,2.04902720451355 +887801,2,0.5109674660041365,0.9836489889065378,1.448123406479673,,,,,,,,,,,,,2.04902720451355 +888902,0,0.19095919553326762,1.0703768064671344,-0.2178739015887193,-0.5265295793023037,0.5213317299680837,-0.1115128652856221,0.3021739562728989,0.09565754789378961,-0.5571809115428055,-0.835055314390411,-0.5613165400266386,0.7083640674756347,-1.0422163045785646,-0.2910724881500066,0.8737234706124865,1.8396975994110107 +888902,1,-0.14414687588004912,-0.3623194500333156,-1.3857856561626585,,,,,,,,,,-1.1887333502953,-0.3229291202479022,0.6927973321038463,1.6456503868103027 +888902,2,-0.27617209458197817,1.2172011181053655,1.2681183440812516,,,,,,,,,,,,,1.6456503868103027 +890401,0,0.529807110372864,0.2649699250456107,-0.3413299128685955,0.6533003264850905,-0.48441377315356804,0.457405498335207,-1.6136752526077616,0.5777681529947757,0.430468891229849,-0.835055314390411,-0.9544903321671111,0.7083640674756347,0.49778314283978853,-1.388853942113607,0.20460009219036931,1.9095518589019775 +890401,1,0.33645689517439314,-0.4514071101098565,0.04396546571710477,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.310551991190808,2.0273759365081787 +890401,2,0.2157901307843435,-0.6512159154852555,0.368093032089145,,,,,,,,,,,,,2.0273759365081787 +890901,0,-0.14788871930632877,-0.5404369563759129,-0.4647859241484716,-0.37905084107887943,-0.8615683368241874,-0.9648904107168657,0.210943041564296,0.09565754789378961,-0.3925726110806964,0.36043714080320877,0.22503104425430823,1.1284125825510003,-1.0422163045785646,0.806708965813594,0.8737234706124865,0.04198045656085014 +890901,1,1.0093021746506123,0.08311885034938876,0.6567159465227176,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,2.197821317045828,0.07061395049095154 +890901,2,1.1013221364437225,-0.028410237621715174,0.638100625686777,,,,,,,,,,,,,0.07061395049095154 +890902,0,1.9981480746777818,0.14991179912825014,1.5105102563295467,-0.37905084107887943,-0.8615683368241874,-0.9648904107168657,0.210943041564296,0.09565754789378961,-0.3925726110806964,0.36043714080320877,0.22503104425430823,1.1284125825510003,-1.0422163045785646,-0.2910724881500066,1.7658879751753094,0.07061395049095154 +890902,1,-0.04802612166916067,0.3503818305790114,0.6567159465227176,,,,,,,,,,0.2373400917434395,0.7456311526478686,1.1944719937511734,1.5868988037109375 +890902,2,-0.27617209458197817,-0.4955144960193704,0.09808543849151298,,,,,,,,,,,,,1.5868988037109375 +892602,0,-0.8255845489855216,-0.770553208210634,-0.8351539579881,-1.1164445321960008,0.2698953541876708,0.457405498335207,-0.8838279349389385,-0.20566158029432668,-0.8863975124670236,0.36043714080320877,0.22503104425430823,1.1284125825510003,-1.0422163045785646,-0.2910724881500066,-0.24148216009104212,0.9227645397186279 +892602,1,-1.2975959264107106,-1.609546691104888,-1.6921608965654649,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.310551991190808,1.0860345363616943 +892602,2,-1.3584889903878858,-1.6632751420135086,-1.791967716691911,,,,,,,,,,,,,1.0860345363616943 +893201,0,0.3039085004797998,0.9553186805497738,-0.5882419354283478,-1.1164445321960008,-0.48441377315356804,-0.3959720470960366,0.6670976151073104,-1.5917295699596616,-1.2156141133912417,-0.835055314390411,0.6182048363947807,-0.5517814777504622,-1.0422163045785646,-0.2910724881500066,-0.6875644123724536,1.58408522605896 +893201,1,0.4325776493852816,0.17220651042592966,0.8609661067912552,,,,,,,,,,-0.47569662927593015,1.8141914255436393,0.19112267045651915,1.5905905961990356 +893201,2,-0.1777796495087138,-0.2619623668205428,-0.17192215510611902,,,,,,,,,,,,,1.5905905961990356 +893801,0,-0.7126352440389895,-1.1157275859627156,-0.9586099692679761,-0.674008317525728,-1.2387229004948068,-0.9648904107168657,-0.61013519081313,-1.4109380930467919,-1.0510058129291326,0.36043714080320877,-0.16814274788616518,-0.13173296267509654,-1.0422163045785646,-0.2910724881500066,3.104134732019544,1.897551417350769 +893801,1,-1.1053544179889336,-1.431371370951806,-1.2836605760283897,,,,,,,,,,0.2373400917434395,-0.3229291202479022,0.19112267045651915,1.9718661308288574 +893801,2,0.2157901307843435,-1.040469464149968,-1.1619499982974364,,,,,,,,,,,,,1.9718661308288574 +894201,0,-0.2608380242528609,0.14991179912825014,-0.09441789030884316,-0.08409336463203088,0.1441771662974643,0.457405498335207,1.1232521886503248,-0.9288274879458058,0.2658605907677399,1.5559295959968287,-0.16814274788616518,0.28831555240026907,0.49778314283978853,-0.2910724881500066,0.8737234706124865,1.6261838674545288 +894201,1,-0.8169921553562683,-0.2732317899567748,-0.16028469455143282,,,,,,,,,,0.9503768127628092,2.88275169843941,-0.310551991190808,1.5347334146499634 +894201,2,-0.5713494298017712,0.43869402077594005,0.18808796969072364,,,,,,,,,,,,,1.5347334146499634 +894202,0,-0.37378732919939306,-1.230785711880076,-1.0820659805478523,-0.08409336463203088,0.1441771662974643,0.457405498335207,1.1232521886503248,-0.9288274879458058,0.2658605907677399,1.5559295959968287,-0.16814274788616518,0.28831555240026907,0.49778314283978853,1.9044904197771946,-0.4645232862317478,1.7443128824234009 +894202,1,1.1054229288615007,-0.3623194500333156,0.04396546571710477,,,,,,,,,,0.2373400917434395,1.8141914255436393,-0.5613893220144716,1.7414125204086304 +894202,2,1.1997145815169867,0.1272911818441699,0.2780905008899343,,,,,,,,,,,,,1.7414125204086304 +894403,0,-0.2608380242528609,0.7252024287150527,-0.4647859241484716,-0.9689657939725767,0.1441771662974643,-1.2493495925272802,-0.7013661055217327,0.09565754789378961,-0.06335601015647824,1.5559295959968287,-0.9544903321671111,-1.3918785079011935,-0.27221658086938805,0.806708965813594,-1.3566877907945707,2.0619263648986816 +894403,1,-0.04802612166916067,0.5285571507320932,0.7588410266569864,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.8122266528381351,1.8665237426757812 +894403,2,0.31418257585760784,-0.18411165708760024,0.09808543849151298,,,,,,,,,,,,,1.8665237426757812 +894601,0,-0.7126352440389895,0.4950861768803317,0.2759501435307853,1.2432152793787876,-0.48441377315356804,0.457405498335207,0.6670976151073104,0.5777681529947757,0.7596854921540671,-0.23730908679360116,0.22503104425430823,-1.3918785079011935,0.49778314283978853,-0.2910724881500066,-0.9106055385131593,0.7819690704345703 +894601,1,-0.7208714011453798,-0.00596880972715211,-0.9772853356255832,,,,,,,,,,0.9503768127628092,-1.3914893931436731,-0.8122266528381351,0.7152848243713379 +894601,2,-0.37456453965524245,0.6722461499747677,-0.441929748703751,,,,,,,,,,,,,0.7152848243713379 +894803,0,-1.0514831588785858,-1.1157275859627156,-0.9586099692679761,-0.8214870557491524,-2.118750215726252,-0.9648904107168657,-1.24875159377335,-1.1698827904962987,-1.0510058129291326,-0.835055314390411,-0.9544903321671111,-0.9718299928258278,-0.27221658086938805,0.806708965813594,-1.3566877907945707,0.5336511135101318 +894803,1,-0.4325091385127145,-1.2531960507987243,-1.3857856561626585,,,,,,,,,,0.2373400917434395,-1.3914893931436731,-1.3139013144854623,0.5030383467674255 +894803,2,-0.9649192100948284,-0.729066625218198,-0.6219348111021723,,,,,,,,,,,,,0.5030383467674255 +895301,0,-0.9385338539320537,-1.000669460045355,-0.8351539579881,-0.8214870557491524,-0.9872865247143939,-1.2493495925272802,-2.1610607408593787,-1.9533125237854012,-0.06335601015647824,0.9581833684000187,0.22503104425430823,-1.3918785079011935,0.49778314283978853,-0.2910724881500066,-0.24148216009104212,1.8857914209365845 +895301,1,-0.24026763009093757,-0.6295824302629383,0.45246578625417994,,,,,,,,,,0.2373400917434395,-1.3914893931436731,-0.310551991190808,2.0037927627563477 +895301,2,-1.0633116551680928,0.43869402077594005,0.008082907292302316,,,,,,,,,,,,,2.0037927627563477 +896202,0,-0.37378732919939306,-0.6554950822932735,-0.3413299128685955,-0.08409336463203088,-0.48441377315356804,0.457405498335207,0.6670976151073104,0.2161851991690361,-0.5571809115428055,0.9581833684000187,1.0113786285352542,0.7083640674756347,0.49778314283978853,1.9044904197771946,-0.4645232862317478,2.0590553283691406 +896202,1,0.33645689517439314,-0.7186700903394792,-0.568785015088508,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.5613893220144716,1.7919895648956299 +896202,2,-0.27617209458197817,-0.729066625218198,-0.5319322799029617,,,,,,,,,,,,,1.7919895648956299 +896203,0,-1.164432463825118,-1.000669460045355,-0.8351539579881,-0.08409336463203088,-0.48441377315356804,0.457405498335207,0.6670976151073104,0.2161851991690361,-0.5571809115428055,0.9581833684000187,1.0113786285352542,0.7083640674756347,0.49778314283978853,-1.388853942113607,0.20460009219036931,1.8890836238861084 +896203,1,0.048094632541727786,-0.2732317899567748,-1.079410415759852,,,,,,,,,,0.9503768127628092,-1.3914893931436731,0.4419600012801827,2.0335779190063477 +896203,2,1.1997145815169867,-0.2619623668205428,0.18808796969072364,,,,,,,,,,,,,2.0335779190063477 +899602,0,-0.8255845489855216,-1.000669460045355,-0.8351539579881,-1.4114020086428494,-0.7358501489339809,0.17294631652479245,-1.339982508481953,-1.5917295699596616,-0.5571809115428055,0.9581833684000187,-0.5613165400266386,-1.3918785079011935,-0.27221658086938805,-1.388853942113607,-0.9106055385131593,2.394554376602173 +899602,1,-0.04802612166916067,-0.18414412988023388,-0.7730351753570456,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.5613893220144716,2.5016679763793945 +899602,2,-0.27617209458197817,0.36084331104299755,-0.8919424046998043,,,,,,,,,,,,,2.5016679763793945 +901901,0,0.4168578054263319,-0.42537883045855246,0.3994061548106614,0.2108641118148177,0.6470499178582901,0.7418646801456215,-1.7049061673163644,-0.6877721853953127,0.7596854921540671,-0.835055314390411,-0.5613165400266386,-1.3918785079011935,1.267782866548965,3.002271873740795,0.8737234706124865,0.5839208960533142 +901901,1,0.14421538675261625,-0.3623194500333156,0.24821562598564237,,,,,,,,,,0.9503768127628092,1.8141914255436393,-0.310551991190808,0.6490850448608398 +901901,2,-0.4729569847285068,-0.10626094735465771,0.18808796969072364,,,,,,,,,,,,,0.6490850448608398 +901902,0,0.529807110372864,-0.3103207045411919,-0.2178739015887193,0.2108641118148177,0.6470499178582901,0.7418646801456215,-1.7049061673163644,-0.6877721853953127,0.7596854921540671,-0.835055314390411,-0.5613165400266386,-1.3918785079011935,0.49778314283978853,1.9044904197771946,-0.24148216009104212,0.6490850448608398 +901902,1,0.2403361409635047,-0.896845410492561,-1.2836605760283897,,,,,,,,,,0.9503768127628092,1.8141914255436393,-0.059714660367144415,0.6019249558448792 +901902,2,0.019005240637814846,-0.8847680446840831,-0.17192215510611902,,,,,,,,,,,,,0.6019249558448792 +903302,0,-0.7126352440389895,-1.3458438377974367,-1.2055219918277285,-1.1164445321960008,-1.615877464165426,-1.2493495925272802,-0.7925970202303356,-2.435423128886387,-1.2156141133912417,-2.030547769584031,1.7977262128162,0.7083640674756347,-1.0422163045785646,-0.2910724881500066,0.42764121833107505,2.383884906768799 +903302,1,-0.6247506469344914,-1.6986343511814288,-0.9772853356255832,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.8122266528381351,1.9055811166763306 +903302,2,-1.0633116551680928,-1.585424432280566,-1.7019651854927003,,,,,,,,,,,,,1.9055811166763306 +903703,0,-1.7291789885577786,-1.000669460045355,-0.8351539579881,-0.8214870557491524,-1.2387229004948068,-1.2493495925272802,-0.33644244668732126,-0.38645305720719647,-0.8863975124670236,-0.835055314390411,-0.16814274788616518,0.7083640674756347,-1.0422163045785646,-1.388853942113607,-0.4645232862317478,0.41180187463760376 +903703,1,-1.7781996974651528,-1.3422837108752652,-0.8751602554913144,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.059714660367144415,0.39685460925102234 +903703,2,-0.9649192100948284,-0.6512159154852555,0.2780905008899343,,,,,,,,,,,,,0.39685460925102234 +904002,0,0.529807110372864,-0.42537883045855246,-0.09441789030884316,-0.9689657939725767,-2.4959047793968714,-1.2493495925272802,-1.6136752526077616,-0.3261892315695732,-1.2156141133912417,-0.835055314390411,-0.9544903321671111,0.7083640674756347,-1.0422163045785646,1.9044904197771946,-1.133646664653865,1.4621953964233398 +904002,1,0.048094632541727786,1.2412584313444202,0.45246578625417994,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-1.0630639836617988,1.4181597232818604 +904002,2,-0.1777796495087138,0.7500968597077102,0.368093032089145,,,,,,,,,,,,,1.4181597232818604 +904502,0,0.7557057202659283,0.14991179912825014,0.5228621660905376,-0.23157210285545515,-0.6101319610437744,0.17294631652479245,1.3969449327761334,0.9996149324581385,0.7596854921540671,-0.23730908679360116,-0.5613165400266386,-0.13173296267509654,-0.27221658086938805,0.806708965813594,-0.4645232862317478,0.8563500642776489 +904502,1,0.2403361409635047,0.7067324708851749,1.371591507462599,,,,,,,,,,-1.1887333502953,0.7456311526478686,-0.5613893220144716,0.25935599207878113 +904502,2,0.11739768571107917,1.450753247304193,0.908108219284409,,,,,,,,,,,,,0.25935599207878113 +908101,0,0.19095919553326762,0.7252024287150527,1.016686211210042,-0.674008317525728,-1.867313839945839,-1.5338087743376947,-1.8873679967335701,-1.0493551392210523,-1.2156141133912417,-2.030547769584031,-2.5271855007290034,-0.9718299928258278,0.49778314283978853,-1.388853942113607,0.20460009219036931,1.3541992902755737 +908101,1,0.8170606662288354,-0.6295824302629383,0.7588410266569864,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.5613893220144716,-0.17095910012722015 +908101,2,0.41257502093087217,-0.33981307655348536,0.2780905008899343,,,,,,,,,,,,,-0.17095910012722015 +909201,0,0.7557057202659283,0.9553186805497738,0.7697741886502898,-0.37905084107887943,0.1441771662974643,0.457405498335207,0.6670976151073104,0.09565754789378961,-0.5571809115428055,-0.23730908679360116,-1.3476641243075844,-2.2319755380519246,0.49778314283978853,0.806708965813594,-0.018441033950336395,0.6834262609481812 +909201,1,0.6248191578070585,1.419433751497502,0.7588410266569864,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.059714660367144415,1.8457883596420288 +909201,2,-0.07938720443544948,1.6843053765030207,1.8081335312765157,,,,,,,,,,,,,1.8457883596420288 +910001,0,-0.14788871930632877,-0.08020445270647089,-0.5882419354283478,-0.8214870557491524,-0.48441377315356804,-0.1115128652856221,-0.7013661055217327,-1.712257221234908,-0.06335601015647824,-0.835055314390411,0.22503104425430823,0.28831555240026907,-0.27221658086938805,-0.2910724881500066,-0.4645232862317478,1.6535903215408325 +910001,1,-0.33638838430182605,0.08311885034938876,-0.26240977468570165,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.310551991190808,1.456284761428833 +910001,2,0.019005240637814846,0.6722461499747677,-0.17192215510611902,,,,,,,,,,,,,1.456284761428833 +910003,0,-0.8255845489855216,-0.6554950822932735,-0.7116979467082238,-0.8214870557491524,-0.48441377315356804,-0.1115128652856221,-0.7013661055217327,-1.712257221234908,-0.06335601015647824,-0.835055314390411,0.22503104425430823,0.28831555240026907,0.49778314283978853,1.9044904197771946,-0.4645232862317478,1.4489346742630005 +910003,1,-0.4325091385127145,0.5285571507320932,-0.36453485481997044,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.310551991190808,0.8208858370780945 +910003,2,-4.40865478765908,-2.8310357880076467,-2.7819955598832284,,,,,,,,,,,,,0.8208858370780945 +910102,0,-1.164432463825118,-0.6554950822932735,-0.8351539579881,-1.1164445321960008,-2.118750215726252,-2.3871863197689382,-2.982138973236805,-2.616214605799257,-1.5448307143154598,-0.835055314390411,-0.9544903321671111,0.28831555240026907,-0.27221658086938805,1.9044904197771946,-0.9106055385131593,0.16645944118499756 +910102,1,-1.4898374348324874,-1.520459031028347,-0.6709100952227768,,,,,,,,,,0.2373400917434395,2.88275169843941,0.6927973321038463,0.45304128527641296 +910102,2,-1.2600965453146213,-1.8968272712123362,-0.441929748703751,,,,,,,,,,,,,0.45304128527641296 +910103,0,0.07800989058673549,-0.3103207045411919,-0.3413299128685955,-1.1164445321960008,-2.118750215726252,-2.3871863197689382,-2.982138973236805,-2.616214605799257,-1.5448307143154598,-0.835055314390411,-0.9544903321671111,0.28831555240026907,0.49778314283978853,-1.388853942113607,-0.9106055385131593,0.45526236295700073 +910103,1,-1.6820789432542644,-0.6295824302629383,-0.26240977468570165,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-1.0630639836617988,-0.12737418711185455 +910103,2,-1.5552738805344144,-1.1961708836158533,-1.9719727790903323,,,,,,,,,,,,,-0.12737418711185455 +911701,0,0.7557057202659283,1.5306093101365763,1.6339662676094229,0.5058215882616662,0.8984862936387031,0.7418646801456215,0.210943041564296,0.2764490248066594,0.430468891229849,-0.23730908679360116,-0.16814274788616518,-0.5517814777504622,0.49778314283978853,-1.388853942113607,-0.6875644123724536,2.1120355129241943 +911701,1,0.52869840359617,1.0630831111913384,0.5545908663884488,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-1.0630639836617988,2.237985372543335 +911701,2,0.41257502093087217,0.6722461499747677,0.638100625686777,,,,,,,,,,,,,2.237985372543335 +914401,0,-0.7126352440389895,0.8402605546324132,0.15249413225090913,0.8007790647085149,0.39561354207787724,1.3107830437664505,-0.42767336139592416,0.3367128504442826,0.595077191691958,-2.030547769584031,-2.5271855007290034,-0.13173296267509654,1.267782866548965,0.806708965813594,-0.24148216009104212,1.2514903545379639 +914401,1,-0.14414687588004912,1.2412584313444202,-0.46665993495423924,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,1.1944719937511734,1.768213152885437 +914401,2,-0.37456453965524245,1.6843053765030207,0.2780905008899343,,,,,,,,,,,,,1.768213152885437 +914402,0,1.320452244998589,1.0703768064671344,1.1401422224899183,0.8007790647085149,0.39561354207787724,1.3107830437664505,-0.42767336139592416,0.3367128504442826,0.595077191691958,-2.030547769584031,-2.5271855007290034,-0.13173296267509654,-1.0422163045785646,-0.2910724881500066,0.8737234706124865,1.768213152885437 +914402,1,0.7209399120179469,1.330346091420961,0.7588410266569864,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.059714660367144415,1.9472538232803345 +914402,2,0.11739768571107917,0.43869402077594005,0.638100625686777,,,,,,,,,,,,,1.9472538232803345 +914403,0,-0.2608380242528609,-0.1952625786238314,-0.2178739015887193,0.8007790647085149,0.39561354207787724,1.3107830437664505,-0.42767336139592416,0.3367128504442826,0.595077191691958,-2.030547769584031,-2.5271855007290034,-0.13173296267509654,-1.0422163045785646,0.806708965813594,-0.24148216009104212,1.9472538232803345 +914403,1,-1.4898374348324874,-1.431371370951806,-1.2836605760283897,,,,,,,,,,0.9503768127628092,0.7456311526478686,2.4486586478694914,2.0562407970428467 +914403,2,-0.5713494298017712,0.1272911818441699,0.8181056880851983,,,,,,,,,,,,,2.0562407970428467 +919301,0,-0.7126352440389895,0.14991179912825014,-0.4647859241484716,-0.674008317525728,-0.7358501489339809,-1.2493495925272802,-0.33644244668732126,-0.8685636623081825,-0.7217892120049145,1.5559295959968287,0.6182048363947807,-0.5517814777504622,1.267782866548965,0.806708965813594,0.42764121833107505,1.6479153633117676 +919301,1,-1.1053544179889336,-0.00596880972715211,-1.079410415759852,,,,,,,,,,1.663413533782179,1.8141914255436393,0.4419600012801827,1.2461656332015991 +919301,2,-0.6697418748750354,-0.8069173349511406,-0.35192721750454037,,,,,,,,,,,,,1.2461656332015991 +920501,0,-1.0514831588785858,-1.230785711880076,-1.0820659805478523,-1.1164445321960008,-1.2387229004948068,-2.671645501579353,-2.069829826150776,-0.8082998366705593,-0.8863975124670236,-3.226040224777651,-0.5613165400266386,0.7083640674756347,-1.812216028287741,-1.388853942113607,-0.9106055385131593,0.44122472405433655 +920501,1,-1.0092336637780452,-1.2531960507987243,-1.3857856561626585,,,,,,,,,,-1.9017700713146695,-0.3229291202479022,-0.8122266528381351,0.47123631834983826 +920501,2,-0.1777796495087138,-0.6512159154852555,-0.26192468630532967,,,,,,,,,,,,,0.47123631834983826 +920601,0,-1.27738176877165,-1.230785711880076,-1.0820659805478523,-1.4114020086428494,-1.3644410883850133,-1.2493495925272802,-0.7925970202303356,-0.4467168828448197,-0.8863975124670236,-0.835055314390411,-0.16814274788616518,-0.5517814777504622,1.267782866548965,0.806708965813594,0.8737234706124865,1.0719356536865234 +920601,1,-2.1626827143087066,-1.8768096713345106,-2.10066121710254,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.310551991190808,0.7210389971733093 +920601,2,-0.5713494298017712,-2.286080819877049,-2.151977841488754,,,,,,,,,,,,,0.7210389971733093 +920602,0,1.5463508548916531,-1.000669460045355,-0.8351539579881,-1.4114020086428494,-1.3644410883850133,-1.2493495925272802,-0.7925970202303356,-0.4467168828448197,-0.8863975124670236,-0.835055314390411,-0.16814274788616518,-0.5517814777504622,0.49778314283978853,-0.2910724881500066,-0.4645232862317478,0.7210389971733093 +920602,1,0.9131814204397238,-1.431371370951806,-1.3857856561626585,,,,,,,,,,1.663413533782179,-0.3229291202479022,3.7028453019878094,0.8684980869293213 +920602,2,1.1013221364437225,-1.429723012814681,-0.35192721750454037,,,,,,,,,,,,,0.8684980869293213 +921402,0,-0.8255845489855216,0.8402605546324132,-0.09441789030884316,-1.5588807468662738,-0.35869558526336154,-1.2493495925272802,-1.7961370820249674,-1.1096189648586756,-0.7217892120049145,1.5559295959968287,1.7977262128162,-0.9718299928258278,-1.0422163045785646,0.806708965813594,0.20460009219036931,0.7417820692062378 +921402,1,-0.7208714011453798,1.2412584313444202,-0.26240977468570165,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-1.0630639836617988,0.6688825488090515 +921402,2,-0.6697418748750354,1.295051827838308,-4.222036059070599,,,,,,,,,,,,,0.6688825488090515 +921403,0,-0.8255845489855216,-0.08020445270647089,-0.3413299128685955,-1.5588807468662738,-0.35869558526336154,-1.2493495925272802,-1.7961370820249674,-1.1096189648586756,-0.7217892120049145,1.5559295959968287,1.7977262128162,-0.9718299928258278,-0.27221658086938805,-0.2910724881500066,-1.133646664653865,0.6688825488090515 +921403,1,-0.24026763009093757,-0.3623194500333156,-0.7730351753570456,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-1.0630639836617988,1.2572916746139526 +921403,2,-0.7681343199482997,-0.33981307655348536,-0.6219348111021723,,,,,,,,,,,,,1.2572916746139526 +922901,0,0.3039085004797998,-0.6554950822932735,-0.5882419354283478,0.5058215882616662,-0.35869558526336154,0.17294631652479245,1.4881758474847362,0.8188234555452687,0.2658605907677399,1.5559295959968287,1.0113786285352542,-0.5517814777504622,-0.27221658086938805,0.806708965813594,0.20460009219036931,2.273139715194702 +922901,1,0.8170606662288354,0.08311885034938876,1.2694664273283303,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.059714660367144415,2.2974038124084473 +922901,2,-0.07938720443544948,-0.028410237621715174,0.18808796969072364,,,,,,,,,,,,,2.2974038124084473 +922902,0,-0.9385338539320537,0.6101443027976923,-0.09441789030884316,0.5058215882616662,-0.35869558526336154,0.17294631652479245,1.4881758474847362,0.8188234555452687,0.2658605907677399,1.5559295959968287,1.0113786285352542,-0.5517814777504622,1.267782866548965,-0.2910724881500066,0.20460009219036931,2.522961378097534 +922902,1,0.6248191578070585,0.5285571507320932,-0.8751602554913144,,,,,,,,,,0.9503768127628092,-1.3914893931436731,-0.059714660367144415,2.54594087600708 +922902,2,1.1013221364437225,0.5165447305088826,-1.1619499982974364,,,,,,,,,,,,,2.54594087600708 +925602,0,-1.27738176877165,-1.000669460045355,-0.8351539579881,-0.9689657939725767,-1.1130047126046003,-0.1115128652856221,0.4846357856901046,1.3009340606462547,-0.8863975124670236,1.5559295959968287,1.4045524206757267,-0.13173296267509654,1.267782866548965,-1.388853942113607,-0.9106055385131593,1.7142808437347412 +925602,1,0.33645689517439314,-1.0750207306456427,-1.2836605760283897,,,,,,,,,,0.9503768127628092,1.8141914255436393,-0.5613893220144716,1.902241826057434 +925602,2,-0.27617209458197817,-1.1183201738829107,-1.3419550606958577,,,,,,,,,,,,,1.902241826057434 +928101,0,-0.5996859390924573,-0.1952625786238314,-0.09441789030884316,-0.674008317525728,-0.10725920948294862,-1.5338087743376947,-0.7925970202303356,-0.14539775465670343,-0.3925726110806964,-0.23730908679360116,-0.9544903321671111,0.28831555240026907,-1.812216028287741,-1.388853942113607,-0.6875644123724536,0.7989391684532166 +928101,1,-0.04802612166916067,0.17220651042592966,-0.16028469455143282,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.310551991190808,1.6456503868103027 +928101,2,-0.4729569847285068,-0.6512159154852555,0.09808543849151298,,,,,,,,,,,,,1.6456503868103027 +928701,0,0.3039085004797998,0.03485367321088963,-0.09441789030884316,-1.2639232704194252,-0.2329773973731551,0.7418646801456215,-1.339982508481953,0.4572405017195292,-1.0510058129291326,-0.835055314390411,-0.5613165400266386,0.7083640674756347,0.49778314283978853,-0.2910724881500066,0.42764121833107505,1.3370261192321777 +928701,1,-1.1053544179889336,-0.00596880972715211,-0.9772853356255832,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.310551991190808,1.2578848600387573 +928701,2,-0.6697418748750354,-0.18411165708760024,0.638100625686777,,,,,,,,,,,,,1.2578848600387573 +929805,0,-0.5996859390924573,-0.08020445270647089,-0.09441789030884316,1.833130232272485,1.149922669419116,1.026323861956036,1.4881758474847362,1.0598787580957618,1.0889020930782853,-0.23730908679360116,0.22503104425430823,1.1284125825510003,-0.27221658086938805,0.806708965813594,0.20460009219036931,0.7595062255859375 +929805,1,0.048094632541727786,-0.5404947701863974,-1.1815354958941209,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.8122266528381351,1.0288760662078857 +929805,2,0.11739768571107917,-0.9626187544170256,-0.08191962390690835,,,,,,,,,,,,,1.0288760662078857 +931201,0,0.07800989058673549,1.645667436053937,0.2759501435307853,-0.674008317525728,-1.1130047126046003,-0.6804312289064511,-0.2452115319787184,-0.6275083597576895,0.10125229030563083,-0.835055314390411,-1.3476641243075844,1.1284125825510003,-2.5822157519969178,-0.2910724881500066,-0.9106055385131593,0.13021844625473022 +931201,1,-0.6247506469344914,-1.0750207306456427,-0.46665993495423924,,,,,,,,,,-1.9017700713146695,-1.3914893931436731,-1.3139013144854623,0.2557781934738159 +931201,2,-0.4729569847285068,-0.729066625218198,-0.6219348111021723,,,,,,,,,,,,,0.2557781934738159 +934101,0,-1.164432463825118,-0.08020445270647089,0.5228621660905376,-0.674008317525728,-1.1130047126046003,1.026323861956036,-0.61013519081313,-0.6877721853953127,0.430468891229849,0.36043714080320877,-0.16814274788616518,-1.3918785079011935,-1.812216028287741,-0.2910724881500066,0.8737234706124865,1.456284761428833 +934101,1,-1.8743204516760412,0.8849077910382567,-1.7942859766997337,,,,,,,,,,-1.1887333502953,2.88275169843941,-0.059714660367144415,-0.6880087852478027 +934101,2,-0.5713494298017712,0.5943954402418251,-0.441929748703751,,,,,,,,,,,,,-0.6880087852478027 +934102,0,0.19095919553326762,0.7252024287150527,-0.5882419354283478,-0.674008317525728,-1.1130047126046003,1.026323861956036,-0.61013519081313,-0.6877721853953127,0.430468891229849,0.36043714080320877,-0.16814274788616518,-1.3918785079011935,-1.812216028287741,-0.2910724881500066,-0.6875644123724536,-0.6880087852478027 +934102,1,0.8170606662288354,-0.00596880972715211,0.14609054585137357,,,,,,,,,,0.9503768127628092,0.7456311526478686,1.1944719937511734,1.638952374458313 +934102,2,0.41257502093087217,-0.10626094735465771,0.008082907292302316,,,,,,,,,,,,,1.638952374458313 +936001,0,0.529807110372864,1.645667436053937,2.1277903127289273,0.2108641118148177,1.2756408573093225,1.026323861956036,0.028481212147090252,-0.20566158029432668,1.4181186940025035,-0.23730908679360116,-0.5613165400266386,-0.5517814777504622,0.49778314283978853,0.806708965813594,3.104134732019544,2.8746187686920166 +936001,1,1.4899059457050545,1.2412584313444202,0.6567159465227176,,,,,,,,,,0.9503768127628092,0.7456311526478686,0.19112267045651915,2.7267251014709473 +936001,2,0.9045372462971938,0.9836489889065378,0.8181056880851983,,,,,,,,,,,,,2.7267251014709473 +938102,0,-0.14788871930632877,-0.08020445270647089,-0.3413299128685955,0.358342850038242,0.5213317299680837,-0.1115128652856221,0.6670976151073104,-0.8082998366705593,-0.3925726110806964,0.36043714080320877,1.4045524206757267,1.1284125825510003,-1.0422163045785646,-0.2910724881500066,-0.6875644123724536,2.4735782146453857 +938102,1,0.4325776493852816,0.4394694906555523,-0.36453485481997044,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.8122266528381351,2.604126453399658 +938102,2,0.2157901307843435,0.43869402077594005,0.09808543849151298,,,,,,,,,,,,,2.604126453399658 +938103,0,0.3039085004797998,0.6101443027976923,0.6463181773704137,0.358342850038242,0.5213317299680837,-0.1115128652856221,0.6670976151073104,-0.8082998366705593,-0.3925726110806964,0.36043714080320877,1.4045524206757267,1.1284125825510003,-0.27221658086938805,0.806708965813594,-0.4645232862317478,2.604126453399658 +938103,1,0.2403361409635047,0.8849077910382567,-0.9772853356255832,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-1.0630639836617988,2.4343323707580566 +938103,2,1.1997145815169867,1.7621560862359633,0.8181056880851983,,,,,,,,,,,,,2.4343323707580566 +940102,0,-0.37378732919939306,-0.6554950822932735,-0.7116979467082238,-1.1164445321960008,1.2756408573093225,0.17294631652479245,-1.0662897643561442,-0.14539775465670343,-0.5571809115428055,-0.835055314390411,1.4045524206757267,-0.5517814777504622,-0.27221658086938805,0.806708965813594,-0.24148216009104212,1.204970359802246 +940102,1,-2.0665619600978182,-1.3422837108752652,-1.1815354958941209,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.8122266528381351,1.1517411470413208 +940102,2,0.6093599110774008,-1.040469464149968,-0.08191962390690835,,,,,,,,,,,,,1.1517411470413208 +942101,0,-0.5996859390924573,-1.5759600896321577,-1.4524340143874808,0.9482578029319392,1.0242044815289095,-0.1115128652856221,-0.7013661055217327,0.09565754789378961,0.595077191691958,-0.835055314390411,0.22503104425430823,-0.13173296267509654,1.267782866548965,0.806708965813594,-0.6875644123724536,2.5971994400024414 +942101,1,-0.14414687588004912,-0.2732317899567748,-0.05815961441716403,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.8122266528381351,2.6048038005828857 +942101,2,-0.07938720443544948,-0.10626094735465771,0.008082907292302316,,,,,,,,,,,,,2.6048038005828857 +942302,0,-1.8421282935043108,-3.0717157265578443,-3.0573621610258708,-0.5265295793023037,-0.8615683368241874,0.17294631652479245,-0.9750588496475414,0.4572405017195292,-0.5571809115428055,-1.432801541987221,-0.9544903321671111,-0.13173296267509654,1.267782866548965,0.806708965813594,0.20460009219036931,1.9196336269378662 +942302,1,-2.835527993784926,-1.6986343511814288,-1.7942859766997337,,,,,,,,,,0.9503768127628092,-0.3229291202479022,1.1944719937511734,2.0481386184692383 +942302,2,-3.6215152270729654,-1.9746779809452786,-2.061975310289543,,,,,,,,,,,,,2.0481386184692383 +942303,0,-0.9385338539320537,0.3800280509629712,-0.09441789030884316,-0.5265295793023037,-0.8615683368241874,0.17294631652479245,-0.9750588496475414,0.4572405017195292,-0.5571809115428055,-1.432801541987221,-0.9544903321671111,-0.13173296267509654,0.49778314283978853,-0.2910724881500066,0.8737234706124865,2.0481386184692383 +942303,1,0.048094632541727786,0.17220651042592966,0.6567159465227176,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,1.6961466553985005,1.7909538745880127 +942303,2,0.31418257585760784,0.5165447305088826,-0.5319322799029617,,,,,,,,,,,,,1.7909538745880127 +944602,0,-1.164432463825118,0.7252024287150527,0.6463181773704137,0.06338537359139342,0.7727681057484966,-0.1115128652856221,1.3969449327761334,2.265155270848227,-0.7217892120049145,-0.23730908679360116,-1.3476641243075844,-0.13173296267509654,-1.0422163045785646,0.806708965813594,-0.6875644123724536,2.410393476486206 +944602,1,-0.9131129095671567,0.7067324708851749,-1.079410415759852,,,,,,,,,,-1.1887333502953,0.7456311526478686,-0.8122266528381351,2.4378082752227783 +944602,2,-0.27617209458197817,0.5943954402418251,0.2780905008899343,,,,,,,,,,,,,2.4378082752227783 +948702,0,-0.37378732919939306,-1.000669460045355,-0.8351539579881,0.06338537359139342,-0.8615683368241874,0.457405498335207,-1.1575206790647472,1.3009340606462547,-1.0510058129291326,-0.835055314390411,-0.16814274788616518,1.9685096127017316,0.49778314283978853,0.806708965813594,-0.24148216009104212,1.7980340719223022 +948702,1,-0.6247506469344914,-0.9859330705691017,-0.8751602554913144,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,1.1944719937511734,2.0390443801879883 +948702,2,-0.27617209458197817,-0.6512159154852555,0.09808543849151298,,,,,,,,,,,,,2.0390443801879883 +952304,0,-1.164432463825118,-0.5404369563759129,-0.3413299128685955,0.8007790647085149,-1.2387229004948068,0.17294631652479245,1.0320212739417218,0.4572405017195292,1.2535103935403944,0.9581833684000187,1.7977262128162,0.28831555240026907,-0.27221658086938805,-0.2910724881500066,-0.9106055385131593,1.160570502281189 +952304,1,0.9131814204397238,-0.3623194500333156,-0.46665993495423924,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.5613893220144716,1.0059444904327393 +952304,2,0.41257502093087217,-0.573365205752313,0.638100625686777,,,,,,,,,,,,,1.0059444904327393 +953601,0,0.07800989058673549,-0.6554950822932735,-0.5882419354283478,-0.9689657939725767,-0.6101319610437744,-0.3959720470960366,-0.2452115319787184,-0.08513392901908017,-1.0510058129291326,-0.835055314390411,-0.5613165400266386,0.28831555240026907,0.49778314283978853,0.806708965813594,-0.4645232862317478,1.4776995182037354 +953601,1,-1.1053544179889336,-0.896845410492561,-1.590035816431196,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.8122266528381351,1.7157959938049316 +953601,2,0.5109674660041365,-1.1183201738829107,-0.8019398735005937,,,,,,,,,,,,,1.7157959938049316 +953602,0,0.19095919553326762,-0.8856113341279945,-0.8351539579881,-0.9689657939725767,-0.6101319610437744,-0.3959720470960366,-0.2452115319787184,-0.08513392901908017,-1.0510058129291326,-0.835055314390411,-0.5613165400266386,0.28831555240026907,0.49778314283978853,0.806708965813594,-0.4645232862317478,1.4776995182037354 +953602,1,-1.2975959264107106,-1.431371370951806,-1.4879107362969273,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.310551991190808,1.7157959938049316 +953602,2,-0.27617209458197817,-1.2740215933487957,-1.521960123094279,,,,,,,,,,,,,1.7157959938049316 +955702,0,-0.2608380242528609,0.03485367321088963,-0.2178739015887193,-0.5265295793023037,-0.8615683368241874,-0.6804312289064511,-0.06274970256151263,-0.38645305720719647,-1.0510058129291326,-0.23730908679360116,-0.5613165400266386,-1.3918785079011935,-1.0422163045785646,0.806708965813594,-1.133646664653865,1.1982612609863281 +955702,1,-0.528629892723603,-0.7186700903394792,-1.7942859766997337,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.5613893220144716,1.146475911140442 +955702,2,-0.1777796495087138,-0.6512159154852555,-0.17192215510611902,,,,,,,,,,,,,1.146475911140442 +956803,0,0.529807110372864,1.645667436053937,0.893230199930166,-0.674008317525728,0.6470499178582901,-0.9648904107168657,-0.7925970202303356,-0.8685636623081825,-0.22796431061858732,1.5559295959968287,1.4045524206757267,0.7083640674756347,-1.812216028287741,-0.2910724881500066,1.7658879751753094,1.88933265209198 +956803,1,1.4899059457050545,0.7958201309617158,1.2694664273283303,,,,,,,,,,-0.47569662927593015,0.7456311526478686,1.1944719937511734,1.763675332069397 +956803,2,1.0029296913704582,0.43869402077594005,0.7281031568859877,,,,,,,,,,,,,1.763675332069397 +957601,0,-0.48673663414592516,-0.08020445270647089,-0.7116979467082238,0.5058215882616662,0.7727681057484966,1.3107830437664505,0.3934048709815018,0.7585596299076455,1.4181186940025035,-0.23730908679360116,-0.16814274788616518,-0.9718299928258278,-0.27221658086938805,0.806708965813594,3.104134732019544,2.2524044513702393 +957601,1,-1.2975959264107106,-1.431371370951806,-1.4879107362969273,,,,,,,,,,0.9503768127628092,0.7456311526478686,0.4419600012801827,2.490797519683838 +957601,2,-1.6536663256076787,-1.2740215933487957,-0.981944935899015,,,,,,,,,,,,,2.490797519683838 +957806,0,-0.03493941435979663,0.8402605546324132,2.2512463240088034,-0.23157210285545515,0.7727681057484966,0.7418646801456215,0.028481212147090252,-0.024870103381456905,-0.5571809115428055,1.5559295959968287,-0.16814274788616518,-2.6520240531272905,0.49778314283978853,-0.2910724881500066,0.20460009219036931,2.2399094104766846 +957806,1,0.048094632541727786,0.9739954511147976,0.7588410266569864,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.8122266528381351,2.5819287300109863 +957806,2,0.8061448012239295,0.5943954402418251,0.45809556328835566,,,,,,,,,,,,,2.5819287300109863 +961901,0,1.4334015499451211,1.1854349323844948,1.8808782901691752,-0.37905084107887943,0.7727681057484966,1.026323861956036,-0.2452115319787184,0.9996149324581385,-0.3925726110806964,0.9581833684000187,1.7977262128162,0.28831555240026907,-0.27221658086938805,1.9044904197771946,3.104134732019544,1.7614192962646484 +961901,1,0.8170606662288354,0.7958201309617158,1.1673413471940615,,,,,,,,,,-1.9017700713146695,0.7456311526478686,1.1944719937511734,1.8038743734359741 +961901,2,0.31418257585760784,0.7500968597077102,0.368093032089145,,,,,,,,,,,,,1.8038743734359741 +962703,0,-0.8255845489855216,-1.000669460045355,-0.8351539579881,-0.674008317525728,0.7727681057484966,0.7418646801456215,0.6670976151073104,0.15592137353141286,0.2658605907677399,-1.432801541987221,-0.5613165400266386,1.548461097626366,1.267782866548965,0.806708965813594,3.104134732019544,1.02993643283844 +962703,1,-1.1053544179889336,-1.609546691104888,-1.6921608965654649,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.310551991190808,0.8526932597160339 +962703,2,-0.7681343199482997,-1.5075737225476233,-1.4319575918950684,,,,,,,,,,,,,0.8526932597160339 +963501,0,-0.7126352440389895,0.9553186805497738,0.893230199930166,0.2108641118148177,1.149922669419116,0.457405498335207,-0.1539806172701155,0.15592137353141286,0.7596854921540671,-0.835055314390411,0.6182048363947807,-1.8119270229765592,0.49778314283978853,0.806708965813594,1.9889291013160153,1.0819897651672363 +963501,1,0.7209399120179469,0.7067324708851749,0.963091186925524,,,,,,,,,,0.9503768127628092,0.7456311526478686,0.19112267045651915,1.9273991584777832 +963501,2,1.7900692519565728,0.9836489889065378,0.5480980944875663,,,,,,,,,,,,,1.9273991584777832 +968003,0,-1.164432463825118,-1.000669460045355,-0.8351539579881,-1.2639232704194252,-1.4901592762752198,-1.8182679561481092,-0.8838279349389385,-0.5069807084824429,-1.2156141133912417,-0.835055314390411,-1.740837916448057,-0.5517814777504622,-0.27221658086938805,-0.2910724881500066,0.20460009219036931,1.5245847702026367 +968003,1,-1.7781996974651528,-0.4514071101098565,0.14609054585137357,,,,,,,,,,0.2373400917434395,-1.3914893931436731,0.4419600012801827,1.1118844747543335 +968003,2,-0.4729569847285068,0.282992601310055,0.45809556328835566,,,,,,,,,,,,,1.1118844747543335 +971101,0,0.7557057202659283,0.14991179912825014,0.029038120971032973,-0.08409336463203088,-1.3644410883850133,-1.2493495925272802,-0.8838279349389385,-0.4467168828448197,-0.7217892120049145,1.5559295959968287,1.7977262128162,0.7083640674756347,1.267782866548965,-0.2910724881500066,0.20460009219036931,0.9732363224029541 +971101,1,1.3937851914941661,-0.00596880972715211,-1.4879107362969273,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,0.4419600012801827,1.4617455005645752 +971101,2,1.3964994716635155,0.6722461499747677,0.09808543849151298,,,,,,,,,,,,,1.4617455005645752 +975702,0,-1.164432463825118,-0.770553208210634,-0.5882419354283478,-1.4114020086428494,-1.1130047126046003,-1.2493495925272802,-0.06274970256151263,0.6380319786323989,-0.8863975124670236,0.36043714080320877,-0.5613165400266386,-0.9718299928258278,-0.27221658086938805,-1.388853942113607,-0.6875644123724536,0.06647571176290512 +975702,1,-0.04802612166916067,-0.4514071101098565,0.7588410266569864,,,,,,,,,,1.663413533782179,0.7456311526478686,-0.059714660367144415,1.9535350799560547 +975702,2,0.8061448012239295,-0.729066625218198,-0.08191962390690835,,,,,,,,,,,,,1.9535350799560547 +982001,0,-0.48673663414592516,-0.5404369563759129,-0.5882419354283478,0.358342850038242,1.2756408573093225,0.457405498335207,0.028481212147090252,-0.14539775465670343,0.9242937926161762,0.36043714080320877,1.4045524206757267,0.7083640674756347,0.49778314283978853,0.806708965813594,1.9889291013160153,1.5636433362960815 +982001,1,-0.4325091385127145,-1.2531960507987243,-0.05815961441716403,,,,,,,,,,-1.1887333502953,0.7456311526478686,-0.059714660367144415,1.5050772428512573 +982001,2,-1.0633116551680928,-1.040469464149968,-1.0719474670982256,,,,,,,,,,,,,1.5050772428512573 +982601,0,-0.03493941435979663,-0.770553208210634,-0.8351539579881,-0.674008317525728,-0.7358501489339809,-1.5338087743376947,-2.069829826150776,-1.4712019186844152,-0.7217892120049145,-0.835055314390411,-0.9544903321671111,1.548461097626366,-1.0422163045785646,-1.388853942113607,-0.9106055385131593,0.3336679935455322 +982601,1,-0.04802612166916067,-1.7877220112579697,-0.9772853356255832,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-0.8122266528381351,0.926652729511261 +982601,2,-0.37456453965524245,-1.9746779809452786,-1.3419550606958577,,,,,,,,,,,,,0.926652729511261 +983901,0,-0.37378732919939306,-0.42537883045855246,-0.09441789030884316,-1.2639232704194252,0.018458978407257843,0.457405498335207,-0.33644244668732126,0.6380319786323989,0.2658605907677399,-0.835055314390411,-0.16814274788616518,-0.9718299928258278,0.49778314283978853,-0.2910724881500066,0.20460009219036931,1.790067434310913 +983901,1,-0.528629892723603,-0.80775775041602,-1.079410415759852,,,,,,,,,,0.2373400917434395,1.8141914255436393,0.4419600012801827,2.0023252964019775 +983901,2,-1.3584889903878858,-1.1961708836158533,-0.8919424046998043,,,,,,,,,,,,,2.0023252964019775 +984001,0,-0.7126352440389895,-1.000669460045355,-0.8351539579881,-0.23157210285545515,-0.35869558526336154,-0.1115128652856221,-0.2452115319787184,-0.08513392901908017,-0.3925726110806964,-0.23730908679360116,1.0113786285352542,-2.6520240531272905,-0.27221658086938805,-1.388853942113607,-0.24148216009104212,0.9283568859100342 +984001,1,-1.585958189043376,-0.80775775041602,-0.9772853356255832,,,,,,,,,,-1.9017700713146695,-1.3914893931436731,-0.5613893220144716,0.7758997082710266 +984001,2,-2.2440209960472646,-1.1961708836158533,-0.35192721750454037,,,,,,,,,,,,,0.7758997082710266 +984401,0,1.0945536351055247,1.1854349323844948,-0.8351539579881,-0.23157210285545515,-0.8615683368241874,-0.1115128652856221,-0.9750588496475414,-2.616214605799257,-1.3802224138533508,-0.835055314390411,0.22503104425430823,-1.3918785079011935,-0.27221658086938805,-0.2910724881500066,-0.24148216009104212,1.3953558206558228 +984401,1,0.4325776493852816,-0.7186700903394792,-0.8751602554913144,,,,,,,,,,0.2373400917434395,1.8141914255436393,0.9436346629275099,0.884745717048645 +984401,2,-0.27617209458197817,-0.41766378628642786,-1.521960123094279,,,,,,,,,,,,,0.884745717048645 +986201,0,0.19095919553326762,-0.3103207045411919,0.6463181773704137,-0.8214870557491524,-1.867313839945839,-0.6804312289064511,-0.7013661055217327,-0.024870103381456905,-1.0510058129291326,-1.432801541987221,-0.9544903321671111,1.548461097626366,0.49778314283978853,-0.2910724881500066,-0.24148216009104212,1.5425888299942017 +986201,1,-0.04802612166916067,0.2612941705024705,-0.26240977468570165,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.059714660367144415,0.6470571160316467 +986201,2,-0.37456453965524245,-0.028410237621715174,-0.08191962390690835,,,,,,,,,,,,,0.6470571160316467 +986203,0,-1.27738176877165,-1.230785711880076,-1.0820659805478523,-0.8214870557491524,-1.867313839945839,-0.6804312289064511,-0.7013661055217327,-0.024870103381456905,-1.0510058129291326,-1.432801541987221,-0.9544903321671111,1.548461097626366,0.49778314283978853,-0.2910724881500066,-0.6875644123724536,1.8329122066497803 +986203,1,-0.14414687588004912,-1.609546691104888,-1.7942859766997337,,,,,,,,,,1.663413533782179,1.8141914255436393,-0.059714660367144415,2.0028235912323 +986203,2,-0.6697418748750354,0.1272911818441699,-0.6219348111021723,,,,,,,,,,,,,2.0028235912323 +987102,0,1.320452244998589,1.645667436053937,0.893230199930166,0.2108641118148177,0.6470499178582901,0.457405498335207,0.3021739562728989,0.4572405017195292,-0.22796431061858732,-1.432801541987221,-0.5613165400266386,-0.5517814777504622,-2.5822157519969178,-0.2910724881500066,-1.133646664653865,1.7550491094589233 +987102,1,-0.528629892723603,0.7958201309617158,0.45246578625417994,,,,,,,,,,-1.9017700713146695,-0.3229291202479022,-1.3139013144854623,1.0046143531799316 +987102,2,1.298107026590251,0.8279475694406527,1.2681183440812516,,,,,,,,,,,,,1.0046143531799316 +987701,0,0.529807110372864,-0.6554950822932735,-0.8351539579881,-1.4114020086428494,-1.1130047126046003,-0.6804312289064511,-1.0662897643561442,0.3969766760819059,-0.5571809115428055,0.9581833684000187,1.0113786285352542,0.28831555240026907,-0.27221658086938805,1.9044904197771946,-0.24148216009104212,2.0037927627563477 +987701,1,-0.6247506469344914,-0.4514071101098565,-0.26240977468570165,,,,,,,,,,-0.47569662927593015,1.8141914255436393,-0.059714660367144415,2.031648874282837 +987701,2,-0.5713494298017712,-0.729066625218198,-0.7119373423013831,,,,,,,,,,,,,2.031648874282837 +989701,0,-0.2608380242528609,1.5306093101365763,0.893230199930166,0.6533003264850905,1.0242044815289095,1.026323861956036,0.3934048709815018,0.035393722256166354,1.7473352949267216,0.36043714080320877,0.6182048363947807,0.7083640674756347,-0.27221658086938805,-0.2910724881500066,0.20460009219036931,2.995732307434082 +989701,1,0.33645689517439314,0.7958201309617158,2.086467068402481,,,,,,,,,,0.9503768127628092,1.8141914255436393,-0.059714660367144415,2.995732307434082 +989701,2,-0.07938720443544948,1.0614996986394805,1.448123406479673,,,,,,,,,,,,,2.995732307434082 +989702,0,0.529807110372864,1.7607255619712974,0.3994061548106614,0.6533003264850905,1.0242044815289095,1.026323861956036,0.3934048709815018,0.035393722256166354,1.7473352949267216,0.36043714080320877,0.6182048363947807,0.7083640674756347,1.267782866548965,-0.2910724881500066,0.8737234706124865,2.995732307434082 +989702,1,0.2403361409635047,2.6666609925690743,1.2694664273283303,,,,,,,,,,0.9503768127628092,-0.3229291202479022,1.1944719937511734,2.995732307434082 +989702,2,0.6093599110774008,1.9178575057018483,2.7081588432686226,,,,,,,,,,,,,2.995732307434082 +992502,0,-0.37378732919939306,0.3800280509629712,-0.2178739015887193,-1.2639232704194252,-0.7358501489339809,0.17294631652479245,0.3934048709815018,-2.0135763494230243,-1.7094390147775689,-0.835055314390411,0.22503104425430823,0.28831555240026907,-1.0422163045785646,-1.388853942113607,0.8737234706124865,1.5644813776016235 +992502,1,0.7209399120179469,-0.00596880972715211,1.4737165875968679,,,,,,,,,,-1.1887333502953,-0.3229291202479022,3.7028453019878094,1.7981853485107422 +992502,2,-0.6697418748750354,0.1272911818441699,0.008082907292302316,,,,,,,,,,,,,1.7981853485107422 +993002,0,0.6427564153193962,-0.6554950822932735,-0.7116979467082238,-0.23157210285545515,-0.8615683368241874,-1.2493495925272802,-1.24875159377335,-1.712257221234908,-1.0510058129291326,-0.835055314390411,-0.9544903321671111,-0.5517814777504622,0.49778314283978853,1.9044904197771946,-1.133646664653865,2.2646894454956055 +993002,1,-0.33638838430182605,-1.431371370951806,-0.9772853356255832,,,,,,,,,,0.9503768127628092,-0.3229291202479022,-0.8122266528381351,0.9342978000640869 +993002,2,0.11739768571107917,-0.8069173349511406,0.18808796969072364,,,,,,,,,,,,,0.9342978000640869 +993003,0,-1.6162296836112464,-0.42537883045855246,-0.4647859241484716,-0.23157210285545515,-0.8615683368241874,-1.2493495925272802,-1.24875159377335,-1.712257221234908,-1.0510058129291326,-0.835055314390411,-0.9544903321671111,-0.5517814777504622,0.49778314283978853,-0.2910724881500066,-0.9106055385131593,0.9342978000640869 +993003,1,-1.2975959264107106,-0.896845410492561,-1.079410415759852,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.059714660367144415,2.3035826683044434 +993003,2,-1.5552738805344144,-1.1961708836158533,-2.5119879662855964,,,,,,,,,,,,,2.3035826683044434 +993501,0,-0.7126352440389895,-0.770553208210634,-0.7116979467082238,1.9806089704959091,0.7727681057484966,1.026323861956036,0.7583285298159133,1.2406702350086316,0.9242937926161762,-0.835055314390411,0.22503104425430823,0.7083640674756347,-0.27221658086938805,0.806708965813594,3.104134732019544,1.7439056634902954 +993501,1,0.6248191578070585,0.6176448108086341,1.4737165875968679,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,1.1944719937511734,1.779181718826294 +993501,2,0.31418257585760784,1.450753247304193,0.908108219284409,,,,,,,,,,,,,1.779181718826294 +993502,0,0.8686550252124604,1.1854349323844948,0.6463181773704137,1.9806089704959091,0.7727681057484966,1.026323861956036,0.7583285298159133,1.2406702350086316,0.9242937926161762,-0.835055314390411,0.22503104425430823,0.7083640674756347,-1.0422163045785646,-0.2910724881500066,0.42764121833107505,1.779181718826294 +993502,1,0.2403361409635047,0.5285571507320932,0.7588410266569864,,,,,,,,,,0.2373400917434395,-1.3914893931436731,1.1944719937511734,1.986369013786316 +993502,2,-0.4729569847285068,0.8279475694406527,-0.08191962390690835,,,,,,,,,,,,,1.986369013786316 +993804,0,-0.2608380242528609,-0.770553208210634,-0.8351539579881,-0.674008317525728,0.2698953541876708,-0.3959720470960366,-0.1539806172701155,-0.08513392901908017,-1.0510058129291326,-0.23730908679360116,-0.16814274788616518,1.548461097626366,-1.812216028287741,-1.388853942113607,-1.3566877907945707,2.6926963329315186 +993804,1,-2.5471657311522606,-1.6986343511814288,-1.9985361369682713,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-0.5613893220144716,0.7701282501220703 +993804,2,-3.3263378918531723,-1.8968272712123362,-2.151977841488754,,,,,,,,,,,,,0.7701282501220703 +994002,0,-0.8255845489855216,-0.770553208210634,-0.2178739015887193,-0.9689657939725767,-2.118750215726252,-1.2493495925272802,-1.7961370820249674,-2.7367422570745035,-0.06335601015647824,-0.835055314390411,-0.16814274788616518,0.7083640674756347,-1.0422163045785646,-0.2910724881500066,-1.3566877907945707,1.4455662965774536 +994002,1,-1.585958189043376,-1.609546691104888,-1.4879107362969273,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-1.3139013144854623,2.2646894454956055 +994002,2,-1.8504512157542075,-1.8189765614793936,-1.4319575918950684,,,,,,,,,,,,,2.2646894454956055 +997403,0,1.5463508548916531,-0.42537883045855246,0.029038120971032973,-0.8214870557491524,-1.867313839945839,-2.102727137958524,-2.1610607408593787,-2.0135763494230243,-1.3802224138533508,-0.835055314390411,-0.5613165400266386,-0.5517814777504622,-1.0422163045785646,0.806708965813594,-0.9106055385131593,1.260453701019287 +997403,1,0.4325776493852816,0.4394694906555523,0.14609054585137357,,,,,,,,,,-0.47569662927593015,1.8141914255436393,-0.5613893220144716,-0.6931471824645996 +997403,2,0.31418257585760784,0.8279475694406527,0.09808543849151298,,,,,,,,,,,,,-0.6931471824645996 +998004,0,-0.37378732919939306,-0.8856113341279945,-0.4647859241484716,-0.9689657939725767,-0.6101319610437744,-1.5338087743376947,-0.8838279349389385,-1.7725210468725314,-1.5448307143154598,0.9581833684000187,-2.5271855007290034,0.7083640674756347,1.267782866548965,0.806708965813594,-0.9106055385131593,0.9404321312904358 +998004,1,-1.201475172199822,-1.7877220112579697,-1.7942859766997337,,,,,,,,,,0.9503768127628092,1.8141914255436393,-1.0630639836617988,1.351270318031311 +998004,2,-0.7681343199482997,-1.6632751420135086,-0.5319322799029617,,,,,,,,,,,,,1.351270318031311 +998005,0,-1.164432463825118,-0.42537883045855246,-0.3413299128685955,-0.9689657939725767,-0.6101319610437744,-1.5338087743376947,-0.8838279349389385,-1.7725210468725314,-1.5448307143154598,0.9581833684000187,-2.5271855007290034,0.7083640674756347,0.49778314283978853,1.9044904197771946,-0.9106055385131593,1.351270318031311 +998005,1,0.2403361409635047,0.17220651042592966,-0.6709100952227768,,,,,,,,,,0.9503768127628092,1.8141914255436393,-0.8122266528381351,2.161266326904297 +998005,2,0.019005240637814846,-0.729066625218198,-1.7019651854927003,,,,,,,,,,,,,2.161266326904297 +999204,0,-0.8255845489855216,-0.42537883045855246,-0.5882419354283478,-0.37905084107887943,-0.10725920948294862,-1.5338087743376947,-0.06274970256151263,-0.4467168828448197,-0.3925726110806964,-0.835055314390411,-0.9544903321671111,1.9685096127017316,0.49778314283978853,1.9044904197771946,-1.3566877907945707,2.2948670387268066 +999204,1,1.2976644372832777,0.08311885034938876,0.5545908663884488,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.059714660367144415,2.298217535018921 +999204,2,-0.27617209458197817,-0.4955144960193704,0.09808543849151298,,,,,,,,,,,,,2.298217535018921 +999205,0,-0.5996859390924573,-0.42537883045855246,-0.3413299128685955,-0.37905084107887943,-0.10725920948294862,-1.5338087743376947,-0.06274970256151263,-0.4467168828448197,-0.3925726110806964,-0.835055314390411,-0.9544903321671111,1.9685096127017316,-0.27221658086938805,-0.2910724881500066,-0.9106055385131593,2.298217535018921 +999205,1,-1.585958189043376,-0.6295824302629383,-1.2836605760283897,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-1.0630639836617988,-0.47177043557167053 +999205,2,-1.161704100241357,-1.1183201738829107,-0.17192215510611902,,,,,,,,,,,,,-0.47177043557167053 +999502,0,-1.5032803786647144,-1.000669460045355,-0.8351539579881,-0.5265295793023037,0.5213317299680837,0.457405498335207,-0.33644244668732126,-1.0493551392210523,0.10125229030563083,-0.23730908679360116,1.7977262128162,-0.9718299928258278,-0.27221658086938805,-0.2910724881500066,-0.9106055385131593,1.6682648658752441 +999502,1,0.14421538675261625,-1.431371370951806,-1.079410415759852,,,,,,,,,,0.2373400917434395,1.8141914255436393,0.6927973321038463,1.5305007696151733 +999502,2,-0.9649192100948284,-1.040469464149968,-0.8919424046998043,,,,,,,,,,,,,1.5305007696151733 +999702,0,-2.068026903397375,-2.0361925933015996,-1.9462580595069854,-1.1164445321960008,-1.3644410883850133,-2.102727137958524,-1.5224443378991586,-0.8082998366705593,-0.7217892120049145,1.5559295959968287,1.0113786285352542,1.548461097626366,-0.27221658086938805,-0.2910724881500066,-0.4645232862317478,1.314550518989563 +999702,1,-2.0665619600978182,-1.9658973314110515,0.7588410266569864,,,,,,,,,,0.9503768127628092,-1.3914893931436731,-0.5613893220144716,0.592125415802002 +999702,2,-0.6697418748750354,-2.286080819877049,-0.35192721750454037,,,,,,,,,,,,,0.592125415802002 +1001101,0,-0.2608380242528609,-0.08020445270647089,-0.3413299128685955,-0.674008317525728,1.2756408573093225,0.7418646801456215,-0.9750588496475414,-0.3261892315695732,-1.0510058129291326,0.36043714080320877,1.7977262128162,0.28831555240026907,-0.27221658086938805,-1.388853942113607,-0.6875644123724536,1.8291246891021729 +1001101,1,-0.24026763009093757,-0.6295824302629383,0.45246578625417994,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.5613893220144716,1.031777262687683 +1001101,2,-0.5713494298017712,-0.4955144960193704,0.368093032089145,,,,,,,,,,,,,1.031777262687683 +1002401,0,-1.0514831588785858,-0.8856113341279945,-0.8351539579881,-0.674008317525728,0.018458978407257843,0.17294631652479245,-0.8838279349389385,-2.314895477611141,-0.5571809115428055,-0.23730908679360116,-0.16814274788616518,-0.5517814777504622,-1.812216028287741,-0.2910724881500066,0.6506823444717807,1.042883038520813 +1002401,1,-0.24026763009093757,-0.896845410492561,-0.16028469455143282,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-0.8122266528381351,1.2104620933532715 +1002401,2,0.41257502093087217,-0.10626094735465771,-0.17192215510611902,,,,,,,,,,,,,1.2104620933532715 +1003201,0,0.4168578054263319,0.4950861768803317,0.893230199930166,-0.8214870557491524,-1.615877464165426,-1.2493495925272802,-0.8838279349389385,-0.8685636623081825,-1.2156141133912417,-0.835055314390411,0.22503104425430823,-0.5517814777504622,0.49778314283978853,0.806708965813594,-1.133646664653865,1.0401012897491455 +1003201,1,-1.6820789432542644,-0.9859330705691017,-1.1815354958941209,,,,,,,,,,0.2373400917434395,-0.3229291202479022,0.19112267045651915,1.406803846359253 +1003201,2,-1.6536663256076787,-1.1183201738829107,-1.8819702478911218,,,,,,,,,,,,,1.406803846359253 +1003202,0,-1.164432463825118,-0.770553208210634,-0.8351539579881,-0.8214870557491524,-1.615877464165426,-1.2493495925272802,-0.8838279349389385,-0.8685636623081825,-1.2156141133912417,-0.835055314390411,0.22503104425430823,-0.5517814777504622,-0.27221658086938805,0.806708965813594,0.20460009219036931,1.406803846359253 +1003202,1,-1.201475172199822,-0.4514071101098565,-0.16028469455143282,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.059714660367144415,1.1101969480514526 +1003202,2,-0.4729569847285068,-0.6512159154852555,0.09808543849151298,,,,,,,,,,,,,1.1101969480514526 +1003602,0,0.8686550252124604,-0.08020445270647089,-0.8351539579881,-0.8214870557491524,-0.9872865247143939,-2.3871863197689382,-1.0662897643561442,-2.073840175060648,-1.5448307143154598,-0.835055314390411,-0.16814274788616518,-0.5517814777504622,-1.812216028287741,-1.388853942113607,-1.3566877907945707,0.7600094079971313 +1003602,1,0.6248191578070585,0.7067324708851749,0.5545908663884488,,,,,,,,,,0.2373400917434395,-1.3914893931436731,-1.0630639836617988,1.047293782234192 +1003602,2,-0.27617209458197817,-0.8069173349511406,-0.441929748703751,,,,,,,,,,,,,1.047293782234192 +1007304,0,1.207502940052057,-0.08020445270647089,0.15249413225090913,-1.1164445321960008,-1.867313839945839,-1.8182679561481092,-1.4312134231905558,-1.8930486981477779,-1.3802224138533508,-2.030547769584031,-1.740837916448057,-0.13173296267509654,0.49778314283978853,-1.388853942113607,-1.3566877907945707,0.9004513025283813 +1007304,1,0.33645689517439314,-0.00596880972715211,-1.1815354958941209,,,,,,,,,,0.2373400917434395,-1.3914893931436731,-0.8122266528381351,1.0038161277770996 +1007304,2,0.31418257585760784,1.450753247304193,-0.17192215510611902,,,,,,,,,,,,,1.0038161277770996 +1007701,0,0.19095919553326762,0.4950861768803317,-0.7116979467082238,0.06338537359139342,-0.9872865247143939,-0.3959720470960366,0.940790359233119,0.3367128504442826,0.7596854921540671,0.36043714080320877,0.6182048363947807,1.9685096127017316,0.49778314283978853,-1.388853942113607,-1.133646664653865,1.5715423822402954 +1007701,1,0.8170606662288354,0.08311885034938876,0.35034070611991114,,,,,,,,,,-1.9017700713146695,-1.3914893931436731,-0.8122266528381351,0.9921917915344238 +1007701,2,0.2157901307843435,0.282992601310055,-0.08191962390690835,,,,,,,,,,,,,0.9921917915344238 +1007702,0,1.0945536351055247,-0.5404369563759129,-0.4647859241484716,0.06338537359139342,-0.9872865247143939,-0.3959720470960366,0.940790359233119,0.3367128504442826,0.7596854921540671,0.36043714080320877,0.6182048363947807,1.9685096127017316,-0.27221658086938805,-0.2910724881500066,-1.133646664653865,1.1411173343658447 +1007702,1,0.14421538675261625,-1.3422837108752652,-1.079410415759852,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-1.3139013144854623,0.8152689933776855 +1007702,2,0.31418257585760784,-1.2740215933487957,-0.8919424046998043,,,,,,,,,,,,,0.8152689933776855 +1007704,0,1.320452244998589,0.8402605546324132,0.2759501435307853,0.06338537359139342,-0.9872865247143939,-0.3959720470960366,0.940790359233119,0.3367128504442826,0.7596854921540671,0.36043714080320877,0.6182048363947807,1.9685096127017316,-1.0422163045785646,-1.388853942113607,0.20460009219036931,1.6086946725845337 +1007704,1,0.6248191578070585,0.17220651042592966,-0.8751602554913144,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,-0.8122266528381351,1.4957093000411987 +1007704,2,0.5109674660041365,-0.028410237621715174,0.008082907292302316,,,,,,,,,,,,,1.4957093000411987 +1012502,0,0.19095919553326762,0.2649699250456107,-0.4647859241484716,-1.1164445321960008,-1.3644410883850133,-0.6804312289064511,0.4846357856901046,-0.3261892315695732,-1.3802224138533508,-1.432801541987221,-0.9544903321671111,0.7083640674756347,1.267782866548965,-1.388853942113607,-0.6875644123724536,-0.6931471824645996 +1012502,1,0.8170606662288354,-0.00596880972715211,-0.46665993495423924,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,-0.310551991190808,1.0705281496047974 +1012502,2,-0.27617209458197817,-0.573365205752313,-0.7119373423013831,,,,,,,,,,,,,1.0705281496047974 +1016201,0,-0.9385338539320537,-0.770553208210634,-0.8351539579881,-0.674008317525728,-1.2387229004948068,-0.1115128652856221,-1.339982508481953,-1.1698827904962987,-0.7217892120049145,-0.23730908679360116,-0.16814274788616518,0.28831555240026907,0.49778314283978853,3.002271873740795,-0.24148216009104212,2.031648874282837 +1016201,1,-1.0092336637780452,-0.80775775041602,-1.3857856561626585,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.8122266528381351,0.8798075318336487 +1016201,2,-0.6697418748750354,-0.6512159154852555,-0.35192721750454037,,,,,,,,,,,,,0.8798075318336487 +1016603,0,0.07800989058673549,-0.1952625786238314,-0.3413299128685955,-0.08409336463203088,0.7727681057484966,1.3107830437664505,0.11971212685569313,0.3969766760819059,0.430468891229849,-0.835055314390411,-0.9544903321671111,0.7083640674756347,-1.0422163045785646,0.806708965813594,-0.24148216009104212,2.408377170562744 +1016603,1,0.33645689517439314,1.2412584313444202,1.5758416677311367,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.5613893220144716,2.2987194061279297 +1016603,2,1.1997145815169867,0.6722461499747677,0.908108219284409,,,,,,,,,,,,,2.2987194061279297 +1019104,0,-1.27738176877165,-0.770553208210634,-0.4647859241484716,-1.2639232704194252,-1.2387229004948068,-1.5338087743376947,-2.2522916555679817,-1.2904104417715454,-1.5448307143154598,-0.23730908679360116,0.22503104425430823,-0.13173296267509654,0.49778314283978853,0.806708965813594,-0.24148216009104212,0.2048673778772354 +1019104,1,-1.393716680621599,-0.7186700903394792,-1.079410415759852,,,,,,,,,,0.9503768127628092,0.7456311526478686,-1.3139013144854623,-0.4795703589916229 +1019104,2,-0.37456453965524245,-0.8069173349511406,-1.6119626542934897,,,,,,,,,,,,,-0.4795703589916229 +1019105,0,-0.8255845489855216,-0.5404369563759129,-0.7116979467082238,-1.2639232704194252,-1.2387229004948068,-1.5338087743376947,-2.2522916555679817,-1.2904104417715454,-1.5448307143154598,-0.23730908679360116,0.22503104425430823,-0.13173296267509654,0.49778314283978853,0.806708965813594,-0.24148216009104212,0.2048673778772354 +1019105,1,-1.0092336637780452,-0.3623194500333156,-0.568785015088508,,,,,,,,,,0.9503768127628092,0.7456311526478686,-1.3139013144854623,-0.4795703589916229 +1019105,2,-2.047236105900736,-0.33981307655348536,-1.1619499982974364,,,,,,,,,,,,,-0.4795703589916229 +1023802,0,-0.2608380242528609,0.8402605546324132,0.15249413225090913,-1.7063594850896981,-0.8615683368241874,-0.6804312289064511,-0.9750588496475414,-1.4712019186844152,-1.0510058129291326,0.9581833684000187,-0.16814274788616518,-1.8119270229765592,-0.27221658086938805,0.806708965813594,-0.6875644123724536,2.29714035987854 +1023802,1,-0.6247506469344914,-0.5404947701863974,-0.7730351753570456,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-0.5613893220144716,1.2414400577545166 +1023802,2,-2.047236105900736,-0.573365205752313,-0.441929748703751,,,,,,,,,,,,,1.2414400577545166 +1030302,0,-0.8255845489855216,-0.6554950822932735,-0.7116979467082238,-1.2639232704194252,-1.9930320278360456,-2.102727137958524,-1.8873679967335701,-1.712257221234908,-0.7217892120049145,-0.23730908679360116,-1.3476641243075844,-1.8119270229765592,-0.27221658086938805,0.806708965813594,-0.018441033950336395,1.3111305236816406 +1030302,1,0.4325776493852816,-1.0750207306456427,-1.1815354958941209,,,,,,,,,,-1.9017700713146695,-0.3229291202479022,0.19112267045651915,1.231344223022461 +1030302,2,-0.37456453965524245,-1.1183201738829107,-1.4319575918950684,,,,,,,,,,,,,1.231344223022461 +1031001,0,0.7557057202659283,1.4155511842192159,2.1277903127289273,-0.5265295793023037,-0.7358501489339809,0.7418646801456215,1.3969449327761334,0.8790872811828919,0.2658605907677399,-0.835055314390411,-0.16814274788616518,-0.13173296267509654,0.49778314283978853,1.9044904197771946,0.8737234706124865,1.7634333372116089 +1031001,1,1.2976644372832777,1.419433751497502,0.963091186925524,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.310551991190808,1.9084824323654175 +1031001,2,1.593284361810044,1.5286039570371357,2.1681436560733585,,,,,,,,,,,,,1.9084824323654175 +1031002,0,-0.14788871930632877,0.8402605546324132,2.2512463240088034,-0.5265295793023037,-0.7358501489339809,0.7418646801456215,1.3969449327761334,0.8790872811828919,0.2658605907677399,-0.835055314390411,-0.16814274788616518,-0.13173296267509654,0.49778314283978853,0.806708965813594,0.8737234706124865,1.9084824323654175 +1031002,1,0.2403361409635047,0.3503818305790114,1.5758416677311367,,,,,,,,,,0.2373400917434395,0.7456311526478686,1.1944719937511734,2.165961265563965 +1031002,2,0.41257502093087217,1.606454666770078,2.6181563120694116,,,,,,,,,,,,,2.165961265563965 +1032902,0,1.0945536351055247,1.3004930583018552,1.6339662676094229,-0.37905084107887943,-0.2329773973731551,-0.9648904107168657,-0.7925970202303356,-0.6275083597576895,0.10125229030563083,0.36043714080320877,1.4045524206757267,-0.9718299928258278,-1.0422163045785646,-0.2910724881500066,-0.24148216009104212,2.43746018409729 +1032902,1,0.048094632541727786,1.5085214115740428,1.5758416677311367,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.059714660367144415,2.7076427936553955 +1032902,2,0.7077523561506651,2.151409634900676,-0.17192215510611902,,,,,,,,,,,,,2.7076427936553955 +1032903,0,0.07800989058673549,1.0703768064671344,-0.4647859241484716,-0.37905084107887943,-0.2329773973731551,-0.9648904107168657,-0.7925970202303356,-0.6275083597576895,0.10125229030563083,0.36043714080320877,1.4045524206757267,-0.9718299928258278,0.49778314283978853,-1.388853942113607,-0.9106055385131593,2.6526176929473877 +1032903,1,0.14421538675261625,-0.3623194500333156,0.45246578625417994,,,,,,,,,,0.2373400917434395,-1.3914893931436731,-0.8122266528381351,2.6009228229522705 +1032903,2,0.5109674660041365,-0.9626187544170256,0.008082907292302316,,,,,,,,,,,,,2.6009228229522705 +1033202,0,-0.8255845489855216,-0.6554950822932735,-0.2178739015887193,-0.5265295793023037,-1.615877464165426,-1.5338087743376947,-2.6172153144023933,-1.8327848725101548,-0.7217892120049145,-1.432801541987221,-0.5613165400266386,0.28831555240026907,0.49778314283978853,-1.388853942113607,-1.3566877907945707,0.8045450448989868 +1033202,1,-2.4510449769413722,-0.6295824302629383,-0.9772853356255832,,,,,,,,,,0.9503768127628092,-1.3914893931436731,-0.310551991190808,-0.22519858181476593 +1033202,2,-1.2600965453146213,-0.9626187544170256,-0.8919424046998043,,,,,,,,,,,,,-0.22519858181476593 +1033204,0,-1.27738176877165,-1.000669460045355,-0.8351539579881,-0.5265295793023037,-1.615877464165426,-1.5338087743376947,-2.6172153144023933,-1.8327848725101548,-0.7217892120049145,-1.432801541987221,-0.5613165400266386,0.28831555240026907,0.49778314283978853,-1.388853942113607,-0.4645232862317478,1.1985125541687012 +1033204,1,-2.0665619600978182,-1.609546691104888,-1.8964110568340025,,,,,,,,,,0.9503768127628092,-1.3914893931436731,-0.8122266528381351,0.9084188342094421 +1033204,2,-1.6536663256076787,-1.3518723030817383,-0.17192215510611902,,,,,,,,,,,,,0.9084188342094421 +1034002,0,0.8686550252124604,0.03485367321088963,0.3994061548106614,-0.674008317525728,-1.2387229004948068,-1.5338087743376947,-0.33644244668732126,0.035393722256166354,-1.0510058129291326,-0.23730908679360116,-0.9544903321671111,-0.9718299928258278,-1.0422163045785646,-1.388853942113607,-0.4645232862317478,0.7036289572715759 +1034002,1,-0.7208714011453798,-0.2732317899567748,0.35034070611991114,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,1.1944719937511734,1.6092827320098877 +1034002,2,-0.27617209458197817,-1.040469464149968,0.2780905008899343,,,,,,,,,,,,,1.6092827320098877 +1037102,0,-1.27738176877165,-1.9211344673842392,-1.8228020482271092,-1.1164445321960008,-2.118750215726252,-1.2493495925272802,-0.518904276104527,-1.2904104417715454,-0.5571809115428055,-0.835055314390411,-0.5613165400266386,-1.3918785079011935,-0.27221658086938805,-0.2910724881500066,-0.9106055385131593,-0.32271260023117065 +1037102,1,-1.201475172199822,-2.1440726515641333,-2.10066121710254,,,,,,,,,,0.2373400917434395,0.7456311526478686,-1.0630639836617988,0.6576125025749207 +1037102,2,-0.7681343199482997,-2.208230110144106,-1.7019651854927003,,,,,,,,,,,,,0.6576125025749207 +1040101,0,0.9816043301589925,0.14991179912825014,-0.4647859241484716,0.5058215882616662,0.1441771662974643,0.7418646801456215,0.210943041564296,-0.26592540593194997,0.430468891229849,-0.835055314390411,-0.16814274788616518,1.548461097626366,0.49778314283978853,1.9044904197771946,-0.4645232862317478,1.2251687049865723 +1040101,1,-0.04802612166916067,-0.18414412988023388,-0.05815961441716403,,,,,,,,,,0.2373400917434395,1.8141914255436393,-0.5613893220144716,1.2743092775344849 +1040101,2,1.1997145815169867,-0.6512159154852555,-0.17192215510611902,,,,,,,,,,,,,1.2743092775344849 +1040102,0,0.9816043301589925,0.03485367321088963,2.3747023352886796,0.5058215882616662,0.1441771662974643,0.7418646801456215,0.210943041564296,-0.26592540593194997,0.430468891229849,-0.835055314390411,-0.16814274788616518,1.548461097626366,0.49778314283978853,1.9044904197771946,-0.4645232862317478,1.2251687049865723 +1040102,1,0.2403361409635047,0.9739954511147976,0.963091186925524,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.310551991190808,1.2743092775344849 +1040102,2,0.7077523561506651,0.9057982791735953,1.718131000077305,,,,,,,,,,,,,1.2743092775344849 +1042701,0,-0.9385338539320537,-1.000669460045355,-0.8351539579881,0.06338537359139342,-0.2329773973731551,0.17294631652479245,0.3934048709815018,-1.4712019186844152,-0.8863975124670236,-0.23730908679360116,0.6182048363947807,-0.13173296267509654,-1.812216028287741,-0.2910724881500066,0.8737234706124865,0.9925477504730225 +1042701,1,-1.0092336637780452,-0.80775775041602,-0.9772853356255832,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.8122266528381351,2.050936460494995 +1042701,2,-0.9649192100948284,-0.573365205752313,-0.08191962390690835,,,,,,,,,,,,,2.050936460494995 +1044301,0,-0.5996859390924573,-0.6554950822932735,-0.3413299128685955,-0.8214870557491524,-1.3644410883850133,0.457405498335207,-1.0662897643561442,-0.38645305720719647,-0.8863975124670236,-0.835055314390411,-0.16814274788616518,0.28831555240026907,-0.27221658086938805,-0.2910724881500066,-0.4645232862317478,0.29904457926750183 +1044301,1,-0.04802612166916067,-0.18414412988023388,0.35034070611991114,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.059714660367144415,1.1048868894577026 +1044301,2,-0.37456453965524245,-0.729066625218198,-0.26192468630532967,,,,,,,,,,,,,1.1048868894577026 +1044401,0,0.529807110372864,0.3800280509629712,0.029038120971032973,-0.08409336463203088,0.018458978407257843,-0.1115128652856221,-0.8838279349389385,-0.26592540593194997,-0.5571809115428055,-0.23730908679360116,-0.16814274788616518,1.1284125825510003,1.267782866548965,0.806708965813594,0.20460009219036931,1.1157387495040894 +1044401,1,0.52869840359617,0.8849077910382567,1.2694664273283303,,,,,,,,,,0.2373400917434395,-1.3914893931436731,1.1944719937511734,1.5715423822402954 +1044401,2,1.1013221364437225,0.282992601310055,0.638100625686777,,,,,,,,,,,,,1.5715423822402954 +1044802,0,-1.27738176877165,-0.770553208210634,-0.7116979467082238,0.9482578029319392,0.2698953541876708,-0.1115128652856221,-0.1539806172701155,-0.08513392901908017,1.2535103935403944,0.36043714080320877,-0.5613165400266386,1.1284125825510003,1.267782866548965,-1.388853942113607,0.20460009219036931,0.5672407746315002 +1044802,1,0.6248191578070585,-0.9859330705691017,-0.6709100952227768,,,,,,,,,,1.663413533782179,-0.3229291202479022,1.1944719937511734,0.824648916721344 +1044802,2,-0.07938720443544948,-0.4955144960193704,-0.17192215510611902,,,,,,,,,,,,,0.824648916721344 +1050002,0,-0.37378732919939306,0.4950861768803317,-0.2178739015887193,-0.5265295793023037,-0.48441377315356804,-0.6804312289064511,0.028481212147090252,-0.5672445341200663,-1.0510058129291326,-0.835055314390411,0.6182048363947807,1.1284125825510003,1.267782866548965,-0.2910724881500066,-0.4645232862317478,2.3137216567993164 +1050002,1,0.33645689517439314,0.17220651042592966,-0.05815961441716403,,,,,,,,,,1.663413533782179,-0.3229291202479022,-0.5613893220144716,1.55637788772583 +1050002,2,-0.9649192100948284,0.9057982791735953,-0.8919424046998043,,,,,,,,,,,,,1.55637788772583 +1052802,0,0.3039085004797998,0.8402605546324132,0.3994061548106614,-0.08409336463203088,-0.2329773973731551,1.026323861956036,0.5758667003987075,0.5777681529947757,-0.22796431061858732,1.5559295959968287,1.7977262128162,1.1284125825510003,0.49778314283978853,-1.388853942113607,0.20460009219036931,0.20158211886882782 +1052802,1,1.8743889625486083,0.5285571507320932,0.963091186925524,,,,,,,,,,0.2373400917434395,-1.3914893931436731,0.4419600012801827,-0.6931471824645996 +1052802,2,1.0029296913704582,1.1393504083724229,0.09808543849151298,,,,,,,,,,,,,-0.6931471824645996 +1053802,0,-1.164432463825118,-1.1157275859627156,-0.9586099692679761,-1.4114020086428494,-0.6101319610437744,-2.102727137958524,-1.0662897643561442,-0.024870103381456905,-1.5448307143154598,-0.835055314390411,-0.9544903321671111,-1.8119270229765592,-1.0422163045785646,-0.2910724881500066,-0.9106055385131593,0.8052595257759094 +1053802,1,-1.7781996974651528,-1.1641083907221836,-1.079410415759852,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.5613893220144716,0.7158130407333374 +1053802,2,-0.37456453965524245,0.04944047211122737,0.908108219284409,,,,,,,,,,,,,0.7158130407333374 +1054202,0,-0.5996859390924573,-0.3103207045411919,-0.7116979467082238,0.06338537359139342,-1.1130047126046003,-0.3959720470960366,-0.7013661055217327,-0.38645305720719647,-1.5448307143154598,-0.835055314390411,-1.740837916448057,-0.9718299928258278,-0.27221658086938805,0.806708965813594,-0.9106055385131593,1.4833734035491943 +1054202,1,0.33645689517439314,-0.4514071101098565,-0.36453485481997044,,,,,,,,,,-1.9017700713146695,-1.3914893931436731,-0.5613893220144716,1.6659400463104248 +1054202,2,0.41257502093087217,0.1272911818441699,-0.5319322799029617,,,,,,,,,,,,,1.6659400463104248 +1054203,0,-1.6162296836112464,-1.000669460045355,-0.8351539579881,0.06338537359139342,-1.1130047126046003,-0.3959720470960366,-0.7013661055217327,-0.38645305720719647,-1.5448307143154598,-0.835055314390411,-1.740837916448057,-0.9718299928258278,-1.0422163045785646,-1.388853942113607,-0.6875644123724536,1.6659400463104248 +1054203,1,-1.201475172199822,-1.3422837108752652,-1.3857856561626585,,,,,,,,,,-0.47569662927593015,2.88275169843941,-0.059714660367144415,1.9535350799560547 +1054203,2,-1.161704100241357,-1.9746779809452786,-1.7019651854927003,,,,,,,,,,,,,1.9535350799560547 +1056503,0,-0.14788871930632877,0.14991179912825014,0.2759501435307853,-0.5265295793023037,-0.48441377315356804,-0.1115128652856221,-0.2452115319787184,0.2161851991690361,-0.8863975124670236,-1.432801541987221,-0.5613165400266386,0.28831555240026907,-0.27221658086938805,-1.388853942113607,-0.6875644123724536,1.5277436971664429 +1056503,1,0.52869840359617,1.2412584313444202,0.5545908663884488,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,-0.059714660367144415,1.662566900253296 +1056503,2,1.1997145815169867,-0.18411165708760024,0.368093032089145,,,,,,,,,,,,,1.662566900253296 +1057201,0,-0.7126352440389895,-1.1157275859627156,-0.9586099692679761,-0.23157210285545515,-1.2387229004948068,-1.2493495925272802,-0.518904276104527,-0.6275083597576895,-0.3925726110806964,-0.835055314390411,-0.16814274788616518,-0.5517814777504622,0.49778314283978853,-1.388853942113607,-0.4645232862317478,1.6171895265579224 +1057201,1,-1.1053544179889336,-1.0750207306456427,-1.1815354958941209,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.8122266528381351,1.0238142013549805 +1057201,2,-0.07938720443544948,-1.3518723030817383,-0.8019398735005937,,,,,,,,,,,,,1.0238142013549805 +1057902,0,-1.3903310737181822,-1.000669460045355,-0.8351539579881,-1.2639232704194252,-0.48441377315356804,-0.9648904107168657,-1.1575206790647472,0.09565754789378961,-1.0510058129291326,1.5559295959968287,0.22503104425430823,-0.13173296267509654,0.49778314283978853,-1.388853942113607,-0.24148216009104212,0.7008250951766968 +1057902,1,-2.5471657311522606,-1.609546691104888,-1.6921608965654649,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.8122266528381351,0.9689387083053589 +1057902,2,-2.5391983312670576,-1.9746779809452786,-2.5119879662855964,,,,,,,,,,,,,0.9689387083053589 +1081103,0,-0.5996859390924573,-1.000669460045355,-0.8351539579881,1.390694017602212,1.149922669419116,0.7418646801456215,0.3021739562728989,0.8790872811828919,0.430468891229849,-0.835055314390411,-0.9544903321671111,1.1284125825510003,0.49778314283978853,-1.388853942113607,-0.24148216009104212,1.832129955291748 +1081103,1,-0.8169921553562683,-0.5404947701863974,0.6567159465227176,,,,,,,,,,0.2373400917434395,-1.3914893931436731,0.4419600012801827,2.170846700668335 +1081103,2,-0.4729569847285068,0.04944047211122737,0.5480980944875663,,,,,,,,,,,,,2.170846700668335 +1130902,0,1.7722494647847176,-0.42537883045855246,-0.4647859241484716,0.2108641118148177,0.8984862936387031,-0.1115128652856221,-1.0662897643561442,-1.3506742674091685,-0.22796431061858732,0.36043714080320877,1.7977262128162,1.548461097626366,-1.812216028287741,0.806708965813594,0.8737234706124865,2.45827054977417 +1130902,1,0.9131814204397238,-0.5404947701863974,0.14609054585137357,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,0.4419600012801827,2.5092456340789795 +1130902,2,1.1997145815169867,-0.028410237621715174,0.45809556328835566,,,,,,,,,,,,,2.5092456340789795 +1137102,0,0.4168578054263319,-0.1952625786238314,0.5228621660905376,1.2432152793787876,1.2756408573093225,1.3107830437664505,1.4881758474847362,2.024099968297734,0.9242937926161762,1.5559295959968287,0.22503104425430823,1.1284125825510003,0.49778314283978853,0.806708965813594,1.9889291013160153,2.5097808837890625 +1137102,1,1.2015436830723893,-0.09505646980369299,-0.9772853356255832,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.310551991190808,2.7039597034454346 +1137102,2,1.593284361810044,-0.4955144960193704,0.5480980944875663,,,,,,,,,,,,,2.7039597034454346 +1176403,0,-1.0514831588785858,0.14991179912825014,-0.4647859241484716,-0.8214870557491524,-2.2444684036164584,-2.3871863197689382,-1.7961370820249674,-1.5314657443220383,-0.7217892120049145,-0.835055314390411,-0.5613165400266386,-0.5517814777504622,1.267782866548965,-1.388853942113607,-0.018441033950336395,0.09308870881795883 +1176403,1,-0.24026763009093757,-0.00596880972715211,-0.8751602554913144,,,,,,,,,,0.9503768127628092,-1.3914893931436731,-0.310551991190808,-0.6931471824645996 +1176403,2,-0.9649192100948284,-0.9626187544170256,-1.3419550606958577,,,,,,,,,,,,,-0.6931471824645996 +1176901,0,0.07800989058673549,0.03485367321088963,0.3994061548106614,0.06338537359139342,0.8984862936387031,1.026323861956036,0.028481212147090252,0.035393722256166354,-0.06335601015647824,1.5559295959968287,0.6182048363947807,-1.3918785079011935,1.267782866548965,0.806708965813594,3.104134732019544,2.477936029434204 +1176901,1,0.048094632541727786,0.7067324708851749,-0.05815961441716403,,,,,,,,,,-0.47569662927593015,1.8141914255436393,1.1944719937511734,2.4267048835754395 +1176901,2,0.6093599110774008,0.20514189157711243,0.09808543849151298,,,,,,,,,,,,,2.4267048835754395 +1177304,0,-1.0514831588785858,0.9553186805497738,0.15249413225090913,-0.9689657939725767,-0.8615683368241874,-2.3871863197689382,-1.7049061673163644,-2.194367826335894,-0.5571809115428055,-2.030547769584031,0.6182048363947807,1.1284125825510003,-0.27221658086938805,-1.388853942113607,-0.9106055385131593,0.3956103026866913 +1177304,1,-0.33638838430182605,-0.09505646980369299,0.5545908663884488,,,,,,,,,,0.2373400917434395,-1.3914893931436731,0.4419600012801827,0.4424646496772766 +1177304,2,-0.7681343199482997,0.1272911818441699,-0.26192468630532967,,,,,,,,,,,,,0.4424646496772766 +1177401,0,1.5463508548916531,0.8402605546324132,-0.7116979467082238,-0.08409336463203088,1.0242044815289095,0.17294631652479245,1.4881758474847362,-1.651993395597285,-0.06335601015647824,-0.23730908679360116,-0.5613165400266386,-1.8119270229765592,0.49778314283978853,0.806708965813594,-0.9106055385131593,2.2228243350982666 +1177401,1,1.0093021746506123,0.8849077910382567,0.04396546571710477,,,,,,,,,,-1.9017700713146695,-0.3229291202479022,-0.5613893220144716,2.326460599899292 +1177401,2,0.6093599110774008,0.20514189157711243,-1.8819702478911218,,,,,,,,,,,,,2.326460599899292 +1177701,0,0.19095919553326762,0.14991179912825014,1.2635982337697944,1.390694017602212,1.401359045199529,1.026323861956036,0.7583285298159133,0.9996149324581385,1.5827269944646125,1.5559295959968287,1.0113786285352542,0.7083640674756347,0.49778314283978853,1.9044904197771946,1.7658879751753094,2.4911186695098877 +1177701,1,0.9131814204397238,0.4394694906555523,0.5545908663884488,,,,,,,,,,0.2373400917434395,1.8141914255436393,-0.5613893220144716,2.721698760986328 +1177701,2,0.31418257585760784,1.1393504083724229,0.7281031568859877,,,,,,,,,,,,,2.721698760986328 +1177903,0,0.4168578054263319,0.2649699250456107,0.3994061548106614,0.8007790647085149,1.149922669419116,1.3107830437664505,0.7583285298159133,0.7585596299076455,1.4181186940025035,-0.835055314390411,-0.16814274788616518,0.7083640674756347,0.49778314283978853,0.806708965813594,-0.24148216009104212,2.995732307434082 +1177903,1,0.33645689517439314,0.08311885034938876,0.04396546571710477,,,,,,,,,,1.663413533782179,-0.3229291202479022,-0.5613893220144716,2.9876959323883057 +1177903,2,-0.37456453965524245,0.43869402077594005,0.45809556328835566,,,,,,,,,,,,,2.9876959323883057 +1178702,0,1.0945536351055247,0.6101443027976923,-0.09441789030884316,-0.5265295793023037,-0.35869558526336154,-0.9648904107168657,-0.7013661055217327,0.8188234555452687,-0.7217892120049145,0.9581833684000187,0.22503104425430823,-0.13173296267509654,-0.27221658086938805,-0.2910724881500066,-0.6875644123724536,1.9216480255126953 +1178702,1,0.14421538675261625,0.08311885034938876,0.6567159465227176,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-1.0630639836617988,2.169384479522705 +1178702,2,0.5109674660041365,-0.4955144960193704,1.448123406479673,,,,,,,,,,,,,2.169384479522705 +1178703,0,-0.9385338539320537,0.6101443027976923,-0.4647859241484716,-0.5265295793023037,-0.35869558526336154,-0.9648904107168657,-0.7013661055217327,0.8188234555452687,-0.7217892120049145,0.9581833684000187,0.22503104425430823,-0.13173296267509654,0.49778314283978853,-0.2910724881500066,-0.6875644123724536,2.149778127670288 +1178703,1,-0.24026763009093757,0.3503818305790114,-0.46665993495423924,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.8122266528381351,2.173884868621826 +1178703,2,-0.27617209458197817,0.36084331104299755,0.368093032089145,,,,,,,,,,,,,2.173884868621826 +1179801,0,-0.14788871930632877,-1.000669460045355,-0.8351539579881,-1.4114020086428494,0.8984862936387031,0.7418646801456215,-0.2452115319787184,-0.5069807084824429,-0.22796431061858732,1.5559295959968287,1.0113786285352542,-0.13173296267509654,-1.0422163045785646,-0.2910724881500066,-0.24148216009104212,0.03478278964757919 +1179801,1,-0.4325091385127145,0.08311885034938876,0.04396546571710477,,,,,,,,,,-1.9017700713146695,0.7456311526478686,-0.8122266528381351,0.38979893922805786 +1179801,2,-0.7681343199482997,-0.10626094735465771,0.5480980944875663,,,,,,,,,,,,,0.38979893922805786 +1180702,0,0.3039085004797998,0.14991179912825014,-0.09441789030884316,-0.674008317525728,0.1441771662974643,-1.5338087743376947,-0.33644244668732126,0.035393722256166354,0.430468891229849,-0.835055314390411,-0.5613165400266386,0.7083640674756347,1.267782866548965,0.806708965813594,0.20460009219036931,2.818532705307007 +1180702,1,-0.4325091385127145,0.3503818305790114,0.14609054585137357,,,,,,,,,,0.2373400917434395,0.7456311526478686,0.4419600012801827,2.8492138385772705 +1180702,2,-0.9649192100948284,-0.2619623668205428,0.18808796969072364,,,,,,,,,,,,,2.8492138385772705 +1181201,0,-1.5032803786647144,-1.460901963714797,-1.3289780031076046,-1.1164445321960008,-1.7415956520556326,-1.5338087743376947,-1.9785989114421731,-1.230146616133922,-1.3802224138533508,-2.628293997180841,-3.31353308500995,-0.5517814777504622,-1.0422163045785646,-1.388853942113607,-0.4645232862317478,-0.2243199348449707 +1181201,1,-1.4898374348324874,-2.1440726515641333,-2.10066121710254,,,,,,,,,,-1.1887333502953,-1.3914893931436731,0.6927973321038463,0.27897539734840393 +1181201,2,-2.342413441120529,-2.3639315296099914,-2.2419803726879644,,,,,,,,,,,,,0.27897539734840393 +1181202,0,-1.3903310737181822,-1.000669460045355,-0.8351539579881,-1.1164445321960008,-1.7415956520556326,-1.5338087743376947,-1.9785989114421731,-1.230146616133922,-1.3802224138533508,-2.628293997180841,-3.31353308500995,-0.5517814777504622,-1.812216028287741,-1.388853942113607,-0.4645232862317478,0.37406787276268005 +1181202,1,-1.585958189043376,-0.9859330705691017,-0.568785015088508,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-0.5613893220144716,1.0263673067092896 +1181202,2,0.11739768571107917,-0.573365205752313,-0.6219348111021723,,,,,,,,,,,,,1.0263673067092896 +1181902,0,0.07800989058673549,0.3800280509629712,-0.4647859241484716,-0.5265295793023037,0.39561354207787724,0.7418646801456215,0.5758667003987075,0.5777681529947757,-0.06335601015647824,0.9581833684000187,1.4045524206757267,0.7083640674756347,-0.27221658086938805,-0.2910724881500066,-0.24148216009104212,0.8798075318336487 +1181902,1,-0.528629892723603,-1.1641083907221836,-0.16028469455143282,,,,,,,,,,0.2373400917434395,-0.3229291202479022,1.1944719937511734,1.0807244777679443 +1181902,2,-0.4729569847285068,-0.8847680446840831,-0.441929748703751,,,,,,,,,,,,,1.0807244777679443 +1183502,0,-0.48673663414592516,1.5306093101365763,2.004334301449051,-0.5265295793023037,1.2756408573093225,0.7418646801456215,0.7583285298159133,0.5175043273571525,-0.22796431061858732,0.36043714080320877,-0.9544903321671111,1.548461097626366,1.267782866548965,1.9044904197771946,0.20460009219036931,2.3039286136627197 +1183502,1,0.33645689517439314,3.2902746131048604,1.1673413471940615,,,,,,,,,,0.9503768127628092,1.8141914255436393,0.4419600012801827,2.4724788665771484 +1183502,2,-0.4729569847285068,1.8400067959689057,2.1681436560733585,,,,,,,,,,,,,2.4724788665771484 +1184701,0,0.19095919553326762,0.8402605546324132,0.5228621660905376,1.390694017602212,0.018458978407257843,0.17294631652479245,-0.06274970256151263,-0.26592540593194997,0.7596854921540671,-0.835055314390411,-0.5613165400266386,-0.9718299928258278,-0.27221658086938805,-0.2910724881500066,0.8737234706124865,2.407790422439575 +1184701,1,0.52869840359617,0.08311885034938876,0.5545908663884488,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.8122266528381351,2.31561279296875 +1184701,2,1.1997145815169867,-0.573365205752313,0.09808543849151298,,,,,,,,,,,,,2.31561279296875 +1185501,0,-1.0514831588785858,-0.08020445270647089,-0.7116979467082238,-0.8214870557491524,-0.7358501489339809,0.457405498335207,-0.8838279349389385,-0.5069807084824429,-1.3802224138533508,-0.23730908679360116,0.22503104425430823,0.7083640674756347,-0.27221658086938805,0.806708965813594,0.6506823444717807,1.747433066368103 +1185501,1,-1.201475172199822,1.2412584313444202,0.14609054585137357,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,-0.8122266528381351,1.8959037065505981 +1185501,2,-0.4729569847285068,1.1393504083724229,0.9981107504836196,,,,,,,,,,,,,1.8959037065505981 +1185502,0,-0.7126352440389895,0.4950861768803317,0.2759501435307853,-0.8214870557491524,-0.7358501489339809,0.457405498335207,-0.8838279349389385,-0.5069807084824429,-1.3802224138533508,-0.23730908679360116,0.22503104425430823,0.7083640674756347,1.267782866548965,1.9044904197771946,-0.6875644123724536,1.8304996490478516 +1185502,1,-0.14414687588004912,0.5285571507320932,0.8609661067912552,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.059714660367144415,2.332099676132202 +1185502,2,-0.8665267650215641,0.36084331104299755,0.008082907292302316,,,,,,,,,,,,,2.332099676132202 +1185802,0,1.0945536351055247,0.9553186805497738,2.1277903127289273,-0.37905084107887943,0.7727681057484966,0.457405498335207,1.1232521886503248,2.1446276195729803,-0.7217892120049145,0.9581833684000187,-1.3476641243075844,0.7083640674756347,-0.27221658086938805,1.9044904197771946,0.20460009219036931,2.029665470123291 +1185802,1,1.2976644372832777,1.5085214115740428,1.371591507462599,,,,,,,,,,0.9503768127628092,-0.3229291202479022,3.7028453019878094,1.730391502380371 +1185802,2,0.31418257585760784,1.6843053765030207,2.3481487184717795,,,,,,,,,,,,,1.730391502380371 +1186802,0,1.5463508548916531,0.03485367321088963,-0.3413299128685955,0.2108641118148177,-0.2329773973731551,0.457405498335207,1.1232521886503248,0.5777681529947757,0.9242937926161762,-2.030547769584031,-1.3476641243075844,0.28831555240026907,0.49778314283978853,0.806708965813594,1.7658879751753094,2.9821481704711914 +1186802,1,0.52869840359617,-0.4514071101098565,-1.4879107362969273,,,,,,,,,,0.2373400917434395,-0.3229291202479022,0.4419600012801827,2.995732307434082 +1186802,2,0.7077523561506651,-1.1961708836158533,-1.6119626542934897,,,,,,,,,,,,,2.995732307434082 +1187901,0,0.4168578054263319,0.6101443027976923,0.5228621660905376,0.06338537359139342,1.2756408573093225,0.7418646801456215,-0.06274970256151263,-0.024870103381456905,-0.3925726110806964,0.9581833684000187,-0.16814274788616518,0.28831555240026907,0.49778314283978853,-0.2910724881500066,0.20460009219036931,2.125063419342041 +1187901,1,0.14421538675261625,0.4394694906555523,-0.05815961441716403,,,,,,,,,,-1.1887333502953,0.7456311526478686,0.9436346629275099,2.451024293899536 +1187901,2,-0.27617209458197817,0.5943954402418251,0.368093032089145,,,,,,,,,,,,,2.451024293899536 +1188602,0,-1.27738176877165,-1.000669460045355,-0.8351539579881,0.6533003264850905,1.401359045199529,1.3107830437664505,0.5758667003987075,0.5777681529947757,0.9242937926161762,0.9581833684000187,-0.16814274788616518,-0.9718299928258278,-0.27221658086938805,-1.388853942113607,0.20460009219036931,1.8032644987106323 +1188602,1,-1.201475172199822,-1.2531960507987243,-1.079410415759852,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.5613893220144716,1.7444919347763062 +1188602,2,-0.1777796495087138,-1.2740215933487957,-0.8019398735005937,,,,,,,,,,,,,1.7444919347763062 +1189402,0,0.3039085004797998,0.4950861768803317,0.15249413225090913,1.2432152793787876,0.5213317299680837,0.457405498335207,0.3021739562728989,0.2764490248066594,0.2658605907677399,-0.23730908679360116,-1.3476641243075844,-0.13173296267509654,0.49778314283978853,0.806708965813594,-0.6875644123724536,1.3371928930282593 +1189402,1,0.9131814204397238,0.4394694906555523,0.14609054585137357,,,,,,,,,,1.663413533782179,-0.3229291202479022,0.4419600012801827,1.3306896686553955 +1189402,2,1.3964994716635155,0.20514189157711243,0.368093032089145,,,,,,,,,,,,,1.3306896686553955 +1189801,0,0.8686550252124604,1.9908418138060184,1.8808782901691752,1.5381727558256364,1.149922669419116,0.7418646801456215,1.4881758474847362,0.7585596299076455,1.4181186940025035,0.9581833684000187,1.0113786285352542,1.548461097626366,-0.27221658086938805,1.9044904197771946,0.8737234706124865,2.098484754562378 +1189801,1,0.7209399120179469,1.5976090716505837,0.45246578625417994,,,,,,,,,,-0.47569662927593015,1.8141914255436393,0.4419600012801827,2.517941474914551 +1189801,2,0.6093599110774008,1.450753247304193,0.8181056880851983,,,,,,,,,,,,,2.517941474914551 +1191603,0,-0.37378732919939306,0.2649699250456107,-0.7116979467082238,-0.9689657939725767,0.2698953541876708,0.17294631652479245,0.3934048709815018,0.15592137353141286,-0.22796431061858732,-0.835055314390411,-0.5613165400266386,-2.2319755380519246,-1.812216028287741,0.806708965813594,-0.24148216009104212,1.7689392566680908 +1191603,1,-1.201475172199822,-0.00596880972715211,0.24821562598564237,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.059714660367144415,1.9468461275100708 +1191603,2,-0.7681343199482997,0.282992601310055,-0.08191962390690835,,,,,,,,,,,,,1.9468461275100708 +1191803,0,1.8851987697312496,0.4950861768803317,1.1401422224899183,1.833130232272485,1.149922669419116,0.7418646801456215,1.3969449327761334,1.120142583733385,1.7473352949267216,0.36043714080320877,1.4045524206757267,1.1284125825510003,1.267782866548965,0.806708965813594,-0.6875644123724536,2.8986551761627197 +1191803,1,2.258871979392162,0.7958201309617158,0.963091186925524,,,,,,,,,,0.9503768127628092,0.7456311526478686,-1.3139013144854623,2.9557442665100098 +1191803,2,2.3804239223961585,1.6843053765030207,1.5381259376788836,,,,,,,,,,,,,2.9557442665100098 +1191902,0,1.207502940052057,1.5306093101365763,1.757422278889299,1.5381727558256364,1.2756408573093225,1.026323861956036,0.210943041564296,0.4572405017195292,1.4181186940025035,-0.835055314390411,-0.16814274788616518,-1.3918785079011935,-0.27221658086938805,-0.2910724881500066,0.20460009219036931,2.4328701496124268 +1191902,1,1.3937851914941661,0.5285571507320932,1.0652162670597927,,,,,,,,,,0.9503768127628092,0.7456311526478686,3.7028453019878094,2.3102173805236816 +1191902,2,1.298107026590251,1.1393504083724229,0.7281031568859877,,,,,,,,,,,,,2.3102173805236816 +1192301,0,0.07800989058673549,-1.000669460045355,-0.8351539579881,-0.8214870557491524,0.6470499178582901,0.457405498335207,-0.1539806172701155,0.2161851991690361,0.2658605907677399,-0.23730908679360116,-0.9544903321671111,0.7083640674756347,0.49778314283978853,-1.388853942113607,-0.24148216009104212,1.0154227018356323 +1192301,1,-0.8169921553562683,-0.2732317899567748,0.45246578625417994,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.059714660367144415,1.1081873178482056 +1192301,2,0.019005240637814846,-0.6512159154852555,-0.35192721750454037,,,,,,,,,,,,,1.1081873178482056 +1192302,0,-0.8255845489855216,-1.000669460045355,-0.8351539579881,-0.8214870557491524,0.6470499178582901,0.457405498335207,-0.1539806172701155,0.2161851991690361,0.2658605907677399,-0.23730908679360116,-0.9544903321671111,0.7083640674756347,0.49778314283978853,-0.2910724881500066,-0.4645232862317478,1.1081873178482056 +1192302,1,-0.33638838430182605,-0.00596880972715211,-0.26240977468570165,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.5613893220144716,1.0109165906906128 +1192302,2,-0.8665267650215641,0.9057982791735953,0.18808796969072364,,,,,,,,,,,,,1.0109165906906128 +1192303,0,-0.9385338539320537,-1.1157275859627156,-0.9586099692679761,-0.8214870557491524,0.6470499178582901,0.457405498335207,-0.1539806172701155,0.2161851991690361,0.2658605907677399,-0.23730908679360116,-0.9544903321671111,0.7083640674756347,-0.27221658086938805,-0.2910724881500066,-0.9106055385131593,1.9303545951843262 +1192303,1,-1.4898374348324874,-0.2732317899567748,-0.568785015088508,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-1.0630639836617988,1.2966893911361694 +1192303,2,-2.2440209960472646,-0.573365205752313,-0.26192468630532967,,,,,,,,,,,,,1.2966893911361694 +1193501,0,0.529807110372864,-0.08020445270647089,-0.09441789030884316,-0.5265295793023037,-0.9872865247143939,-0.9648904107168657,-1.4312134231905558,-1.4109380930467919,-1.8740473152396782,0.36043714080320877,-0.16814274788616518,-0.5517814777504622,0.49778314283978853,-0.2910724881500066,-1.3566877907945707,1.8493273258209229 +1193501,1,0.4325776493852816,-0.00596880972715211,0.5545908663884488,,,,,,,,,,1.663413533782179,0.7456311526478686,1.1944719937511734,1.9846503734588623 +1193501,2,-0.37456453965524245,-0.4955144960193704,0.008082907292302316,,,,,,,,,,,,,1.9846503734588623 +1193502,0,0.07800989058673549,0.14991179912825014,-0.09441789030884316,-0.5265295793023037,-0.9872865247143939,-0.9648904107168657,-1.4312134231905558,-1.4109380930467919,-1.8740473152396782,0.36043714080320877,-0.16814274788616518,-0.5517814777504622,1.267782866548965,0.806708965813594,0.8737234706124865,1.9846503734588623 +1193502,1,0.4325776493852816,0.17220651042592966,-0.6709100952227768,,,,,,,,,,1.663413533782179,-0.3229291202479022,-0.059714660367144415,2.5552432537078857 +1193502,2,0.31418257585760784,-0.33981307655348536,0.908108219284409,,,,,,,,,,,,,2.5552432537078857 +1195001,0,-0.5996859390924573,-0.42537883045855246,-0.4647859241484716,-1.5588807468662738,-0.2329773973731551,-1.2493495925272802,-1.339982508481953,-0.14539775465670343,-1.2156141133912417,-0.835055314390411,-0.16814274788616518,-0.13173296267509654,-1.812216028287741,-1.388853942113607,-0.6875644123724536,0.04469000920653343 +1195001,1,-0.528629892723603,-0.4514071101098565,-0.26240977468570165,,,,,,,,,,0.2373400917434395,-1.3914893931436731,1.1944719937511734,0.054613590240478516 +1195001,2,-0.1777796495087138,-0.10626094735465771,0.2780905008899343,,,,,,,,,,,,,0.054613590240478516 +1195002,0,-0.14788871930632877,-0.5404369563759129,-0.2178739015887193,-1.5588807468662738,-0.2329773973731551,-1.2493495925272802,-1.339982508481953,-0.14539775465670343,-1.2156141133912417,-0.835055314390411,-0.16814274788616518,-0.13173296267509654,-1.0422163045785646,-1.388853942113607,-0.4645232862317478,0.054613590240478516 +1195002,1,-0.528629892723603,-1.2531960507987243,-1.590035816431196,,,,,,,,,,-1.9017700713146695,-1.3914893931436731,-0.5613893220144716,0.2264738529920578 +1195002,2,0.019005240637814846,-1.585424432280566,-1.6119626542934897,,,,,,,,,,,,,0.2264738529920578 +1195101,0,-1.164432463825118,-1.000669460045355,-0.8351539579881,-0.674008317525728,-1.2387229004948068,-2.3871863197689382,-0.33644244668732126,-0.6877721853953127,-1.5448307143154598,-0.835055314390411,-0.16814274788616518,-0.5517814777504622,-1.0422163045785646,-0.2910724881500066,-0.9106055385131593,0.7064250707626343 +1195101,1,-0.8169921553562683,-1.2531960507987243,-1.079410415759852,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-0.059714660367144415,0.8498374223709106 +1195101,2,-0.8665267650215641,-0.573365205752313,-1.251952529496647,,,,,,,,,,,,,0.8498374223709106 +1195102,0,-0.5996859390924573,0.14991179912825014,0.3994061548106614,-0.674008317525728,-1.2387229004948068,-2.3871863197689382,-0.33644244668732126,-0.6877721853953127,-1.5448307143154598,-0.835055314390411,-0.16814274788616518,-0.5517814777504622,0.49778314283978853,-1.388853942113607,-0.24148216009104212,0.8498374223709106 +1195102,1,0.7209399120179469,-0.6295824302629383,0.14609054585137357,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-1.0630639836617988,0.14589345455169678 +1195102,2,0.31418257585760784,-0.573365205752313,0.18808796969072364,,,,,,,,,,,,,0.14589345455169678 +1195103,0,-0.8255845489855216,-0.770553208210634,-0.7116979467082238,-0.674008317525728,-1.2387229004948068,-2.3871863197689382,-0.33644244668732126,-0.6877721853953127,-1.5448307143154598,-0.835055314390411,-0.16814274788616518,-0.5517814777504622,-1.0422163045785646,-0.2910724881500066,-0.6875644123724536,0.14589345455169678 +1195103,1,-1.2975959264107106,-1.7877220112579697,-0.9772853356255832,,,,,,,,,,-0.47569662927593015,0.7456311526478686,-0.059714660367144415,0.2596920132637024 +1195103,2,-1.5552738805344144,-1.585424432280566,-0.6219348111021723,,,,,,,,,,,,,0.2596920132637024 +1200001,0,-0.14788871930632877,0.3800280509629712,0.3994061548106614,1.5381727558256364,0.5213317299680837,0.457405498335207,1.4881758474847362,1.4817255375591245,1.5827269944646125,1.5559295959968287,1.4045524206757267,1.548461097626366,0.49778314283978853,-0.2910724881500066,0.20460009219036931,2.2981979846954346 +1200001,1,0.14421538675261625,-0.18414412988023388,0.35034070611991114,,,,,,,,,,0.2373400917434395,-0.3229291202479022,-0.310551991190808,2.3970284461975098 +1200001,2,1.4948919167367798,0.5943954402418251,0.9981107504836196,,,,,,,,,,,,,2.3970284461975098 +1200302,0,1.5463508548916531,-1.1157275859627156,-0.9586099692679761,0.06338537359139342,0.5213317299680837,0.17294631652479245,0.210943041564296,0.2161851991690361,-0.5571809115428055,-0.835055314390411,0.6182048363947807,1.9685096127017316,1.267782866548965,1.9044904197771946,1.319805722893898,0.5583431720733643 +1200302,1,0.14421538675261625,-0.3623194500333156,0.04396546571710477,,,,,,,,,,1.663413533782179,1.8141914255436393,2.4486586478694914,0.36898189783096313 +1200302,2,1.1997145815169867,-0.2619623668205428,0.908108219284409,,,,,,,,,,,,,0.36898189783096313 +1200401,0,-0.03493941435979663,-0.8856113341279945,-0.7116979467082238,-0.9689657939725767,0.2698953541876708,-0.1115128652856221,0.5758667003987075,-1.8930486981477779,0.10125229030563083,-0.835055314390411,-0.9544903321671111,-0.13173296267509654,0.49778314283978853,-0.2910724881500066,0.20460009219036931,0.29385462403297424 +1200401,1,-0.528629892723603,-0.5404947701863974,-0.7730351753570456,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,-0.059714660367144415,0.5752089619636536 +1200401,2,-0.7681343199482997,-0.8847680446840831,-0.26192468630532967,,,,,,,,,,,,,0.5752089619636536 +1200402,0,-0.37378732919939306,-0.1952625786238314,-0.8351539579881,-0.9689657939725767,0.2698953541876708,-0.1115128652856221,0.5758667003987075,-1.8930486981477779,0.10125229030563083,-0.835055314390411,-0.9544903321671111,-0.13173296267509654,-1.0422163045785646,-0.2910724881500066,-0.6875644123724536,0.5752089619636536 +1200402,1,0.4325776493852816,0.5285571507320932,1.0652162670597927,,,,,,,,,,-1.1887333502953,0.7456311526478686,0.4419600012801827,0.541500449180603 +1200402,2,0.2157901307843435,0.04944047211122737,0.18808796969072364,,,,,,,,,,,,,0.541500449180603 +1202701,0,0.3039085004797998,-0.08020445270647089,0.5228621660905376,1.0957365411553635,1.149922669419116,1.3107830437664505,1.2144831033589276,0.5175043273571525,1.0889020930782853,-1.432801541987221,-2.13401170858853,0.7083640674756347,0.49778314283978853,0.806708965813594,-1.3566877907945707,1.8305209875106812 +1202701,1,0.6248191578070585,0.2612941705024705,0.6567159465227176,,,,,,,,,,1.663413533782179,0.7456311526478686,1.1944719937511734,1.9781602621078491 +1202701,2,1.0029296913704582,0.8279475694406527,-0.08191962390690835,,,,,,,,,,,,,1.9781602621078491 +1205202,0,0.8686550252124604,0.8402605546324132,0.5228621660905376,1.0957365411553635,1.0242044815289095,0.7418646801456215,-0.8838279349389385,-0.5672445341200663,1.2535103935403944,1.5559295959968287,1.7977262128162,0.7083640674756347,0.49778314283978853,0.806708965813594,-0.24148216009104212,2.0001583099365234 +1205202,1,1.4899059457050545,0.4394694906555523,0.7588410266569864,,,,,,,,,,0.2373400917434395,0.7456311526478686,-0.310551991190808,2.2692220211029053 +1205202,2,0.5109674660041365,0.9057982791735953,2.258146187272569,,,,,,,,,,,,,2.2692220211029053 +1205701,0,1.8851987697312496,2.566132443392821,2.4981583465685557,-0.08409336463203088,0.7727681057484966,0.7418646801456215,-0.1539806172701155,0.035393722256166354,-0.3925726110806964,-0.835055314390411,-0.9544903321671111,-0.5517814777504622,1.267782866548965,-0.2910724881500066,1.9889291013160153,1.9700478315353394 +1205701,1,-1.1053544179889336,2.9339239727986968,1.5758416677311367,,,,,,,,,,1.663413533782179,0.7456311526478686,2.4486586478694914,1.9216480255126953 +1205701,2,0.6093599110774008,2.307111054366561,1.988138593674937,,,,,,,,,,,,,1.9216480255126953 +1206201,0,0.07800989058673549,0.9553186805497738,0.6463181773704137,-1.4114020086428494,-0.7358501489339809,-2.9561046833897673,-0.2452115319787184,-0.3261892315695732,-2.038655615701787,-0.835055314390411,-0.9544903321671111,-0.5517814777504622,-0.27221658086938805,0.806708965813594,-1.3566877907945707,1.5790977478027344 +1206201,1,0.7209399120179469,1.419433751497502,1.0652162670597927,,,,,,,,,,0.2373400917434395,1.8141914255436393,-0.310551991190808,2.07464599609375 +1206201,2,0.7077523561506651,1.9178575057018483,0.2780905008899343,,,,,,,,,,,,,2.07464599609375 +1206603,0,0.4168578054263319,0.3800280509629712,-0.7116979467082238,-0.08409336463203088,0.39561354207787724,-0.3959720470960366,-1.8873679967335701,0.035393722256166354,-0.8863975124670236,-0.835055314390411,-0.9544903321671111,-0.9718299928258278,-1.0422163045785646,-0.2910724881500066,-0.9106055385131593,1.1433346271514893 +1206603,1,-0.04802612166916067,1.0630831111913384,2.392842308805287,,,,,,,,,,0.9503768127628092,1.8141914255436393,-0.8122266528381351,1.6769641637802124 +1206603,2,0.019005240637814846,0.282992601310055,0.5480980944875663,,,,,,,,,,,,,1.6769641637802124 +1208302,0,-0.8255845489855216,-1.000669460045355,-0.8351539579881,-0.674008317525728,0.6470499178582901,0.7418646801456215,-0.518904276104527,1.1804064093710083,-0.7217892120049145,-0.835055314390411,-0.16814274788616518,0.28831555240026907,-0.27221658086938805,-1.388853942113607,-0.018441033950336395,0.7058717012405396 +1208302,1,-0.6247506469344914,-1.0750207306456427,-1.079410415759852,,,,,,,,,,-1.9017700713146695,-1.3914893931436731,0.19112267045651915,0.6976528763771057 +1208302,2,-0.6697418748750354,-1.1183201738829107,-0.26192468630532967,,,,,,,,,,,,,0.6976528763771057 +1209201,0,0.3039085004797998,0.2649699250456107,2.621614357848432,0.358342850038242,0.2698953541876708,1.3107830437664505,0.6670976151073104,0.6380319786323989,-0.7217892120049145,0.9581833684000187,0.6182048363947807,-0.5517814777504622,0.49778314283978853,-0.2910724881500066,0.8737234706124865,2.0407068729400635 +1209201,1,0.33645689517439314,1.5085214115740428,0.963091186925524,,,,,,,,,,1.663413533782179,0.7456311526478686,1.1944719937511734,2.2077863216400146 +1209201,2,-0.4729569847285068,0.9057982791735953,0.5480980944875663,,,,,,,,,,,,,2.2077863216400146 +1209202,0,-0.03493941435979663,-1.230785711880076,-1.0820659805478523,0.358342850038242,0.2698953541876708,1.3107830437664505,0.6670976151073104,0.6380319786323989,-0.7217892120049145,0.9581833684000187,0.6182048363947807,-0.5517814777504622,1.267782866548965,0.806708965813594,0.8737234706124865,2.2077863216400146 +1209202,1,-1.1053544179889336,-0.896845410492561,-0.36453485481997044,,,,,,,,,,0.9503768127628092,0.7456311526478686,1.1944719937511734,2.179457426071167 +1209202,2,-0.27617209458197817,0.8279475694406527,0.7281031568859877,,,,,,,,,,,,,2.179457426071167 +1212303,0,-1.164432463825118,-0.8856113341279945,-0.4647859241484716,-1.2639232704194252,-1.1130047126046003,-0.1115128652856221,-0.61013519081313,-0.024870103381456905,-1.3802224138533508,-0.835055314390411,-0.16814274788616518,1.1284125825510003,-1.812216028287741,0.806708965813594,-0.24148216009104212,1.946341633796692 +1212303,1,-0.33638838430182605,-0.4514071101098565,0.45246578625417994,,,,,,,,,,-1.1887333502953,0.7456311526478686,-1.0630639836617988,2.3939449787139893 +1212303,2,-0.5713494298017712,-0.729066625218198,-0.17192215510611902,,,,,,,,,,,,,2.3939449787139893 +1213002,0,-1.6162296836112464,-0.770553208210634,-0.5882419354283478,-0.674008317525728,-0.35869558526336154,0.457405498335207,-0.8838279349389385,-0.4467168828448197,-1.0510058129291326,-0.23730908679360116,1.7977262128162,0.7083640674756347,-1.0422163045785646,-1.388853942113607,-0.4645232862317478,2.017455816268921 +1213002,1,-1.7781996974651528,-0.18414412988023388,-0.9772853356255832,,,,,,,,,,-0.47569662927593015,-1.3914893931436731,-0.5613893220144716,2.1084463596343994 +1213002,2,-0.27617209458197817,0.20514189157711243,-0.17192215510611902,,,,,,,,,,,,,2.1084463596343994 +1213701,0,-1.164432463825118,-0.5404369563759129,-0.3413299128685955,-0.5265295793023037,0.018458978407257843,0.457405498335207,0.940790359233119,0.7585596299076455,-0.7217892120049145,-1.432801541987221,-1.740837916448057,-1.8119270229765592,0.49778314283978853,-1.388853942113607,0.20460009219036931,0.9000177979469299 +1213701,1,-1.0092336637780452,-0.4514071101098565,-0.26240977468570165,,,,,,,,,,0.2373400917434395,-1.3914893931436731,0.19112267045651915,1.2578848600387573 +1213701,2,-0.7681343199482997,-0.33981307655348536,-0.7119373423013831,,,,,,,,,,,,,1.2578848600387573 +1218802,0,-1.27738176877165,0.03485367321088963,-0.2178739015887193,-0.674008317525728,-1.1130047126046003,-0.9648904107168657,0.940790359233119,-0.08513392901908017,-1.0510058129291326,-0.23730908679360116,0.22503104425430823,0.28831555240026907,0.49778314283978853,0.806708965813594,0.42764121833107505,1.7459635734558105 +1218802,1,0.6248191578070585,1.330346091420961,0.45246578625417994,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.310551991190808,2.150357484817505 +1218802,2,0.9045372462971938,0.5165447305088826,-0.35192721750454037,,,,,,,,,,,,,2.150357484817505 +1219108,0,-0.14788871930632877,-0.42537883045855246,-0.5882419354283478,-1.2639232704194252,-1.3644410883850133,-0.9648904107168657,0.8495594445245161,-1.0493551392210523,-1.2156141133912417,0.36043714080320877,-2.13401170858853,-0.5517814777504622,-0.27221658086938805,-1.388853942113607,-0.6875644123724536,-0.6931471824645996 +1219108,1,0.7209399120179469,-0.3623194500333156,0.7588410266569864,,,,,,,,,,0.9503768127628092,-1.3914893931436731,-1.0630639836617988,0.4990084767341614 +1219108,2,0.019005240637814846,-0.6512159154852555,0.09808543849151298,,,,,,,,,,,,,0.4990084767341614 +1219404,0,2.336995989517378,0.8402605546324132,1.5105102563295467,-0.23157210285545515,0.018458978407257843,0.457405498335207,-0.518904276104527,0.035393722256166354,-0.3925726110806964,-0.835055314390411,1.0113786285352542,-0.9718299928258278,-1.0422163045785646,-0.2910724881500066,-0.4645232862317478,-0.5128860473632812 +1219404,1,-0.14414687588004912,0.3503818305790114,0.04396546571710477,,,,,,,,,,-1.1887333502953,-1.3914893931436731,-0.8122266528381351,0.47219088673591614 +1219404,2,-0.07938720443544948,-0.18411165708760024,-0.5319322799029617,,,,,,,,,,,,,0.47219088673591614 +1221002,0,-0.03493941435979663,-0.1952625786238314,-0.3413299128685955,-0.5265295793023037,-0.35869558526336154,-0.9648904107168657,0.3934048709815018,-0.08513392901908017,-0.06335601015647824,0.9581833684000187,-0.5613165400266386,-0.9718299928258278,-0.27221658086938805,-0.2910724881500066,3.104134732019544,1.8515022993087769 +1221002,1,-0.528629892723603,0.2612941705024705,-0.9772853356255832,,,,,,,,,,-1.1887333502953,-0.3229291202479022,-0.5613893220144716,1.5154399871826172 +1221002,2,-0.5713494298017712,-0.2619623668205428,0.09808543849151298,,,,,,,,,,,,,1.5154399871826172 +1224001,0,-1.164432463825118,-0.08020445270647089,-0.2178739015887193,-0.5265295793023037,-0.7358501489339809,-0.9648904107168657,-0.61013519081313,-0.26592540593194997,-0.22796431061858732,-0.835055314390411,-0.16814274788616518,-0.5517814777504622,-0.27221658086938805,-1.388853942113607,-0.24148216009104212,1.166993260383606 +1224001,1,0.9131814204397238,-0.18414412988023388,-0.8751602554913144,,,,,,,,,,0.2373400917434395,-0.3229291202479022,1.1944719937511734,0.6483290791511536 +1224001,2,-0.37456453965524245,-0.6512159154852555,-0.08191962390690835,,,,,,,,,,,,,0.6483290791511536 +1225402,0,-1.0514831588785858,-1.000669460045355,-0.8351539579881,-1.2639232704194252,0.5213317299680837,-0.3959720470960366,-1.1575206790647472,-0.4467168828448197,-1.0510058129291326,0.36043714080320877,-0.5613165400266386,-1.8119270229765592,-0.27221658086938805,1.9044904197771946,-0.6875644123724536,0.8086773157119751 +1225402,1,-0.7208714011453798,-1.520459031028347,-1.079410415759852,,,,,,,,,,-0.47569662927593015,-0.3229291202479022,-0.5613893220144716,1.3888816833496094 +1225402,2,-0.6697418748750354,-1.6632751420135086,-2.2419803726879644,,,,,,,,,,,,,1.3888816833496094 +1228104,0,-0.9385338539320537,-0.08020445270647089,-0.09441789030884316,-1.1164445321960008,-0.8615683368241874,-0.1115128652856221,1.2144831033589276,0.3367128504442826,-0.5571809115428055,0.9581833684000187,1.4045524206757267,0.7083640674756347,-2.5822157519969178,-0.2910724881500066,-0.6875644123724536,2.0427663326263428 +1228104,1,-0.24026763009093757,-0.4514071101098565,-0.36453485481997044,,,,,,,,,,-1.9017700713146695,0.7456311526478686,2.197821317045828,0.6349214315414429 +1228104,2,0.5109674660041365,-0.729066625218198,-0.08191962390690835,,,,,,,,,,,,,0.6349214315414429 +1228402,0,1.5463508548916531,-0.08020445270647089,-0.2178739015887193,1.0957365411553635,1.0242044815289095,0.457405498335207,0.940790359233119,0.5777681529947757,0.9242937926161762,1.5559295959968287,1.7977262128162,1.1284125825510003,-1.0422163045785646,-0.2910724881500066,-0.24148216009104212,2.747105360031128 +1228402,1,-0.14414687588004912,0.3503818305790114,0.35034070611991114,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.059714660367144415,2.6632115840911865 +1228402,2,-0.27617209458197817,0.04944047211122737,0.2780905008899343,,,,,,,,,,,,,2.6632115840911865 +1256602,0,-0.14788871930632877,0.8402605546324132,1.3870542450496706,0.358342850038242,0.7727681057484966,0.7418646801456215,0.5758667003987075,1.361197886283878,0.7596854921540671,0.9581833684000187,0.22503104425430823,-0.13173296267509654,0.49778314283978853,0.806708965813594,0.8737234706124865,2.453709602355957 +1256602,1,0.52869840359617,0.6176448108086341,0.7588410266569864,,,,,,,,,,0.9503768127628092,0.7456311526478686,1.1944719937511734,1.5944350957870483 +1256602,2,-0.5713494298017712,0.43869402077594005,0.09808543849151298,,,,,,,,,,,,,1.5944350957870483 +1266703,0,-0.03493941435979663,-0.3103207045411919,-0.09441789030884316,-0.674008317525728,-0.7358501489339809,0.17294631652479245,0.3021739562728989,-1.3506742674091685,0.2658605907677399,-0.23730908679360116,-0.5613165400266386,0.28831555240026907,0.49778314283978853,1.9044904197771946,-0.6875644123724536,1.9671103954315186 +1266703,1,-1.0092336637780452,-1.431371370951806,-1.079410415759852,,,,,,,,,,0.9503768127628092,0.7456311526478686,-0.5613893220144716,1.9573663473129272 +1266703,2,-1.6536663256076787,-1.585424432280566,-1.6119626542934897,,,,,,,,,,,,,1.9573663473129272 diff --git a/src/skillmodels/test_data/model2.py b/src/skillmodels/test_data/model2.py index dc5a160b..00ea8c5a 100644 --- a/src/skillmodels/test_data/model2.py +++ b/src/skillmodels/test_data/model2.py @@ -5,9 +5,9 @@ anchoring of fac1 to outcome Q1 and a single control variable x1. """ -from skillmodels.model_spec import ( +from skillmodels.chs.options import CHSEstimationOptions +from skillmodels.common.model_spec import ( AnchoringSpec, - EstimationOptions, FactorSpec, ModelSpec, Normalizations, @@ -49,9 +49,14 @@ ), controls=("x1",), stagemap=(0, 0, 0, 0, 0, 0, 0), - estimation_options=EstimationOptions( - robust_bounds=True, - bounds_distance=0.001, - n_mixtures=1, - ), +) + +# CHS options used alongside MODEL2 in tests. Tests using this fixture run +# `get_maximization_inputs` for shape and value checks rather than full +# estimation; opt into the cheap Spearman start-value path so the fixture +# stays fast. End-user defaults (CHSEstimationOptions()) keep `"amn"`. +MODEL2_CHS_OPTIONS = CHSEstimationOptions( + robust_bounds=True, + bounds_distance=0.001, + start_params_strategy="spearman", ) diff --git a/src/skillmodels/test_data/simplest_augmented_model.py b/src/skillmodels/test_data/simplest_augmented_model.py index fd481723..7d2f058e 100644 --- a/src/skillmodels/test_data/simplest_augmented_model.py +++ b/src/skillmodels/test_data/simplest_augmented_model.py @@ -5,8 +5,8 @@ periods. Used for testing endogenous factor augmentation. """ -from skillmodels.model_spec import ( - EstimationOptions, +from skillmodels.chs.options import CHSEstimationOptions +from skillmodels.common.model_spec import ( FactorSpec, ModelSpec, Normalizations, @@ -33,7 +33,13 @@ ), }, observed_factors=("of",), - estimation_options=EstimationOptions( - bounds_distance=1e-8, - ), +) + +# CHS options used alongside SIMPLEST_AUGMENTED_MODEL in tests. Tests using +# this fixture exercise CHS plumbing rather than full estimation; opt into +# the cheap Spearman start-value path so collection stays fast. End-user +# defaults remain "amn". +SIMPLEST_AUGMENTED_MODEL_CHS_OPTIONS = CHSEstimationOptions( + bounds_distance=1e-8, + start_params_strategy="spearman", ) diff --git a/src/skillmodels/transition_functions.py b/src/skillmodels/transition_functions.py deleted file mode 100644 index 9e384614..00000000 --- a/src/skillmodels/transition_functions.py +++ /dev/null @@ -1,267 +0,0 @@ -"""Contains transition functions and corresponding helper functions. - -Below the signature and purpose of a transition function and its helper -functions is explained with a transition function called example_func: -> - -**example_func(** *states, params**)**: - - The actual transition function. - -Args: - * states: 1d numpy array of length n_all_factors - * params: 1d numpy array with coefficients specific to this transition function - -Return: - * float -**names_example_func(** *factors* **)**: - - Generate a list of names for the params of the transition function. - - The names will be used to construct index tuples in the following way: - - ('transition', period, factor, NAME) - -The transition functions have to be JAX jittable and differentiable. However, they -should not be jitted yet. - -""" - -import functools -from itertools import combinations -from typing import TYPE_CHECKING, Any - -import jax -import jax.numpy as jnp -import optimagic as om -from jax import Array - -if TYPE_CHECKING: - from skillmodels.constraints import FixedConstraintWithValue - - -def select_by_loc(params: Any, loc: Any) -> Any: # noqa: ANN401 - """Select parameters by location.""" - return params.loc[loc] - - -def linear(states: Array, params: Array) -> Array: - """Linear production function where the constant is the last parameter.""" - constant = params[-1] - betas = params[:-1] - return jnp.dot(states, betas) + constant - - -def params_linear(factors: tuple[str, ...]) -> list[str]: - """Index tuples for linear transition function.""" - return [*factors, "constant"] - - -def identity_constraints_linear( - factor: str, - aug_period: int, - all_factors: tuple[str, ...], -) -> list[FixedConstraintWithValue]: - """Identity constraints for linear transition function.""" - from skillmodels.constraints import FixedConstraintWithValue # noqa: PLC0415 - - constraints: list[FixedConstraintWithValue] = [] - for regressor in params_linear(all_factors): - val = 1.0 if factor == regressor else 0.0 - loc = ("transition", aug_period, factor, regressor) - constraints.append(FixedConstraintWithValue(loc=loc, value=val)) - return constraints - - -def translog(states: Array, params: Array) -> Array: - """Translog transition function. - - The name is a convention in the skill formation literature even though the function - is better described as a linear in parameters transition function with squares and - interaction terms of the states. - - """ - nfac = len(states) - constant = params[-1] - lin_beta = params[:nfac] - square_beta = params[nfac : 2 * nfac] - inter_beta = params[2 * nfac : -1] - - res = jnp.dot(states, lin_beta) - res += jnp.dot(states**2, square_beta) - for p, (a, b) in zip(inter_beta, combinations(range(nfac), 2), strict=False): - res += p * states[a] * states[b] - res += constant - return res - - -def params_translog(factors: tuple[str, ...]) -> list[str]: - """Index tuples for the translog production function.""" - return ( - list(factors) - + [f"{factor} ** 2" for factor in factors] - + [f"{a} * {b}" for a, b in combinations(factors, 2)] - + ["constant"] - ) - - -def identity_constraints_translog( - factor: str, - aug_period: int, - all_factors: tuple[str, ...], -) -> list[FixedConstraintWithValue]: - """Identity constraints for translog transition function.""" - from skillmodels.constraints import FixedConstraintWithValue # noqa: PLC0415 - - constraints: list[FixedConstraintWithValue] = [] - for regressor in params_translog(all_factors): - val = 1.0 if factor == regressor else 0.0 - loc = ("transition", aug_period, factor, regressor) - constraints.append(FixedConstraintWithValue(loc=loc, value=val)) - return constraints - - -def log_ces(states: Array, params: Array) -> Array: - """Log CES production function (KLS version).""" - phi = params[-1] - gammas = params[:-1] - scaling_factor = 1 / phi - - # note: once the b argument is supported in jax.scipy.special.logsumexp, we can set - # b = gammas instead of adding the log of gammas to sigma_points * phi - - # the log step for gammas underflows for gamma = 0, but this is handled correctly - # by logsumexp and does not raise a warning. - unscaled = jax.scipy.special.logsumexp(jnp.log(gammas) + states * phi) - return unscaled * scaling_factor - - -def params_log_ces(factors: tuple[str, ...]) -> list[str]: - """Index tuples for the log_ces production function.""" - return [*factors, "phi"] - - -def constraints_log_ces( - factor: str, - factors: tuple[str, ...], - aug_period: int, -) -> om.constraints.Constraint: - """Constraints for log_ces production function.""" - names = params_log_ces(factors) - loc = [("transition", aug_period, factor, name) for name in names[:-1]] - return om.ProbabilityConstraint(selector=functools.partial(select_by_loc, loc=loc)) - - -def identity_constraints_log_ces( - factors: tuple[str, ...], - aug_period: int, - all_factors: tuple[str, ...], -) -> list[om.constraints.Constraint]: - """Identity constraints for log_ces.""" - raise NotImplementedError - - -def constant(state: Array, params: Array) -> Array: # noqa: ARG001 - """Constant production function.""" - return state - - -def params_constant(factors: tuple[str, ...]) -> list[str]: # noqa: ARG001 - """Index tuples for the constant production function.""" - return [] - - -def robust_translog(states: Array, params: Array) -> Array: - """Numerically robust version of the translog transition function. - - This function does a clipping of the state vector at +- 1e12 before calling - the standard translog function. It has a no effect on the results if the - states do not get close to the clipping values and prevents overflows otherwise. - - The name is a convention in the skill formation literature even though the function - is better described as a linear in parameters transition function with squares and - interaction terms of the states. - - """ - clipped_states = jnp.clip(states, -1e12, 1e12) - return translog(states=clipped_states, params=params) - - -def params_robust_translog(factors: tuple[str, ...]) -> list[str]: - """Return parameter names for robust translog transition function.""" - return params_translog(factors) - - -def identity_constraints_robust_translog( - factor: str, - aug_period: int, - all_factors: tuple[str, ...], -) -> list[FixedConstraintWithValue]: - """Identity constraints for robust_translog.""" - return identity_constraints_translog( - factor=factor, aug_period=aug_period, all_factors=all_factors - ) - - -def linear_and_squares(states: Array, params: Array) -> Array: - """linear_and_squares transition function.""" - nfac = len(states) - constant = params[-1] - lin_beta = params[:nfac] - square_beta = params[nfac : 2 * nfac] - - res = jnp.dot(states, lin_beta) - res += jnp.dot(states**2, square_beta) - res += constant - return res - - -def params_linear_and_squares(factors: tuple[str, ...]) -> list[str]: - """Index tuples for the linear_and_squares production function.""" - return list(factors) + [f"{factor} ** 2" for factor in factors] + ["constant"] - - -def identity_constraints_linear_and_squares( - factor: str, - aug_period: int, - all_factors: tuple[str, ...], -) -> list[FixedConstraintWithValue]: - """Identity constraints for linear_and_squares transition function.""" - from skillmodels.constraints import FixedConstraintWithValue # noqa: PLC0415 - - constraints: list[FixedConstraintWithValue] = [] - for regressor in params_linear_and_squares(all_factors): - val = 1.0 if factor == regressor else 0.0 - loc = ("transition", aug_period, factor, regressor) - constraints.append(FixedConstraintWithValue(loc=loc, value=val)) - return constraints - - -def log_ces_general(states: Array, params: Array) -> Array: - """Generalized log_ces production function without known location and scale.""" - n = states.shape[-1] - tfp = params[-1] - gammas = params[:n] - sigmas = params[n : 2 * n] - - # note: once the b argument is supported in jax.scipy.special.logsumexp, we can set - # b = gammas instead of adding the log of gammas to sigma_points * phi - - # the log step for gammas underflows for gamma = 0, but this is handled correctly - # by logsumexp and does not raise a warning. - unscaled = jax.scipy.special.logsumexp(jnp.log(gammas) + states * sigmas) - return unscaled * tfp - - -def params_log_ces_general(factors: tuple[str, ...]) -> list[str]: - """Index tuples for the generalized log_ces production function.""" - return list(factors) + [f"sigma_{fac}" for fac in factors] + ["tfp"] - - -def identity_constraints_log_ces_general( - factors: tuple[str, ...], - aug_period: int, - all_factors: tuple[str, ...], -) -> list[om.constraints.Constraint]: - """Identity constraints for log_ces_general.""" - raise NotImplementedError diff --git a/tests/af/test_validate.py b/tests/af/test_validate.py new file mode 100644 index 00000000..bdf0d1c0 --- /dev/null +++ b/tests/af/test_validate.py @@ -0,0 +1,41 @@ +"""Regression tests for the AF kappa-parameter scope guard. + +These pin the documented AF scope boundary (kappa_t = 0, exogenous +investment): a caller cannot silently smuggle a `kappa`/`kappa_t` +parameter, while standard parameter categories still pass. +""" + +import pandas as pd +import pytest + +from skillmodels.af.validate import fail_if_unsupported_kappa_params + + +def test_fail_if_unsupported_kappa_params_rejects_kappa_in_start_params() -> None: + idx = pd.MultiIndex.from_tuples( + [("kappa", 0, "skill", "-")], + names=["category", "period", "name1", "name2"], + ) + start = pd.DataFrame({"value": [0.3]}, index=idx) + with pytest.raises(NotImplementedError, match="kappa"): + fail_if_unsupported_kappa_params(start, None, None) + + +def test_fail_if_unsupported_kappa_params_rejects_kappa_in_fixed_params() -> None: + idx = pd.MultiIndex.from_tuples( + [("kappa_t", 0, "skill", "-")], + names=["category", "period", "name1", "name2"], + ) + fixed = pd.DataFrame({"value": [0.0]}, index=idx) + with pytest.raises(NotImplementedError): + fail_if_unsupported_kappa_params(None, fixed, None) + + +def test_fail_if_unsupported_kappa_params_allows_standard_categories() -> None: + idx = pd.MultiIndex.from_tuples( + [("shock_sds", 0, "skill", "-"), ("investment_sds", 0, "inv", "-")], + names=["category", "period", "name1", "name2"], + ) + start = pd.DataFrame({"value": [0.5, 0.5]}, index=idx) + # Must NOT raise. + fail_if_unsupported_kappa_params(start, None, None) diff --git a/tests/conftest.py b/tests/conftest.py index 89d6f081..3268d472 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,13 +1,40 @@ -"""Shared test fixtures and helpers.""" +"""Shared test fixtures and helpers. -from dataclasses import replace -from pathlib import Path +Tests opt in to whole-package beartype via `beartype.claw.beartype_package` +here so that annotation drift on *internal* helpers surfaces as a +`BeartypeCallHintParamViolation` during the test run. The perimeter +decorators (`skillmodels._beartype_conf`) keep raising project-specific +exception classes for *user-facing* parameter violations; the claw-installed +checks below are for everything in between. -import pandas as pd -import pytest +`skillmodels.chs.qr` is skipped because it relies on JAX's `@custom_jvp` +decorator, which beartype.claw wraps in a way that strips the +`.defjvp` attribute that the second-stage `@qr_gpu.defjvp` decoration +needs. No annotations in that module are user-facing. +""" -from skillmodels.config import TEST_DATA_DIR -from skillmodels.test_data.model2 import MODEL2 +from beartype import BeartypeConf +from beartype.claw import beartype_package + +# Mirror the perimeter conf's PEP-484 numeric tower so `int` satisfies +# `float`-typed parameters. Without this every `value=1` call site +# (e.g. `FixedConstraintWithValue(value=1)`) trips the claw checker. +beartype_package( + "skillmodels", + conf=BeartypeConf( + is_pep484_tower=True, + claw_skip_package_names=("skillmodels.chs.qr",), + ), +) + +from dataclasses import replace # noqa: E402 +from pathlib import Path # noqa: E402 + +import pandas as pd # noqa: E402 +import pytest # noqa: E402 + +from skillmodels.common.config import TEST_DATA_DIR # noqa: E402 +from skillmodels.test_data.model2 import MODEL2 # noqa: E402 REGRESSION_VAULT = Path(__file__).parent / "regression_vault" diff --git a/tests/stable_translog_reference.py b/tests/stable_translog_reference.py new file mode 100644 index 00000000..c89f26dc --- /dev/null +++ b/tests/stable_translog_reference.py @@ -0,0 +1,263 @@ +"""Independent scalar reference for the stable_translog design audit. + +No project imports and no emulation of JAX execution. Decimal evaluates the original +real equation, not the normalized expression proposed for production. Fractions give +exact counterexamples to dynamical claims. Running this file tests mathematical +claims only, never native skillmodels/XLA behavior. +""" + +from __future__ import annotations + +import json +import math +import sys +from decimal import Decimal, localcontext +from fractions import Fraction as Q +from itertools import combinations +from typing import Sequence + + +def dec(x: object) -> Decimal: + return x if isinstance(x, Decimal) else Decimal(str(x)) + + +def clip(x: object, scale: object = 3, power: int = 4) -> Decimal: + """Original equation in 90-digit arithmetic; finite, positive scale, even p.""" + x, s = dec(x), dec(scale) + if not s.is_finite() or s <= 0 or type(power) is not int or power < 2 or power % 2: + raise ValueError("positive finite scale and even integer power >=2 required") + if x.is_nan(): + return x + if x.is_infinite(): + return s.copy_sign(x) + with localcontext() as ctx: + ctx.prec = 90 + ctx.Emax = 9999999 + ctx.Emin = -9999999 + return +(x / (1 + abs(x / s) ** power) ** (Decimal(1) / power)) + + +def transition( + states: Sequence[object], + params: Sequence[object], + scale: object = 3, + power: int = 4, +) -> Decimal: + n = len(states) + if len(params) != 2 * n + n * (n - 1) // 2 + 1: + raise ValueError("parameter count does not match the translog layout") + with localcontext() as ctx: + ctx.prec = 90 + x, b = list(map(dec, states)), list(map(dec, params)) + g = [clip(v, scale, power) for v in x] + ans = b[-1] + sum((x[j] * b[j] for j in range(n)), Decimal(0)) + ans += sum((g[j] ** 2 * b[n + j] for j in range(n)), Decimal(0)) + for k, (a, z) in enumerate(combinations(range(n), 2)): + ans += b[2 * n + k] * g[a] * g[z] + return +ans + + +def clip_derivative(x: object, scale: object = 3, power: int = 4) -> Decimal: + with localcontext() as ctx: + ctx.prec = 90 + q = abs(dec(x) / dec(scale)) ** power + return +((1 + q) ** (-Decimal(1) - Decimal(1) / power)) + + +def matvec(a, x): + return tuple(sum((v * w for v, w in zip(row, x)), Q(0)) for row in a) + + +def matmul(a, b): + return tuple( + tuple( + sum((a[i][k] * b[k][j] for k in range(len(b))), Q(0)) + for j in range(len(b[0])) + ) + for i in range(len(a)) + ) + + +def stability_witnesses(): + # Bounded exogenous forcing: x[t+1] = -a*x[t] + z[t]. + inverse_gain = [] + for a in (Q(1, 4), Q(1, 2), Q(3, 4), Q(7, 8)): + x = -1 / (1 - a) + amplitude = abs(x) + for t in range(12): + x = -a * x + (-1) ** t + assert abs(x) == amplitude + assert amplitude > 1 / (1 + a) + inverse_gain.append( + { + "a": str(a), + "true_amplitude": str(amplitude), + "claimed_inverse_gain": str(1 / (1 + a)), + } + ) + # Each matrix has eigenvalues a,a. Their product has an eigenvalue >1. + switching = [] + for a, b in ((Q(1, 2), Q(1)), (Q(3, 4), Q(1, 2)), (Q(1, 4), Q(1))): + aa = ((a, b), (Q(0), a)) + ab = ((a, Q(0)), (b, a)) + product = matmul(ab, aa) + det_i_minus = (1 - product[0][0]) * (1 - product[1][1]) - product[0][ + 1 + ] * product[1][0] + assert det_i_minus == (1 - a * a) ** 2 - b * b < 0 + x = (Q(1), Q(1)) + for _ in range(50): + x = matvec(product, x) + assert max(x) > 1 + switching.append( + { + "a": str(a), + "b": str(b), + "det(I-product)": str(det_i_minus), + "max_state_after_100_steps": float(max(x)), + } + ) + # Reported entry bounds do not certify rho(A)<1. + a = tuple( + tuple(Q(17, 20) if i == j else Q(3, 25) for j in range(4)) for i in range(4) + ) + assert matvec(a, (Q(1),) * 4) == (Q(121, 100),) * 4 + # Default cf=i-prediction can already change the linear stability condition. + x, investment, first_stage, kappa = Q(2), Q(0), Q(1), Q(-1) + base = Q(1, 2) * x + composed = base + kappa * (investment - first_stage * x) + assert composed == Q(3, 2) * x + return { + "bounded_input_inverse_gain": inverse_gain, + "switched_schur_family": switching, + "small_entry_matrix_eigenvalue": "121/100", + "control_function_effective_own_coefficient": "3/2", + } + + +def default_certificate(): + """Prove root uniqueness by a global inequality, not a sign-change grid. + + For z=-x>0, H(z)=f(-z)+z=-d+a*z-b*z^2/sqrt(1+(z/s)^4). + z/sqrt(1+(z/s)^4)<=s/sqrt(2). Thus H(z)>=m*z-d. + For z>=1/4 this is positive, while on [0,1/4], H'>=a-2*b/4>0. + Positive x cannot be fixed. A separate derivative bound proves f increasing, + hence monotone convergence to the unique fixed point from every finite start. + """ + with localcontext() as ctx: + ctx.prec = 90 + a, b, d, s = map(Decimal, ("0.231", "0.103", "0.003", "3")) + margin = a - b * s / Decimal(2).sqrt() + cut = Decimal("0.25") + assert margin * cut > d + assert a - 2 * b * cut > 0 + zmax = s / Decimal(5) ** Decimal("0.25") + max_ggprime = zmax / (Decimal("1.2") ** Decimal("1.5")) + min_fprime = Decimal("0.769") - 2 * b * max_ggprime + assert min_fprime > 0 + lo, hi = Decimal(0), cut + for _ in range(240): + z = (lo + hi) / 2 + h = -d + a * z - b * clip(z) ** 2 + if h < 0: + lo = z + else: + hi = z + root = -(lo + hi) / 2 + residual = transition([root], ["0.769", "-0.103", "-0.003"]) - root + assert abs(residual) < Decimal("1e-65") + x = Decimal(-3) + maximum = abs(x) + for _ in range(200): + next_x = transition([x], ["0.769", "-0.103", "-0.003"]) + assert x <= next_x <= root + Decimal("1e-65") + x = next_x + maximum = max(maximum, abs(x)) + fidelity = { + str(v): str(1 - (clip(v) / v) ** 2) for v in map(Decimal, ("1", "2", "2.5")) + } + assert Decimal(fidelity["1"]) <= Decimal(".01") + assert Decimal(fidelity["2"]) <= Decimal(".1") + # The same proof covers this deliberate neighborhood around the default. + for bs in ("0.1025", "0.103", "0.1035"): + bb = Decimal(bs) + assert (a - bb * s / Decimal(2).sqrt()) * Decimal("0.5") > d + assert a - 2 * bb * Decimal("0.5") > 0 + return { + "fidelity": fidelity, + "fixed_point": str(root), + "fixed_point_count": 1, + "fixed_point_residual": str(residual), + "sup_0_through_200": str(maximum), + "state_at_200": str(x), + "root_margin": str(margin), + "global_lower_bound_fprime": str(min_fprime), + } + + +def integration_diagnostics(): + # An explicitly illustrative 9-dimensional spherical-radial sigma rule: + # weights 1/(2d), nodes +/-sqrt(d)*e_j, mu=0, P=I. NOT a claim about CHS weights. + d = 9 + nodes = [] + for j in range(d): + for sign in (-1, 1): + x = [Decimal(0)] * d + x[j] = Decimal(sign) * Decimal(d).sqrt() + nodes.append(x) + mean_tl = sum((x[0] ** 2 for x in nodes), Decimal(0)) / len(nodes) + mean_st = sum((clip(x[0]) ** 2 for x in nodes), Decimal(0)) / len(nodes) + assert mean_tl == 1 + assert mean_st < Decimal(".71") + # Changing only the stable_translog default scale to 2.5 is not pinned by + # the planned small-state/full-output test; it does violate the contract at 2. + params = [".2", ".1", ".12", ".08", ".04", ".05", ".05", ".03", ".06", ".04"] + state = [".3", "-.5", ".8"] + tl = transition(state, params, scale=Decimal("1e20")) + mutated = transition(state, params, scale="2.5") + assert abs(mutated - tl) < Decimal(".001") + bad_fidelity = 1 - (clip(2, "2.5") / 2) ** 2 + assert bad_fidelity > Decimal(".1") + return { + "illustrative_sigma_rule": "d=9, +/-sqrt(d)e_j, weights 1/(2d)", + "sigma_mean_translog_square": str(mean_tl), + "sigma_mean_stable_square": str(mean_st), + "default_scale_mutant_2.5_error_at_2": str(bad_fidelity), + "mutant_small_state_absolute_error": str(abs(mutated - tl)), + "bypass_loglike_ratio": "0 for any finite nonzero baseline loglike if stable dispatch aliases translog", + } + + +def overflow_witness(): + x = Decimal("1e80") + scale = Decimal(3) + with localcontext() as ctx: + ctx.prec = 90 + internal = (x / scale) ** 4 + assert math.isfinite(float(x)) + assert internal > Decimal.from_float(sys.float_info.max) + expected = transition([x], [0, 1, 0]) + assert abs(expected - 9) < Decimal("1e-70") + return { + "finite_float64_input": "1e80", + "params": [0, 1, 0], + "internal_fourth_power": str(internal), + "correct_transition": str(expected), + "proposed_JAX_outcome": "0 under ordinary IEEE overflow; static prediction, not executed", + "native_execution": "not_run", + } + + +def main(): + result = { + "stability": stability_witnesses(), + "default": default_certificate(), + "finite_overflow": overflow_witness(), + "integration": integration_diagnostics(), + "execution_scope": "independent standard-library math only; no JAX/skillmodels imports", + } + print(json.dumps(result, indent=2)) + + +if __name__ == "__main__": + main() diff --git a/tests/test_af_adapter_alignment.py b/tests/test_af_adapter_alignment.py new file mode 100644 index 00000000..1f73976c --- /dev/null +++ b/tests/test_af_adapter_alignment.py @@ -0,0 +1,51 @@ +"""The AF calendar adapter aligns the whole per-observation payload by individual ID. + +The adapter sources mixed-calendar measurement columns on a sorted individual-ID +intersection, while controls, observed factors, the period-0 conditional distribution, +and the chain-link payloads are read positionally in input-row order. Unless every +per-observation array shares one canonical order, a measurement row for one person is +paired with another person's controls or latent payload (a silent point-estimate change +on a reordered or unbalanced panel). + +`_align_adapter_panel` canonicalises the panel to one ID-sorted order on the adapter +path, and requires the panel to be balanced (AF aligns periods positionally), raising +otherwise. +""" + +import numpy as np +import pandas as pd +import pytest + +from skillmodels.af.estimate import _align_adapter_panel + + +def _panel(ids_per_period: dict[int, list[int]]) -> pd.DataFrame: + rows = [] + for period, ids in ids_per_period.items(): + for i in ids: + rows.append({"id": i, "period": period, "y": float(10 * period + i)}) + return pd.DataFrame(rows).set_index(["id", "period"]) + + +def test_align_adapter_panel_canonicalises_shuffled_order() -> None: + rng = np.random.default_rng(0) + balanced = _panel({0: [1, 2, 3], 1: [1, 2, 3]}) + shuffled = balanced.sample(frac=1.0, random_state=np.random.RandomState(1)) + assert shuffled.index.tolist() != balanced.sort_index().index.tolist() + + aligned = _align_adapter_panel(shuffled, n_periods=2) + + # Canonical (id, period) order regardless of input row order. + assert aligned.index.tolist() == balanced.sort_index().index.tolist() + # Within each period the rows are id-ascending, so the period slices align. + for period in (0, 1): + slice_ids = aligned.xs(period, level="period").index.tolist() + assert slice_ids == sorted(slice_ids) + _ = rng + + +def test_align_adapter_panel_rejects_unbalanced() -> None: + # Individual 3 is missing from period 1: AF cannot positionally align the periods. + unbalanced = _panel({0: [1, 2, 3], 1: [1, 2]}) + with pytest.raises(ValueError, match="balanced"): + _align_adapter_panel(unbalanced, n_periods=2) diff --git a/tests/test_af_adapter_inference_guard.py b/tests/test_af_adapter_inference_guard.py new file mode 100644 index 00000000..28063f12 --- /dev/null +++ b/tests/test_af_adapter_inference_guard.py @@ -0,0 +1,103 @@ +"""AF standard errors still reject calendar-adapter models for now. + +`compute_af_standard_errors` still reconstructs the single-period measurement layout, +which is wrong for the source/destination calendar adapter (source-investment params +live in the next step's result and the per-step parser counts differ). Until it consumes +the compiled `AFStepLayout`, it must raise on an adapter model rather than return +standard errors that differentiate the wrong objective. (`get_af_posterior_states` now +supports adapter models: it scores each state factor against its own correctly-parsed +indicators and drops the mis-sourced reconstructed-investment indicators -- see +`test_af_posterior_states.py`.) +""" + +import pandas as pd +import pytest + +from skillmodels.af.inference import compute_af_standard_errors +from skillmodels.af.step_layout import ( + fail_if_calendar_adapter_unsupported, + fail_if_spearman_unsupported_on_adapter, + model_uses_calendar_adapter, +) +from skillmodels.af.types import AFEstimationResult +from skillmodels.common.model_spec import FactorSpec, ModelSpec, Normalizations + + +def _plain_model() -> ModelSpec: + return ModelSpec( + factors={ + "skills": FactorSpec( + measurements=(("s1",), ("s1",)), + normalizations=Normalizations( + loadings=({"s1": 1}, {"s1": 1}), intercepts=({"s1": 0}, {"s1": 0}) + ), + transition_function="linear", + ), + }, + ) + + +def _adapter_model() -> ModelSpec: + return ModelSpec( + factors={ + "skills": FactorSpec( + measurements=(("s1",), ("s1",)), + normalizations=Normalizations( + loadings=({"s1": 1}, {"s1": 1}), intercepts=({"s1": 0}, {"s1": 0}) + ), + transition_function="linear", + ), + "investment": FactorSpec( + measurements=(("i1",), ("i1",)), + normalizations=Normalizations( + loadings=({"i1": 1}, {"i1": 1}), intercepts=({"i1": 0}, {"i1": 0}) + ), + transition_function="linear", + is_endogenous=True, + has_initial_distribution=False, + ), + }, + ) + + +def test_model_uses_calendar_adapter_detects_reconstructed_endogenous() -> None: + assert model_uses_calendar_adapter(_adapter_model()) is True + assert model_uses_calendar_adapter(_plain_model()) is False + + +def test_raiser_is_noop_for_plain_model() -> None: + fail_if_calendar_adapter_unsupported(_plain_model(), "feature") + + +def test_raiser_rejects_adapter_model() -> None: + with pytest.raises(NotImplementedError, match="calendar adapter"): + fail_if_calendar_adapter_unsupported(_adapter_model(), "feature") + + +def _adapter_result() -> AFEstimationResult: + return AFEstimationResult( + period_results=(), + params=pd.DataFrame(), + model_spec=_adapter_model(), + conditional_distributions=(), + success=True, + loglikelihood=0.0, + ) + + +def test_standard_errors_reject_adapter_model() -> None: + with pytest.raises(NotImplementedError, match="calendar adapter"): + compute_af_standard_errors(_adapter_result(), pd.DataFrame()) + + +def test_spearman_guard_rejects_adapter_model() -> None: + with pytest.raises(NotImplementedError, match="spearman"): + fail_if_spearman_unsupported_on_adapter(_adapter_model(), "spearman") + + +def test_spearman_guard_noop_for_constant_strategy_on_adapter() -> None: + fail_if_spearman_unsupported_on_adapter(_adapter_model(), "constant") + + +def test_spearman_guard_noop_for_spearman_on_plain_model() -> None: + fail_if_spearman_unsupported_on_adapter(_plain_model(), "spearman") diff --git a/tests/test_af_batching.py b/tests/test_af_batching.py new file mode 100644 index 00000000..18681d5c --- /dev/null +++ b/tests/test_af_batching.py @@ -0,0 +1,139 @@ +"""Tests for the AF memory-aware batching helpers.""" + +import os + +import jax +import jax.numpy as jnp +import numpy as np +import pytest + +from skillmodels.af.batching import ( + _DEFAULT_TARGET_BATCH_BYTES, + _ENV_VAR_TARGET, + auto_n_obs_per_batch, + target_batch_bytes, +) +from skillmodels.af.likelihood import _map_over_obs + +jax.config.update("jax_enable_x64", val=True) + + +def _square_sum(x: jnp.ndarray) -> jnp.ndarray: + return jnp.sum(x**2) + + +def _two_arg(x: jnp.ndarray, y: jnp.ndarray) -> jnp.ndarray: + return jnp.sum(x * y) + + +@pytest.mark.parametrize("batch_size", [None, 1, 3, 7, 100]) +def test_map_over_obs_matches_vmap_for_every_batch_size(batch_size: int | None) -> None: + """The chunked ``_map_over_obs`` must match ``jax.vmap`` exactly.""" + rng = np.random.default_rng(0) + xs = jnp.asarray(rng.normal(size=(20, 5))) + + expected = jax.vmap(_square_sum)(xs) + actual = _map_over_obs(_square_sum, xs, n_obs_per_batch=batch_size) + + # 1 ULP differences are allowed because `lax.map` may use a different + # reduction order than `vmap`. + np.testing.assert_allclose( + np.asarray(actual), np.asarray(expected), rtol=0, atol=1e-13 + ) + + +@pytest.mark.parametrize("batch_size", [None, 1, 5]) +def test_map_over_obs_two_args(batch_size: int | None) -> None: + rng = np.random.default_rng(1) + xs = jnp.asarray(rng.normal(size=(15, 3))) + ys = jnp.asarray(rng.normal(size=(15, 3))) + + expected = jax.vmap(_two_arg)(xs, ys) + actual = _map_over_obs(_two_arg, xs, ys, n_obs_per_batch=batch_size) + + np.testing.assert_allclose( + np.asarray(actual), np.asarray(expected), rtol=0, atol=1e-14 + ) + + +def test_map_over_obs_preserves_gradient() -> None: + """Reverse-mode gradient must not depend on the chunk size.""" + rng = np.random.default_rng(2) + xs = jnp.asarray(rng.normal(size=(12, 4))) + + def _loss(xs_flat: jnp.ndarray, batch: int | None) -> jnp.ndarray: + xs_r = xs_flat.reshape((12, 4)) + return jnp.sum(_map_over_obs(_square_sum, xs_r, n_obs_per_batch=batch)) + + g_full = jax.grad(lambda x: _loss(x, None))(xs.reshape(-1)) + g_chunked = jax.grad(lambda x: _loss(x, 3))(xs.reshape(-1)) + + np.testing.assert_allclose( + np.asarray(g_chunked), np.asarray(g_full), rtol=0, atol=1e-10 + ) + + +def test_target_batch_bytes_default() -> None: + os.environ.pop(_ENV_VAR_TARGET, None) + assert target_batch_bytes() == _DEFAULT_TARGET_BATCH_BYTES + + +def test_target_batch_bytes_env_override() -> None: + os.environ[_ENV_VAR_TARGET] = "1048576" + try: + assert target_batch_bytes() == 1_048_576 + finally: + del os.environ[_ENV_VAR_TARGET] + + +def test_target_batch_bytes_rejects_junk() -> None: + os.environ[_ENV_VAR_TARGET] = "not-a-number" + try: + assert target_batch_bytes() == _DEFAULT_TARGET_BATCH_BYTES + finally: + del os.environ[_ENV_VAR_TARGET] + + +def test_auto_n_obs_per_batch_small_problem_uses_all() -> None: + """Tiny problems fit easily; the whole batch should run in one shot.""" + batch = auto_n_obs_per_batch( + n_obs=100, + n_halton_points=20, + n_halton_points_shock=10, + n_latent=2, + n_endogenous=0, + ) + assert batch == 100 + + +def test_auto_n_obs_per_batch_large_problem_splits() -> None: + """Large problems need to be chunked; the result is smaller than n_obs.""" + batch = auto_n_obs_per_batch( + n_obs=1403, + n_halton_points=20_000, + n_halton_points_shock=20_000, + n_latent=4, + n_endogenous=1, + ) + assert 1 <= batch < 1403 + + +def test_auto_n_obs_per_batch_respects_target_bytes() -> None: + """A bigger budget should allow a larger batch (monotone in the budget).""" + small = auto_n_obs_per_batch( + n_obs=10_000, + n_halton_points=200, + n_halton_points_shock=50, + n_latent=2, + n_endogenous=1, + target_bytes=2**24, + ) + large = auto_n_obs_per_batch( + n_obs=10_000, + n_halton_points=200, + n_halton_points_shock=50, + n_latent=2, + n_endogenous=1, + target_bytes=2**30, + ) + assert small <= large diff --git a/tests/test_af_equality_propagation.py b/tests/test_af_equality_propagation.py new file mode 100644 index 00000000..624db627 --- /dev/null +++ b/tests/test_af_equality_propagation.py @@ -0,0 +1,241 @@ +"""Cross-period equality propagation in `estimate_af`. + +skane-struct-bw and similar applications impose equality constraints +across aug-periods (e.g., shock_sds, transition coefficients constant +within a stage, loadings/meas_sds constant across periods). AF's +sequential MLE estimates each period independently and would silently +violate those constraints; the new `constraints=` kwarg on +`estimate_af` propagates equality groups by pinning every member of a +group to whichever member is estimated first. + +These tests exercise the propagation directly via the helpers and +end-to-end via a small synthetic T=3 fit. +""" + +import functools + +import jax +import numpy as np +import optimagic as om +import pandas as pd +import pytest + +from skillmodels.af import AFEstimationOptions, estimate_af +from skillmodels.af.estimate import ( + _extract_equality_groups, + _propagate_equality_groups, +) +from skillmodels.af.types import AFPeriodResult +from skillmodels.common.constraints import select_by_loc +from skillmodels.common.model_spec import ( + FactorSpec, + ModelSpec, + Normalizations, +) +from skillmodels.common.params_index import get_params_index +from skillmodels.common.process_model import process_model + +jax.config.update("jax_enable_x64", True) + + +def _equality_constraint(loc: pd.MultiIndex) -> om.EqualityConstraint: + return om.EqualityConstraint( + selector=functools.partial(select_by_loc, loc=loc), + ) + + +def test_extract_equality_groups_returns_only_equality_constraints() -> None: + loc = pd.MultiIndex.from_tuples( + [("transition", 0, "fac1", "fac1"), ("transition", 1, "fac1", "fac1")], + names=["category", "period", "name1", "name2"], + ) + constraints: list[om.constraints.Constraint] = [ + _equality_constraint(loc), + om.FixedConstraint(selector=functools.partial(select_by_loc, loc=loc)), + ] + groups = _extract_equality_groups(constraints) + assert len(groups) == 1 + assert groups[0].equals(loc) + + +def test_extract_equality_groups_handles_empty_input() -> None: + assert _extract_equality_groups(None) == [] + assert _extract_equality_groups([]) == [] + + +def test_propagate_equality_groups_pins_other_periods() -> None: + period_0 = AFPeriodResult( + period=0, + params=pd.DataFrame( + {"value": [0.42]}, + index=pd.MultiIndex.from_tuples( + [("shock_sds", 0, "skills", "-")], + names=["category", "period", "name1", "name2"], + ), + ), + loglikelihood=-1.0, + success=True, + optimize_result=None, + ) + group = pd.MultiIndex.from_tuples( + [ + ("shock_sds", 0, "skills", "-"), + ("shock_sds", 1, "skills", "-"), + ("shock_sds", 2, "skills", "-"), + ], + names=["category", "period", "name1", "name2"], + ) + fixed_params = _propagate_equality_groups( + period_results=[period_0], + fixed_params=None, + equality_groups=[group], + ) + assert fixed_params is not None + assert ("shock_sds", 1, "skills", "-") in fixed_params.index + assert ("shock_sds", 2, "skills", "-") in fixed_params.index + assert fixed_params.loc[("shock_sds", 1, "skills", "-"), "value"] == 0.42 + assert fixed_params.loc[("shock_sds", 2, "skills", "-"), "value"] == 0.42 + + +def test_propagate_equality_groups_respects_existing_pins() -> None: + period_0 = AFPeriodResult( + period=0, + params=pd.DataFrame( + {"value": [0.42]}, + index=pd.MultiIndex.from_tuples( + [("shock_sds", 0, "skills", "-")], + names=["category", "period", "name1", "name2"], + ), + ), + loglikelihood=-1.0, + success=True, + optimize_result=None, + ) + fixed_params_initial = pd.DataFrame( + {"value": [0.99]}, + index=pd.MultiIndex.from_tuples( + [("shock_sds", 1, "skills", "-")], + names=["category", "period", "name1", "name2"], + ), + ) + group = pd.MultiIndex.from_tuples( + [("shock_sds", 0, "skills", "-"), ("shock_sds", 1, "skills", "-")], + names=["category", "period", "name1", "name2"], + ) + out = _propagate_equality_groups( + period_results=[period_0], + fixed_params=fixed_params_initial, + equality_groups=[group], + ) + assert out is not None + assert out.loc[("shock_sds", 1, "skills", "-"), "value"] == 0.99 + + +def _build_t3_model() -> ModelSpec: + return ModelSpec( + factors={ + "state": FactorSpec( + measurements=(("y1", "y2", "y3"),) * 3, + normalizations=Normalizations( + loadings=({"y1": 1},) * 3, + intercepts=({"y1": 0},) * 3, + ), + transition_function="linear", + ), + }, + ) + + +def _truth_params(model: ModelSpec) -> pd.DataFrame: + processed = process_model(model) + p_index = get_params_index( + update_info=processed.update_info, + labels=processed.labels, + dimensions=processed.dimensions, + transition_info=processed.transition_info, + endogenous_factors_info=processed.endogenous_factors_info, + ) + df = pd.DataFrame({"value": np.zeros(len(p_index))}, index=p_index) + cat = df.index.get_level_values("category") + df.loc[cat == "loadings", "value"] = 1.0 + df.loc[cat == "meas_sds", "value"] = 0.3 + df.loc[cat == "shock_sds", "value"] = 0.4 + df.loc[cat == "mixture_weights", "value"] = 1.0 + for aug in range(2): + df.loc[("transition", aug, "state", "state"), "value"] = 0.8 + df.loc[("transition", aug, "state", "constant"), "value"] = 0.0 + diag_mask = pd.Series( + [ + idx[0] == "initial_cholcovs" + and "-" in idx[3] + and idx[3].split("-")[0] == idx[3].split("-")[1] + for idx in df.index + ], + index=df.index, + ) + df.loc[diag_mask, "value"] = 1.0 + return df + + +def _simulate_t3( + model: ModelSpec, params: pd.DataFrame, n_obs: int, seed: int +) -> pd.DataFrame: + rng = np.random.default_rng(seed) + states: list[np.ndarray] = [rng.normal(0.0, 1.0, size=n_obs)] + + def _val(loc: tuple) -> float: + return float(params.loc[loc, "value"]) + + for t in range(1, 3): + a = _val(("transition", t - 1, "state", "state")) + c = _val(("transition", t - 1, "state", "constant")) + sigma = _val(("shock_sds", t - 1, "state", "-")) + states.append(a * states[-1] + c + sigma * rng.normal(size=n_obs)) + rows: list[dict] = [] + for obs_id in range(n_obs): + for t in range(3): + row: dict[str, float | int] = {"caseid": obs_id, "period": t} + for k in (1, 2, 3): + meas = f"y{k}" + lam = _val(("loadings", t, meas, "state")) + eps = _val(("meas_sds", t, meas, "-")) + row[meas] = lam * states[t][obs_id] + eps * rng.normal() + rows.append(row) + return pd.DataFrame.from_records(rows).set_index(["caseid", "period"]) + + +@pytest.mark.end_to_end +def test_estimate_af_enforces_equality_across_periods() -> None: + """Pinning shock_sds equal across periods makes the chain return one value.""" + model = _build_t3_model() + params = _truth_params(model) + data = _simulate_t3(model, params, n_obs=300, seed=20260510) + + af_options = AFEstimationOptions( + n_halton_points=20, + n_halton_points_shock=10, + optimizer_algorithm="scipy_lbfgsb", + ) + + eq_loc = pd.MultiIndex.from_tuples( + [ + ("shock_sds", 0, "state", "-"), + ("shock_sds", 1, "state", "-"), + ], + names=["category", "period", "name1", "name2"], + ) + constraints: list[om.constraints.Constraint] = [_equality_constraint(eq_loc)] + + result = estimate_af( + model_spec=model, + data=data, + options=af_options, + constraints=constraints, + ) + + def _val(period_idx: int, loc: tuple) -> float: + return float(result.period_results[period_idx].params.loc[loc, "value"]) + + period1_sd = _val(1, ("shock_sds", 0, "state", "-")) + period2_sd = _val(2, ("shock_sds", 1, "state", "-")) + assert period1_sd == pytest.approx(period2_sd, rel=1e-9) diff --git a/tests/test_af_estimate.py b/tests/test_af_estimate.py new file mode 100644 index 00000000..3f2be261 --- /dev/null +++ b/tests/test_af_estimate.py @@ -0,0 +1,2443 @@ +"""End-to-end tests for the AF estimator. + +Run AF estimation on MODEL2 test data and verify it produces reasonable +results, comparing to the CHS Kalman filter estimates where applicable. +""" + +from collections.abc import Callable +from pathlib import Path + +import jax +import jax.numpy as jnp +import numpy as np +import optimagic as om +import pandas as pd +import pytest + +from skillmodels.af import AFEstimationOptions, estimate_af +from skillmodels.af.likelihood import ( + _rebuild_chain_at_period, + af_loglike_transition, + af_per_obs_loglike_initial, +) +from skillmodels.af.transition_period import _update_conditional_distribution +from skillmodels.af.types import ChainLink, ConditionalDistribution, MixtureComponent +from skillmodels.chs.maximization_inputs import get_maximization_inputs +from skillmodels.common.config import TEST_DATA_DIR +from skillmodels.common.decorators import register_params +from skillmodels.common.individual_states import get_individual_states +from skillmodels.common.model_spec import ( + FactorSpec, + ModelSpec, + Normalizations, +) +from skillmodels.test_data.model2 import MODEL2_CHS_OPTIONS + +jax.config.update("jax_enable_x64", True) + +REGRESSION_VAULT = Path(__file__).parent / "regression_vault" + + +@pytest.fixture +def model2_data(): + """Load the MODEL2 simulated dataset.""" + data = pd.read_stata(TEST_DATA_DIR / "model2_simulated_data.dta") + return data.set_index(["caseid", "period"]) + + +@pytest.fixture +def model2_af(): + """Create an AF-compatible 2-factor model from MODEL2. + + Use fac1 (log_ces, 3 measures) and fac2 (linear, 3 measures). + Drop fac3 since it has measurements only in period 0. + Reduce to 3 periods for faster testing. + """ + return ModelSpec( + factors={ + "fac1": FactorSpec( + measurements=(("y1", "y2", "y3"),) * 3, + normalizations=Normalizations( + loadings=({"y1": 1},) * 3, + intercepts=({"y1": 0},) * 3, + ), + transition_function="log_ces", + ), + "fac2": FactorSpec( + measurements=(("y4", "y5", "y6"),) * 3, + normalizations=Normalizations( + loadings=({"y4": 1},) * 3, + intercepts=({"y4": 0},) * 3, + ), + transition_function="linear", + ), + }, + controls=("x1",), + ) + + +@pytest.fixture +def chs_params(): + """Load CHS-estimated parameters from regression vault.""" + params = pd.read_csv(REGRESSION_VAULT / "one_stage_anchoring.csv") + return params.set_index(["category", "period", "name1", "name2"]) + + +@pytest.mark.end_to_end +def test_af_estimate_runs_on_model2(model2_af, model2_data) -> None: + """Verify AF estimation runs to completion on MODEL2 data.""" + af_options = AFEstimationOptions( + n_halton_points=20, + n_halton_points_shock=10, + optimizer_algorithm="scipy_lbfgsb", + ) + + result = estimate_af( + model_spec=model2_af, + data=model2_data, + options=af_options, + ) + + # Basic checks + assert len(result.period_results) == 3 + assert result.params is not None + assert len(result.params) > 0 + + # Check each period converged (or at least produced finite likelihood) + for pr in result.period_results: + assert np.isfinite(pr.loglikelihood), ( + f"Period {pr.period}: non-finite log-likelihood {pr.loglikelihood}" + ) + + +@pytest.mark.end_to_end +def test_af_measurement_params_in_ballpark( + model2_af, + model2_data, + chs_params, +) -> None: + """Verify AF measurement parameter estimates are in the same ballpark as CHS. + + The two estimators use different methods, so exact agreement is not + expected. But measurement loadings and SDs should be roughly similar. + """ + af_options = AFEstimationOptions( + n_halton_points=30, + n_halton_points_shock=15, + optimizer_algorithm="scipy_lbfgsb", + ) + + result = estimate_af( + model_spec=model2_af, + data=model2_data, + options=af_options, + ) + + # Compare period 0 measurement SDs + af_meas_sds = result.params.query("category == 'meas_sds' and period == 0") + if len(af_meas_sds) > 0: + af_sd_values = af_meas_sds["value"].to_numpy() + # All SDs should be positive and not too extreme + assert (af_sd_values > 0).all(), "All measurement SDs should be positive" + assert (af_sd_values < 10).all(), ( + "Measurement SDs should not be unreasonably large" + ) + + +@pytest.mark.end_to_end +def test_af_estimate_single_factor() -> None: + """Test AF estimation with a single-factor model (simplest case).""" + # Create minimal model: 1 factor, 3 measures, 2 periods + model = ModelSpec( + factors={ + "skill": FactorSpec( + measurements=(("m1", "m2", "m3"),) * 2, + normalizations=Normalizations( + loadings=({"m1": 1},) * 2, + intercepts=({"m1": 0},) * 2, + ), + transition_function="linear", + ), + }, + ) + + # Generate simple synthetic data + rng = np.random.default_rng(42) + n_obs = 200 + n_periods = 2 + + # True latent factor + theta = rng.normal(0, 1, n_obs) + + rows = [] + for i in range(n_obs): + for t in range(n_periods): + row = { + "caseid": i, + "period": t, + "m1": theta[i] + rng.normal(0, 0.3), + "m2": 0.5 + 0.8 * theta[i] + rng.normal(0, 0.4), + "m3": -0.2 + 1.2 * theta[i] + rng.normal(0, 0.35), + } + rows.append(row) + + data = pd.DataFrame(rows).set_index(["caseid", "period"]) + + af_options = AFEstimationOptions( + n_halton_points=25, + n_halton_points_shock=10, + optimizer_algorithm="scipy_lbfgsb", + ) + + result = estimate_af(model_spec=model, data=data, options=af_options) + + assert len(result.period_results) == 2 + assert np.isfinite(result.period_results[0].loglikelihood) + + # Check that estimated loadings are roughly in the right direction + af_loadings = result.params.query("category == 'loadings' and period == 0") + if len(af_loadings) > 0: + # m1 loading on skill should be fixed at 1.0 + # m2 loading should be roughly 0.8 + # m3 loading should be roughly 1.2 + for _, row in af_loadings.iterrows(): + assert np.isfinite(row["value"]), "Loadings should be finite" + + +@pytest.mark.end_to_end +def test_af_vs_chs_measurement_params_agree() -> None: + """Verify AF and CHS produce similar measurement parameter estimates. + + Simulate data from a known single-factor model and estimate with both + AF and CHS. Period-0 measurement loadings, intercepts, and error SDs + should agree within tolerance. + """ + rng = np.random.default_rng(42) + n_obs = 500 + n_periods = 2 + + # True DGP parameters + true_loadings = {"m1": 1.0, "m2": 0.8, "m3": 1.2} + true_intercepts = {"m1": 0.0, "m2": 0.5, "m3": -0.2} + true_meas_sds = {"m1": 0.3, "m2": 0.4, "m3": 0.35} + + theta = rng.normal(0, 1, n_obs) + rows = [] + for i in range(n_obs): + for t in range(n_periods): + rows.append( + { + "caseid": i, + "period": t, + "m1": true_intercepts["m1"] + + true_loadings["m1"] * theta[i] + + rng.normal(0, true_meas_sds["m1"]), + "m2": true_intercepts["m2"] + + true_loadings["m2"] * theta[i] + + rng.normal(0, true_meas_sds["m2"]), + "m3": true_intercepts["m3"] + + true_loadings["m3"] * theta[i] + + rng.normal(0, true_meas_sds["m3"]), + } + ) + data = pd.DataFrame(rows).set_index(["caseid", "period"]) + + model = ModelSpec( + factors={ + "skill": FactorSpec( + measurements=(("m1", "m2", "m3"),) * n_periods, + normalizations=Normalizations( + loadings=({"m1": 1},) * n_periods, + intercepts=({"m1": 0},) * n_periods, + ), + transition_function="linear", + ), + }, + ) + + # --- AF estimation --- + af_result = estimate_af( + model_spec=model, + data=data, + options=AFEstimationOptions( + n_halton_points=50, + n_halton_points_shock=20, + optimizer_algorithm="scipy_lbfgsb", + ), + ) + af_p0 = af_result.period_results[0].params + + # --- CHS estimation (naive start: all free params = 0.1) --- + chs_est = _run_chs_estimation(model, data) + + # --- Compare period-0 measurement parameters --- + tol = 0.15 # generous tolerance for finite-sample differences + + for meas in ("m2", "m3"): + af_load = float( + af_p0.loc[("loadings", 0, meas, "skill"), "value"] # ty: ignore[invalid-argument-type] + ) + chs_load = float( + chs_est.loc[("loadings", 0, meas, "skill"), "value"] # ty: ignore[invalid-argument-type] + ) + assert abs(af_load - chs_load) < tol, ( + f"loading({meas}): AF={af_load:.4f} vs CHS={chs_load:.4f}" + ) + + af_intercept = float( + af_p0.loc[("controls", 0, meas, "constant"), "value"] # ty: ignore[invalid-argument-type] + ) + chs_intercept = float( + chs_est.loc[("controls", 0, meas, "constant"), "value"] # ty: ignore[invalid-argument-type] + ) + assert abs(af_intercept - chs_intercept) < tol, ( + f"intercept({meas}): AF={af_intercept:.4f} vs CHS={chs_intercept:.4f}" + ) + + for meas in ("m1", "m2", "m3"): + af_sd = float( + af_p0.loc[("meas_sds", 0, meas, "-"), "value"] # ty: ignore[invalid-argument-type] + ) + chs_sd = float( + chs_est.loc[("meas_sds", 0, meas, "-"), "value"] # ty: ignore[invalid-argument-type] + ) + assert abs(af_sd - chs_sd) < tol, ( + f"meas_sd({meas}): AF={af_sd:.4f} vs CHS={chs_sd:.4f}" + ) + + +# --------------------------------------------------------------------------- +# TDD tests for transition likelihood and parameter recovery +# --------------------------------------------------------------------------- + + +def _simulate_linear_transition_data( + *, + n_obs: int = 500, + n_periods: int = 3, + true_beta: float = 0.8, + true_constant: float = 0.1, + true_shock_sd: float = 0.3, + true_meas_sds: tuple[float, ...] = (0.3, 0.4, 0.35), + true_loadings: tuple[float, ...] = (1.0, 0.8, 1.2), + true_intercepts: tuple[float, ...] = (0.0, 0.5, -0.2), + seed: int = 42, +) -> tuple[pd.DataFrame, dict[str, float]]: + """Simulate panel data from a single-factor linear transition model. + + DGP: theta_{t+1} = constant + beta * theta_t + N(0, shock_sd^2). + Measurements: Z_{t,m} = intercept_m + loading_m * theta_t + noise. + + Return tuple of (DataFrame indexed by (caseid, period), dict of true params). + """ + rng = np.random.default_rng(seed) + theta = np.zeros((n_obs, n_periods)) + theta[:, 0] = rng.normal(0, 1, n_obs) + for t in range(n_periods - 1): + theta[:, t + 1] = ( + true_constant + + true_beta * theta[:, t] + + rng.normal(0, true_shock_sd, n_obs) + ) + + rows = [] + for i in range(n_obs): + for t in range(n_periods): + row = {"caseid": i, "period": t} + for m_idx, meas_name in enumerate(("m1", "m2", "m3")): + row[meas_name] = ( + true_intercepts[m_idx] + + true_loadings[m_idx] * theta[i, t] + + rng.normal(0, true_meas_sds[m_idx]) + ) + rows.append(row) + + data = pd.DataFrame(rows).set_index(["caseid", "period"]) + true_params = { + "beta": true_beta, + "constant": true_constant, + "shock_sd": true_shock_sd, + } + return data, true_params + + +def _make_linear_transition_model(n_periods: int = 3) -> ModelSpec: + """Create a single-factor linear transition model for testing.""" + return ModelSpec( + factors={ + "skill": FactorSpec( + measurements=(("m1", "m2", "m3"),) * n_periods, + normalizations=Normalizations( + loadings=({"m1": 1},) * n_periods, + intercepts=({"m1": 0},) * n_periods, + ), + transition_function="linear", + ), + }, + ) + + +@pytest.mark.end_to_end +def test_af_transition_params_affect_likelihood() -> None: + """Verify that the transition likelihood depends on transition parameters. + + If we run AF estimation with the transition function wired in correctly, + the estimated transition parameters should NOT be at their initial values. + The likelihood should be sensitive to transition parameter changes. + """ + data, _true_params = _simulate_linear_transition_data(n_obs=300, n_periods=3) + model = _make_linear_transition_model(n_periods=3) + + af_opts = AFEstimationOptions( + n_halton_points=30, + n_halton_points_shock=15, + optimizer_algorithm="scipy_lbfgsb", + ) + result = estimate_af(model_spec=model, data=data, options=af_opts) + + # Period 1 result should have transition params + p1 = result.period_results[1].params + trans_params = p1.query("category == 'transition'") + assert len(trans_params) > 0, "Should have transition parameters in period 1" + + # The transition params should NOT all be at their initialization value (0.1). + # If the transition function is actually used in the likelihood, the optimizer + # will move them away from 0.5 toward the true values. + trans_values = trans_params["value"].to_numpy() + init_values = np.full_like(trans_values, 0.5) + assert not np.allclose(trans_values, init_values, atol=0.01), ( + f"Transition params stuck at init values: {trans_values}. " + "The transition function is not being used in the likelihood." + ) + + +@pytest.mark.end_to_end +def test_af_recovers_linear_transition_params() -> None: + """Verify AF recovers known linear transition parameters from synthetic data. + + Simulate data with theta_{t+1} = 0.1 + 0.8 * theta_t + N(0, 0.3^2), + estimate with AF, and check that estimated beta and constant are close + to true values. + """ + data, true_params = _simulate_linear_transition_data(n_obs=500, n_periods=3) + model = _make_linear_transition_model(n_periods=3) + + af_opts = AFEstimationOptions( + n_halton_points=800, + n_halton_points_shock=20, + optimizer_algorithm="scipy_lbfgsb", + ) + result = estimate_af(model_spec=model, data=data, options=af_opts) + + # Extract estimated transition params from period 1 (transition 0->1) + p1 = result.period_results[1].params + + # For a linear transition with 1 factor "skill", params are: + # ("transition", 0, "skill", "skill") = beta + # ("transition", 0, "skill", "constant") = constant + est_beta = float( + p1.loc[("transition", 0, "skill", "skill"), "value"] # ty: ignore[invalid-argument-type] + ) + est_constant = float( + p1.loc[("transition", 0, "skill", "constant"), "value"] # ty: ignore[invalid-argument-type] + ) + + # Also check shock SD + est_shock_sd = float( + p1.loc[("shock_sds", 0, "skill", "-"), "value"] # ty: ignore[invalid-argument-type] + ) + + tol = 0.25 # generous tolerance for quadrature-based estimation + assert abs(est_beta - true_params["beta"]) < tol, ( + f"beta: estimated={est_beta:.4f}, true={true_params['beta']}" + ) + assert abs(est_constant - true_params["constant"]) < tol, ( + f"constant: estimated={est_constant:.4f}, true={true_params['constant']}" + ) + assert abs(est_shock_sd - true_params["shock_sd"]) < tol, ( + f"shock_sd: estimated={est_shock_sd:.4f}, true={true_params['shock_sd']}" + ) + + +@pytest.mark.end_to_end +def test_af_vs_chs_transition_params_agree() -> None: + """Verify AF and CHS transition parameter estimates are in the same ballpark. + + Use the same synthetic DGP as the measurement params comparison test, + but now compare the transition parameters estimated by both methods. + """ + data, _true_params = _simulate_linear_transition_data(n_obs=500, n_periods=3) + model = _make_linear_transition_model(n_periods=3) + + # --- AF estimation --- + af_result = estimate_af( + model_spec=model, + data=data, + options=AFEstimationOptions( + n_halton_points=40, + n_halton_points_shock=20, + optimizer_algorithm="scipy_lbfgsb", + ), + ) + + # --- CHS estimation (naive start: all free params = 0.1) --- + chs_est = _run_chs_estimation(model, data) + + # --- Compare transition parameters --- + af_p1 = af_result.period_results[1].params + + af_beta = float( + af_p1.loc[("transition", 0, "skill", "skill"), "value"] # ty: ignore[invalid-argument-type] + ) + af_constant = float( + af_p1.loc[("transition", 0, "skill", "constant"), "value"] # ty: ignore[invalid-argument-type] + ) + af_shock = float( + af_p1.loc[("shock_sds", 0, "skill", "-"), "value"] # ty: ignore[invalid-argument-type] + ) + + chs_beta = float( + chs_est.loc[("transition", 0, "skill", "skill"), "value"] # ty: ignore[invalid-argument-type] + ) + chs_constant = float( + chs_est.loc[("transition", 0, "skill", "constant"), "value"] # ty: ignore[invalid-argument-type] + ) + chs_shock = float( + chs_est.loc[("shock_sds", 0, "skill", "-"), "value"] # ty: ignore[invalid-argument-type] + ) + + tol = 0.3 # generous: different methods, different # periods used + assert abs(af_beta - chs_beta) < tol, ( + f"beta: AF={af_beta:.4f} vs CHS={chs_beta:.4f}" + ) + assert abs(af_constant - chs_constant) < tol, ( + f"constant: AF={af_constant:.4f} vs CHS={chs_constant:.4f}" + ) + assert abs(af_shock - chs_shock) < tol, ( + f"shock_sd: AF={af_shock:.4f} vs CHS={chs_shock:.4f}" + ) + + +def _run_chs_estimation( + model: ModelSpec, + data: pd.DataFrame, +) -> pd.DataFrame: + """Run CHS estimation with uninformed but feasible start values. + + Use generic defaults that don't favour either estimator: loadings = 1, + controls = 0, SDs = 0.5, transition = 0.5, initial_states = 0. + Probability constraints are satisfied (equal shares). + """ + max_inputs = get_maximization_inputs(model, data, chs_options=MODEL2_CHS_OPTIONS) + params = max_inputs["params_template"].copy() + free = params["lower_bound"] != params["upper_bound"] + cat = params.index.get_level_values("category") + params.loc[free, "value"] = 0.5 + params.loc[free & (cat == "loadings"), "value"] = 1.0 + params.loc[free & (cat == "controls"), "value"] = 0.0 + params.loc[free & (cat == "initial_states"), "value"] = 0.0 + # Probability constraints must be satisfied at start params + for constr in max_inputs["constraints"]: + if isinstance(constr, om.ProbabilityConstraint): + prob_idx = constr.selector(params[["value"]]).index + params.loc[prob_idx, "value"] = 1.0 / len(prob_idx) + + def _neg_ll_and_grad(p: pd.DataFrame) -> tuple[float, np.ndarray]: + val, grad = max_inputs["loglike_and_gradient"](p) + return -float(val), -np.array(grad) + + return om.minimize( + fun=lambda p: -max_inputs["loglike"](p), + params=params[["value"]], + algorithm="scipy_lbfgsb", + bounds=om.Bounds(lower=params["lower_bound"], upper=params["upper_bound"]), + constraints=max_inputs["constraints"], + fun_and_jac=_neg_ll_and_grad, + ).params + + +@pytest.mark.long_running +def test_af_vs_chs_both_estimated_on_model2(model2_af, model2_data) -> None: + """Run both AF and CHS optimisation on MODEL2 data and compare estimates. + + This test actually optimises both estimators (not just loading stored + params), so it takes a while. Skipped in CI via the long_running marker. + """ + chs_est = _run_chs_estimation(model2_af, model2_data) + + # --- AF estimation --- + af_result = estimate_af( + model_spec=model2_af, + data=model2_data, + options=AFEstimationOptions( + n_halton_points=60, + n_halton_points_shock=30, + optimizer_algorithm="scipy_lbfgsb", + ), + ) + + # --- Compare period-0 measurement params --- + af_p0 = af_result.period_results[0].params + meas_tol = 0.5 # generous: different estimators, AF uses 3 periods + + for meas, fac in [("y2", "fac1"), ("y3", "fac1"), ("y5", "fac2"), ("y6", "fac2")]: + af_val = float( + af_p0.loc[("loadings", 0, meas, fac), "value"] # ty: ignore[invalid-argument-type] + ) + chs_val = float( + chs_est.loc[("loadings", 0, meas, fac), "value"] # ty: ignore[invalid-argument-type] + ) + assert np.isfinite(af_val), f"AF loading({meas},{fac}) not finite" + assert np.isfinite(chs_val), f"CHS loading({meas},{fac}) not finite" + assert abs(af_val - chs_val) < meas_tol, ( + f"loading({meas},{fac}): AF={af_val:.4f} vs CHS={chs_val:.4f}" + ) + + # --- Compare transition params (period 0->1) --- + af_p1 = af_result.period_results[1].params + trans_tol = 0.5 + + # fac2 linear: self-productivity + af_fac2_self = float( + af_p1.loc[("transition", 0, "fac2", "fac2"), "value"] # ty: ignore[invalid-argument-type] + ) + chs_fac2_self = float( + chs_est.loc[("transition", 0, "fac2", "fac2"), "value"] # ty: ignore[invalid-argument-type] + ) + assert abs(af_fac2_self - chs_fac2_self) < trans_tol, ( + f"fac2 self-prod: AF={af_fac2_self:.4f} vs CHS={chs_fac2_self:.4f}" + ) + + # All transition params should be finite + af_trans = af_p1.query("category == 'transition'") + assert af_trans["value"].apply(np.isfinite).all(), ( + f"Non-finite AF transition params:\n{af_trans}" + ) + + # AF transition params should NOT be stuck at initialisation + trans_values = af_trans["value"].to_numpy() + assert not np.allclose(trans_values, 0.5, atol=0.01), ( + "AF transition params stuck at init values" + ) + + # --- Print comparison for manual inspection --- + print("\n\nMODEL2: AF vs CHS (both estimated)") + print("=" * 70) + print(f"{'Parameter':40s} {'AF':>10s} {'CHS':>10s}") + print("-" * 70) + for idx, row in af_trans.iterrows(): + ix = tuple(idx) # ty: ignore[invalid-argument-type] + chs_loc = ("transition", ix[1], ix[2], ix[3]) + chs_v = ( + float(chs_est.loc[chs_loc, "value"]) + if chs_loc in chs_est.index + else float("nan") + ) + print( + f" trans {ix[2]:6s} {ix[3]:12s} {row['value']:10.4f} {chs_v:10.4f}" + ) + af_shocks = af_p1.query("category == 'shock_sds'") + for idx, row in af_shocks.iterrows(): + ix = tuple(idx) # ty: ignore[invalid-argument-type] + chs_loc = ("shock_sds", ix[1], ix[2], ix[3]) + chs_v = ( + float(chs_est.loc[chs_loc, "value"]) + if chs_loc in chs_est.index + else float("nan") + ) + print(f" shock {ix[2]:19s} {row['value']:10.4f} {chs_v:10.4f}") + print("-" * 70) + + +# --------------------------------------------------------------------------- +# Investment equation tests +# --------------------------------------------------------------------------- + + +@pytest.mark.end_to_end +def test_af_estimate_with_endogenous_factor() -> None: + """Verify AF estimation works with an endogenous (investment) factor. + + DGP: + theta_{t+1} = 0.6 * theta_t + 0.3 * I_t + 0.05 + eta + (log_ces-like, but linear for simplicity) + I_t = 0.5 * theta_t + 0.2 * Y_t + eps_I + Skill measures: Z^s_{t,m} = intercept + loading * theta_t + noise + Investment measures: Z^I_{t,m} = intercept + loading * I_t + noise + """ + rng = np.random.default_rng(123) + n_obs, n_periods = 400, 3 + + # True parameters + true_beta_skill = 0.6 # theta on theta + true_beta_inv = 0.3 # investment on theta_next + true_trans_constant = 0.05 + true_shock_sd = 0.3 + true_inv_beta0 = 0.0 # investment intercept + true_inv_beta_theta = 0.5 # investment depends on skill + true_inv_beta_y = 0.2 # investment depends on income + true_inv_sd = 0.25 + + # Simulate + theta = np.zeros((n_obs, n_periods)) + inv = np.zeros((n_obs, n_periods)) + income = rng.normal(1.0, 0.5, n_obs) # exogenous, time-invariant + theta[:, 0] = rng.normal(0, 1, n_obs) + inv[:, 0] = ( + true_inv_beta0 + + true_inv_beta_theta * theta[:, 0] + + true_inv_beta_y * income + + rng.normal(0, true_inv_sd, n_obs) + ) + for t in range(n_periods - 1): + theta[:, t + 1] = ( + true_trans_constant + + true_beta_skill * theta[:, t] + + true_beta_inv * inv[:, t] + + rng.normal(0, true_shock_sd, n_obs) + ) + if t + 1 < n_periods: + inv[:, t + 1] = ( + true_inv_beta0 + + true_inv_beta_theta * theta[:, t + 1] + + true_inv_beta_y * income + + rng.normal(0, true_inv_sd, n_obs) + ) + + rows = [] + for i in range(n_obs): + for t in range(n_periods): + rows.append( + { + "caseid": i, + "period": t, + # Skill measures + "s1": theta[i, t] + rng.normal(0, 0.3), + "s2": 0.3 + 0.8 * theta[i, t] + rng.normal(0, 0.35), + "s3": -0.1 + 1.1 * theta[i, t] + rng.normal(0, 0.4), + # Investment measures + "i1": inv[i, t] + rng.normal(0, 0.3), + "i2": 0.2 + 0.9 * inv[i, t] + rng.normal(0, 0.35), + "i3": -0.1 + 1.2 * inv[i, t] + rng.normal(0, 0.4), + # Exogenous variable + "income": income[i], + } + ) + data = pd.DataFrame(rows).set_index(["caseid", "period"]) + + model = ModelSpec( + factors={ + "skill": FactorSpec( + measurements=(("s1", "s2", "s3"),) * n_periods, + normalizations=Normalizations( + loadings=({"s1": 1},) * n_periods, + intercepts=({"s1": 0},) * n_periods, + ), + transition_function="linear", + ), + "investment": FactorSpec( + measurements=(("i1", "i2", "i3"),) * n_periods, + normalizations=Normalizations( + loadings=({"i1": 1},) * n_periods, + intercepts=({"i1": 0},) * n_periods, + ), + transition_function="linear", + is_endogenous=True, + ), + }, + observed_factors=("income",), + ) + + result = estimate_af( + model_spec=model, + data=data, + options=AFEstimationOptions( + n_halton_points=30, + n_halton_points_shock=15, + optimizer_algorithm="scipy_lbfgsb", + ), + ) + + # Basic checks: estimation ran, produced results for all periods + assert len(result.period_results) == n_periods + for pr in result.period_results: + assert np.isfinite(pr.loglikelihood), ( + f"Period {pr.period}: non-finite loglik {pr.loglikelihood}" + ) + + # Period 1 should have investment equation parameters + p1 = result.period_results[1].params + inv_eq = p1.query("category == 'investment_eq'") + assert len(inv_eq) > 0, ( + "No investment_eq parameters found — endogenous factor not wired" + ) + + # Investment equation params should not be stuck at init + inv_eq_values = inv_eq["value"].to_numpy() + assert not np.allclose(inv_eq_values, 0.5, atol=0.05), ( + f"Investment eq params stuck at init: {inv_eq_values}" + ) + + +def test_prev_period_inv_meas_does_not_affect_transition_loglik_gradient() -> None: + """Guard inv-prev-meas invariance of the AF transition-step gradient. + + Inv-type measurements at the previous period must not contribute to + the gradient of `af_loglike_transition` w.r.t. current-step parameters. + MATLAB's reference AF likelihood (`AF_Application_One_Normal_Translog.m`, + `create_nodes_weights_12`) evaluates inv-type measurements exactly once, + at the step where the inv is generated as a current-period measurement. + They are deliberately omitted from the chained-sample importance weight + at the next transition step (`prod_inv` is commented out in the MATLAB + source). Re-evaluating them would be wrong: the chained sample carries + forward only state factors, so the previous step's inv value is no + longer available; evaluating prev-period inv measurements against the + *current* step's freshly-drawn inv would be a wrong-value comparison. + + The Python port restricts the prev-meas factor to state-factor + loadings only (using `state_factor_indices_in_latent` to slice the + columns). This test guards against future refactors that re-introduce + a parameter-dependent contribution from inv-loading rows at the + previous period: it perturbs only the inv-meas columns of + `prev_measurements` and asserts the gradient w.r.t. all current-step + parameters is unchanged. + """ + rng = np.random.default_rng(20260507) + n_obs = 5 + n_state = 1 + n_endog = 1 + n_obs_factors = 0 + n_measures = 2 # 1 skill + 1 inv at current period + n_prev_measures = 2 # 1 skill + 1 inv at prev period + n_controls = 1 # constant + n_halton = 3 + n_components = 1 + + # Loading masks: row 0 = skill meas (loads on factor 0=skills), row 1 = + # inv meas (loads on factor 1=investment). Both at current and prev. + loading_mask = jnp.array([[True, False], [False, True]]) + prev_loading_mask = jnp.array([[True, False], [False, True]]) + + measurements = jnp.array(rng.normal(size=(n_obs, n_measures))) + controls = jnp.ones((n_obs, n_controls)) + prev_measurements_a = jnp.array(rng.normal(size=(n_obs, n_prev_measures))) + # Perturb ONLY the inv-meas column (index 1) at the previous period. + inv_perturbation = jnp.array(rng.normal(size=n_obs)) + prev_measurements_b = prev_measurements_a.at[:, 1].set( # noqa: PD008 + prev_measurements_a[:, 1] + inv_perturbation + ) + prev_controls = jnp.ones((n_obs, n_controls)) + + # Prev-period measurement-system parameters (held fixed at the + # transition step in production -- they were estimated previously). + prev_loadings_flat = jnp.array([1.0, 1.0]) + prev_control_params = jnp.zeros((n_prev_measures, n_controls)) + prev_meas_sds = jnp.array([0.5, 0.4]) + + # Period-0 Schur-conditional payload: per-obs cond_means and per-component + # cond_chols (for the joint-Halton chain rebuild scheme). + cond_means = jnp.array(rng.normal(size=(n_components, n_obs, n_state))) + cond_chols = jnp.array([[[0.5]], [[0.4]]]) + cond_weights = jnp.ones((n_obs, n_components)) + prev_distribution = { + "cond_weights": cond_weights, + "cond_means": cond_means, + "cond_chols": cond_chols, + } + + # No prior chain (this is the 0->1 step). Joint Halton dim: + # n_state (z_state) + 0 prior steps + (n_shock + n_endog) current step. + chain_links: tuple = () + obs_factor_values_chain = jnp.zeros((n_obs, 0, n_obs_factors)) + joint_nodes = jnp.array(rng.normal(size=(n_halton, n_state + n_state + n_endog))) + joint_weights = jnp.full(n_halton, 1.0 / n_halton) + + def transition_func(full_states: jax.Array, params: jax.Array) -> jax.Array: + # Linear: theta_t = a * theta_prev + b * inv + c. Returns shape (n_state,). + return jnp.array( + [params[0] * full_states[0] + params[1] * full_states[1] + params[2]] + ) + + total_n_transition_params = 3 + n_inv_eq_params_per = 1 + n_state + n_obs_factors + total_n_inv_params = n_endog * n_inv_eq_params_per + + # Param vector layout matches `_parse_transition_params`: 3 transition + # params, 1 shock sd, 2 inv_eq params, 1 inv sd, 2 control params, 2 + # loadings, 2 meas sds = 13 entries total. + params_value = jnp.array( + [ + 0.6, + 0.3, + 0.1, + 0.4, + 0.0, + 0.5, + 0.2, + 0.0, + 0.0, + 1.0, + 1.0, + 0.3, + 0.3, + ] + ) + + state_factor_indices_in_latent = jnp.array([0], dtype=jnp.int32) + shock_factor_indices = jnp.array([0], dtype=jnp.int32) + obs_factor_values = jnp.zeros((n_obs, n_obs_factors)) + + def _ll(prev_meas: jax.Array, params: jax.Array) -> jax.Array: + return af_loglike_transition( + params, + n_state_factors=n_state, + n_endogenous_factors=n_endog, + n_measures=n_measures, + n_controls=n_controls, + measurements=measurements, + controls=controls, + loading_mask=loading_mask, + prev_measurements=prev_meas, + prev_controls=prev_controls, + prev_loading_mask=prev_loading_mask, + prev_control_params=prev_control_params, + prev_loadings_flat=prev_loadings_flat, + prev_meas_sds=prev_meas_sds, + prev_distribution=prev_distribution, + chain_links=chain_links, + obs_factor_values_chain=obs_factor_values_chain, + joint_nodes=joint_nodes, + joint_weights=joint_weights, + transition_func=transition_func, + total_n_transition_params=total_n_transition_params, + total_n_inv_params=total_n_inv_params, + n_inv_eq_params_per=n_inv_eq_params_per, + observed_factor_values=obs_factor_values, + stability_floor=1e-300, + state_factor_indices_in_latent=state_factor_indices_in_latent, + n_shock_factors=1, + shock_factor_indices=shock_factor_indices, + ) + + def loglike_a(params: jax.Array) -> jax.Array: + return _ll(prev_measurements_a, params) + + def loglike_b(params: jax.Array) -> jax.Array: + return _ll(prev_measurements_b, params) + + grad_a = jax.grad(loglike_a)(params_value) + grad_b = jax.grad(loglike_b)(params_value) + + np.testing.assert_allclose(np.asarray(grad_a), np.asarray(grad_b), atol=1e-10) + + # Sanity: with a non-zero perturbation, the inv-row residuals do change, + # so the loglik *value* itself differs (by a per-obs constant). That + # difference must NOT be zero -- otherwise the test isn't actually + # exercising the inv-loading rows. + val_a = float(loglike_a(params_value)) + val_b = float(loglike_b(params_value)) + assert not np.isclose(val_a, val_b), ( + "Test sanity failure: perturbing prev inv-meas changed nothing -- " + "the test isn't exercising the inv-loading rows." + ) + + +def test_rebuild_chain_at_period_matches_python_forward_pass() -> None: + """Unit test for `_rebuild_chain_at_period`. + + Hand-code a 2-step linear chain (1 state factor, 1 endog factor, 1 + observed factor) and assert the helper's output matches a Python + forward pass to numerical precision. Catches index/reshape bugs in + the chain-rebuild helper independently of the integrand. + """ + rng = np.random.default_rng(20260507) + n_state = 1 + n_endog = 1 + n_obs_factors = 1 + n_inv_eq_params_per = 1 + n_state + n_obs_factors + + # Two prior chain steps (so we're computing θ_0 → θ_1 → θ_2). + z_state = jnp.asarray(rng.normal(size=n_state)) + z_inv_per_step = jnp.asarray(rng.normal(size=(2, n_endog))) + z_shock_per_step = jnp.asarray(rng.normal(size=(2, n_state))) + + initial_mean = jnp.asarray(rng.normal(size=n_state)) + initial_chol = jnp.asarray([[0.7]]) + + obs_factor_values_per_step = jnp.asarray(rng.normal(size=(2, n_obs_factors))) + + # Linear "transition": theta_next = a * theta + b * inv + c * obs + d. + # Wrap as the f(full_states, params) signature used in production. + def make_transition_func() -> Callable[[jax.Array, jax.Array], jax.Array]: + def fn(full_states: jax.Array, params: jax.Array) -> jax.Array: + a, b, c, d = params[0], params[1], params[2], params[3] + return jnp.array( + [a * full_states[0] + b * full_states[1] + c * full_states[2] + d] + ) + + return fn + + transition_func = make_transition_func() + + link_1 = ChainLink( + period=1, + transition_func=transition_func, + transition_params=jnp.array([0.6, 0.3, 0.05, 0.1]), + shock_sds=jnp.array([0.4]), + shock_factor_indices=jnp.array([0], dtype=jnp.int32), + inv_eq_params=jnp.array([0.0, 0.5, 0.2]), # intercept, beta_skills, beta_inc + inv_sds=jnp.array([0.25]), + n_inv_eq_params_per=n_inv_eq_params_per, + obs_factor_values=jnp.zeros((1, n_obs_factors)), # unused by helper + ) + link_2 = ChainLink( + period=2, + transition_func=transition_func, + transition_params=jnp.array([0.5, 0.4, 0.0, 0.2]), + shock_sds=jnp.array([0.3]), + shock_factor_indices=jnp.array([0], dtype=jnp.int32), + inv_eq_params=jnp.array([0.05, 0.6, 0.3]), + inv_sds=jnp.array([0.15]), + n_inv_eq_params_per=n_inv_eq_params_per, + obs_factor_values=jnp.zeros((1, n_obs_factors)), + ) + chain_links = (link_1, link_2) + + # Hand-coded forward pass. + theta_0 = initial_mean + initial_chol @ z_state + for step_idx, link in enumerate(chain_links): + z_inv = z_inv_per_step[step_idx] + z_shock = z_shock_per_step[step_idx] + obs_y = obs_factor_values_per_step[step_idx] + beta = link.inv_eq_params # (intercept, beta_skills, beta_inc) + inv_val = ( + beta[0] + + beta[1] * theta_0[0] + + beta[2] * obs_y[0] + + (link.inv_sds[0] * z_inv[0]) + ) + inv = jnp.array([inv_val]) + full = jnp.concatenate([theta_0, inv, obs_y]) + theta_next_det = transition_func(full, link.transition_params) # ty: ignore[invalid-argument-type] + theta_0 = theta_next_det + jnp.array([link.shock_sds[0] * z_shock[0]]) + expected = theta_0 # θ at the last link's target period + + actual = _rebuild_chain_at_period( + z_state=z_state, + z_inv_per_step=z_inv_per_step, + z_shock_per_step=z_shock_per_step, + initial_mean=initial_mean, + initial_chol=initial_chol, + chain_links=chain_links, + obs_factor_values_at_obs_per_step=obs_factor_values_per_step, + n_state_factors=n_state, + n_endogenous_factors=n_endog, + ) + np.testing.assert_allclose(np.asarray(actual), np.asarray(expected), atol=1e-12) + + +def test_rebuild_chain_at_period_empty_chain_returns_period_0() -> None: + """Verify the empty-chain (0->1) path of `_rebuild_chain_at_period`. + + With no chain links, the helper just returns + ``initial_mean + initial_chol @ z_state``. + """ + rng = np.random.default_rng(7) + n_state = 2 + z_state = jnp.asarray(rng.normal(size=n_state)) + initial_mean = jnp.asarray(rng.normal(size=n_state)) + initial_chol = jnp.asarray([[0.5, 0.0], [0.1, 0.4]]) + expected = initial_mean + initial_chol @ z_state + + actual = _rebuild_chain_at_period( + z_state=z_state, + z_inv_per_step=jnp.zeros((0, 1)), + z_shock_per_step=jnp.zeros((0, n_state)), + initial_mean=initial_mean, + initial_chol=initial_chol, + chain_links=(), + obs_factor_values_at_obs_per_step=jnp.zeros((0, 0)), + n_state_factors=n_state, + n_endogenous_factors=1, + ) + np.testing.assert_allclose(np.asarray(actual), np.asarray(expected), atol=1e-14) + + +def test_af_joint_halton_recovers_sigma_prod_argmax() -> None: # noqa: PLR0915 + """Catch regression to split-Halton: sigma_prod recovery on synthetic translog. + + With all params except sigma_prod_0 pinned at the truth, the per-obs mean + log-likelihood at sigma_prod=truth must beat sigma_prod ≈ truth/4 by at least + 1.0 nat per obs. Under the buggy split-Halton scheme the argmax sat + near sigma ≈ truth/4 with truth being WORSE; under the joint-Halton fix + the argmax aligns with truth. The empirical joint-vs-split gap on + the MATLAB sim was ~2.5 nats per obs (see + ``sim_repro/debug_joint_halton.py`` and + ``obsidian/Professional/skillmodels/sigma-prod-collapse-2026-05-07.md``); + 1.0 nat is generous headroom that still flags any return to split. + + The test calls ``af_loglike_transition`` directly with hand-built + kwargs on a tiny synthetic translog DGP (1 state factor, 1 endog + factor, 1 observed factor), so it isolates the integrand from the + optimizer and runs in ~10s. + """ + rng = np.random.default_rng(20260508) + n_obs = 200 + n_halton = 500 + n_state = 1 + n_endog = 1 + n_obs_factors = 1 + n_inv_eq_params_per = 1 + n_state + n_obs_factors + + # MATLAB-translog truth values (from set_parameters in + # AF_Simulations_Translog.m), restricted to one state factor. + a_true = 0.9283 + sigma_t_true = 0.5125 # log(skills) coef in translog + gamma_t_true = 0.6113 # log(inv) coef + delta_t_true = -0.0175 # cross coef + sigma_p_true = 0.36 + sigma_i_true = 0.10 + beta_skills_true = 0.10 + beta_inc_true = 0.90 + + # Mixture truth (matches MATLAB sim): two components on (skills, log_inc). + p_a_true = 0.62 + mu_a = jnp.array([-4.0, -2.0]) # (skills, log_inc) + cov_a = jnp.array([[0.62, 0.035], [0.035, 0.056]]) + mu_b = jnp.array([6.0, 3.0]) + cov_b = jnp.array([[0.83, 0.17], [0.17, 1.28]]) + + # Period-0 measurement system (3 skill measures). + lam_skills_0 = jnp.array([1.0, 0.36, 0.56]) + sd_skills_0 = jnp.array([0.68, 0.03, 0.08]) + # Period-1 measurement system: 3 skill measures + 3 inv measures. + lam_skills_1 = jnp.array([1.0, 0.66, 1.18]) + sd_skills_1 = jnp.array([0.51, 0.12, 0.19]) + lam_inv_1 = jnp.array([1.0, 0.84, 0.79]) + sd_inv_1 = jnp.array([0.15, 0.39, 0.47]) + + # Forward simulation of one panel. + u = rng.uniform(size=n_obs) + is_a = (u < p_a_true).astype(np.float64) + + def _draw_2d(mu: jax.Array, cov: jax.Array, n: int) -> np.ndarray: + chol = np.linalg.cholesky(np.asarray(cov)) + z = rng.normal(size=(n, 2)) + return np.asarray(mu)[None, :] + z @ chol.T + + draw_a = _draw_2d(mu_a, cov_a, n_obs) + draw_b = _draw_2d(mu_b, cov_b, n_obs) + skills_0 = is_a * draw_a[:, 0] + (1 - is_a) * draw_b[:, 0] + log_inc = is_a * draw_a[:, 1] + (1 - is_a) * draw_b[:, 1] + + # Period-0 data: z_skills_0 = lam * skills_0 + meas_noise. + z_skills_0 = ( + np.asarray(lam_skills_0)[None, :] * skills_0[:, None] + + rng.normal(size=(n_obs, 3)) * np.asarray(sd_skills_0)[None, :] + ) + + # Period-0->1 transition: inv_0 = beta_sk*skills_0 + beta_inc*log_inc + sd_I*z. + inv_0_true = ( + beta_skills_true * skills_0 + + beta_inc_true * log_inc + + rng.normal(size=n_obs) * sigma_i_true + ) + skills_1 = ( + a_true + + sigma_t_true * skills_0 + + gamma_t_true * inv_0_true + + delta_t_true * skills_0 * inv_0_true + + rng.normal(size=n_obs) * sigma_p_true + ) + z_skills_1 = ( + np.asarray(lam_skills_1)[None, :] * skills_1[:, None] + + rng.normal(size=(n_obs, 3)) * np.asarray(sd_skills_1)[None, :] + ) + z_inv_1 = ( + np.asarray(lam_inv_1)[None, :] * inv_0_true[:, None] + + rng.normal(size=(n_obs, 3)) * np.asarray(sd_inv_1)[None, :] + ) + + # Period-0 cond-distribution payload (Schur conditional given log_inc). + def _schur(mu_2d: jax.Array, cov_2d: jax.Array) -> tuple[jax.Array, jax.Array]: + # skills given log_inc: cond_mean (per obs) and cond_chol (scalar). + sigma_skills_inc = cov_2d[0, 1] + var_inc = cov_2d[1, 1] + var_cond = cov_2d[0, 0] - sigma_skills_inc**2 / var_inc + cond_chol = jnp.sqrt(var_cond) + cond_means = mu_2d[0] + (sigma_skills_inc / var_inc) * ( + jnp.asarray(log_inc) - mu_2d[1] + ) + return cond_means.reshape(n_obs, 1), jnp.asarray([[cond_chol]]) + + cond_mean_a, cond_chol_a = _schur(mu_a, cov_a) + cond_mean_b, cond_chol_b = _schur(mu_b, cov_b) + cond_means = jnp.stack([cond_mean_a, cond_mean_b], axis=0) + cond_chols = jnp.stack([cond_chol_a, cond_chol_b], axis=0) + + # Per-obs Bayes posterior weights from the marginal Y density. + def _log_marg_y(mu: jax.Array, cov: jax.Array) -> jax.Array: + var_y = cov[1, 1] + return ( + -0.5 * jnp.log(2 * jnp.pi * var_y) + - 0.5 * (jnp.asarray(log_inc) - mu[1]) ** 2 / var_y + ) + + log_w_a = jnp.log(p_a_true) + _log_marg_y(mu_a, cov_a) + log_w_b = jnp.log(1.0 - p_a_true) + _log_marg_y(mu_b, cov_b) + log_w = jnp.stack([log_w_a, log_w_b], axis=-1) + cond_weights = jax.nn.softmax(log_w, axis=-1) + + prev_distribution = { + "cond_weights": cond_weights, + "cond_means": cond_means, + "cond_chols": cond_chols, + } + + # Period-1 measurement loadings: 6 measures in order (skill_1, skill_2, + # skill_3, inv_1, inv_2, inv_3) -- skill measures load on factor 0 + # (skills), inv measures load on factor 1 (investment). + n_measures = 6 + measurements = jnp.concatenate( + [jnp.asarray(z_skills_1), jnp.asarray(z_inv_1)], axis=1 + ) + loading_mask = jnp.array( + [ + [True, False], + [True, False], + [True, False], + [False, True], + [False, True], + [False, True], + ] + ) + loadings_flat_curr = jnp.concatenate([lam_skills_1, lam_inv_1]) + meas_sds_curr = jnp.concatenate([sd_skills_1, sd_inv_1]) + + # Period-0 measurement system (prev) -- 3 skill measures. + n_prev_measures = 3 + prev_measurements = jnp.asarray(z_skills_0) + prev_loading_mask = jnp.array([[True, False]] * 3) + prev_loadings_flat = lam_skills_0 + prev_meas_sds = sd_skills_0 + + # No controls (zeros). + n_controls = 1 # constant + controls = jnp.ones((n_obs, 1)) + prev_controls = jnp.ones((n_obs, 1)) + + obs_factor_values = jnp.asarray(log_inc).reshape(n_obs, 1) + + # Transition function: log-translog (matches MATLAB sim). + def transition_func(full_states: jax.Array, params: jax.Array) -> jax.Array: + # full_states = [theta, inv, log_inc]; params = [lin_skills, lin_inv, + # lin_inc, sq_skills, sq_inv, sq_inc, inter_skills_inv, + # inter_skills_inc, inter_inv_inc, constant]. + skills = full_states[0] + inv = full_states[1] + return jnp.array( + [ + params[9] + + params[0] * skills + + params[1] * inv + + params[6] * skills * inv + ] + ) + + total_n_transition_params = 10 + n_per_inv = n_inv_eq_params_per + total_n_inv_params = n_endog * n_per_inv + + state_factor_indices_in_latent = jnp.array([0], dtype=jnp.int32) + shock_factor_indices = jnp.array([0], dtype=jnp.int32) + + # Param vector layout: transition (10) + shock_sds (1) + inv_eq (3) + + # inv_sds (1) + control_params (n_measures*n_controls=6) + loadings (6) + # + meas_sds (6) = 33. + transition_params_truth = jnp.array( + [ + sigma_t_true, + gamma_t_true, + 0.0, # lin coef on log_inc + 0.0, + 0.0, + 0.0, # squares + delta_t_true, # skills * inv + 0.0, + 0.0, # other interactions + a_true, + ] + ) + inv_eq_params_truth = jnp.array([0.0, beta_skills_true, beta_inc_true]) + + def _build_params(sigma_p: float) -> jax.Array: + return jnp.concatenate( + [ + transition_params_truth, + jnp.array([sigma_p]), + inv_eq_params_truth, + jnp.array([sigma_i_true]), + jnp.zeros(n_measures * n_controls), # control intercepts + loadings_flat_curr, + meas_sds_curr, + ] + ) + + def _ll(sigma_p: float) -> float: + params_value = _build_params(sigma_p) + neg_mean = af_loglike_transition( + params_value, + n_state_factors=n_state, + n_endogenous_factors=n_endog, + n_measures=n_measures, + n_controls=n_controls, + measurements=measurements, + controls=controls, + loading_mask=loading_mask, + prev_measurements=prev_measurements, + prev_controls=prev_controls, + prev_loading_mask=prev_loading_mask, + prev_control_params=jnp.zeros((n_prev_measures, n_controls)), + prev_loadings_flat=prev_loadings_flat, + prev_meas_sds=prev_meas_sds, + prev_distribution=prev_distribution, + chain_links=(), + obs_factor_values_chain=jnp.zeros((n_obs, 0, n_obs_factors)), + joint_nodes=jnp.array( + np.random.default_rng(1).normal( + size=(n_halton, n_state + n_state + n_endog) + ) + ), + joint_weights=jnp.full(n_halton, 1.0 / n_halton), + transition_func=transition_func, + total_n_transition_params=total_n_transition_params, + total_n_inv_params=total_n_inv_params, + n_inv_eq_params_per=n_per_inv, + observed_factor_values=obs_factor_values, + stability_floor=1e-300, + state_factor_indices_in_latent=state_factor_indices_in_latent, + n_shock_factors=1, + shock_factor_indices=shock_factor_indices, + ) + # Convert from neg-mean back to per-obs mean ll. + return float(-neg_mean) + + sigma_truth = sigma_p_true + sigma_wrong = 0.09 # well below truth (= truth / 4) + ll_truth = _ll(sigma_truth) + ll_wrong = _ll(sigma_wrong) + gap = ll_truth - ll_wrong + assert gap > 1.0, ( + f"Joint-Halton sigma_prod recovery REGRESSED: ll(truth={sigma_truth})=" + f"{ll_truth:.4f} should beat ll(wrong={sigma_wrong})={ll_wrong:.4f} by " + f"at least 1.0 nat per obs but gap is only {gap:.4f}. The empirical " + f"joint-vs-split gap on the MATLAB translog sim was ~2.5 nats; a gap " + f"below 1.0 here suggests the AF likelihood has reverted to the split-" + f"Halton scheme that biases sigma_prod toward 0." + ) + + +def test_af_joint_halton_recovers_sigma_prod_with_chain_link() -> None: # noqa: PLR0915 + """As above, but exercise a 1→2 step where ``chain_links`` is non-empty. + + For the 0→1 step the joint Halton dim is just `n_state + n_shock + + n_endog` and the joint-vs-split distinction is subtle (no prior + chain to bridge). For 1→2 steps the joint Halton couples z_state + + prior chain shocks + current shocks all in one sequence — that's + where MATLAB's working scheme actually outperforms split Halton. + + This test runs `estimate_af` end-to-end on a tiny synthetic translog + DGP through periods 0, 1, 2, then verifies the period-2 (= 1→2) + estimated sigma_prod_1 is within 35% of truth. Under split Halton + this parameter collapses toward 0; under joint Halton it recovers + near truth (0.42 in the MATLAB sim). The 35% threshold (vs split- + Halton's ~100% collapse) clearly separates the two regimes while + absorbing JAX numerical-determinism differences across CI vs local + hardware that nudged the recovered estimate from ~28% to ~31% on + the same fixed seed. + """ + pytest.importorskip("optimagic") + rng = np.random.default_rng(20260509) + n_obs = 300 + n_periods = 3 + + # MATLAB-translog truths. + a_t = (0.9283, 0.9536) + sigma_t_arr = (0.5125, 0.7295) + gamma_t_arr = (0.6113, 0.2814) + delta_t_arr = (-0.0175, -0.0024) + sigma_p_arr = (0.36, 0.42) + sigma_i_arr = (0.10, 0.10) + beta_skills = (0.10, 0.10) + beta_inc = (0.90, 0.90) + lam_skills = ( + np.array([1.0, 0.36, 0.56]), + np.array([1.0, 0.66, 1.18]), + np.array([1.0, 0.19, 0.50]), + ) + sd_skills = ( + np.array([0.68, 0.03, 0.08]), + np.array([0.51, 0.12, 0.19]), + np.array([0.14, 0.03, 0.15]), + ) + lam_inv = (np.array([1.0, 0.84, 0.79]),) * 2 + sd_inv = (np.array([0.15, 0.39, 0.47]),) * 2 + + # Initial mixture (matches MATLAB). + p_a = 0.62 + mu_a = np.array([-4.0, -2.0]) + cov_a = np.array([[0.62, 0.035], [0.035, 0.056]]) + mu_b = np.array([6.0, 3.0]) + cov_b = np.array([[0.83, 0.17], [0.17, 1.28]]) + + u = rng.uniform(size=n_obs) + is_a = (u < p_a).astype(np.float64) + chol_a = np.linalg.cholesky(cov_a) + chol_b = np.linalg.cholesky(cov_b) + z_init = rng.normal(size=(n_obs, 2)) + draw_a = mu_a[None, :] + z_init @ chol_a.T + draw_b = mu_b[None, :] + z_init @ chol_b.T + skills = np.zeros((n_obs, n_periods)) + skills[:, 0] = is_a * draw_a[:, 0] + (1 - is_a) * draw_b[:, 0] + log_inc = is_a * draw_a[:, 1] + (1 - is_a) * draw_b[:, 1] + inv = np.zeros((n_obs, n_periods - 1)) + for t in range(n_periods - 1): + inv[:, t] = ( + beta_skills[t] * skills[:, t] + + beta_inc[t] * log_inc + + rng.normal(size=n_obs) * sigma_i_arr[t] + ) + skills[:, t + 1] = ( + a_t[t] + + sigma_t_arr[t] * skills[:, t] + + gamma_t_arr[t] * inv[:, t] + + delta_t_arr[t] * skills[:, t] * inv[:, t] + + rng.normal(size=n_obs) * sigma_p_arr[t] + ) + + rows = [] + for i in range(n_obs): + for t in range(n_periods): + row = { + "caseid": int(i), + "period": int(t), + "skill_1": lam_skills[t][0] * skills[i, t] + + rng.normal() * sd_skills[t][0], + "skill_2": lam_skills[t][1] * skills[i, t] + + rng.normal() * sd_skills[t][1], + "skill_3": lam_skills[t][2] * skills[i, t] + + rng.normal() * sd_skills[t][2], + "log_income": float(log_inc[i]), + } + if 1 <= t <= 2: + inv_t_idx = t - 1 + row["inv_1"] = ( + lam_inv[inv_t_idx][0] * inv[i, inv_t_idx] + + rng.normal() * sd_inv[inv_t_idx][0] + ) + row["inv_2"] = ( + lam_inv[inv_t_idx][1] * inv[i, inv_t_idx] + + rng.normal() * sd_inv[inv_t_idx][1] + ) + row["inv_3"] = ( + lam_inv[inv_t_idx][2] * inv[i, inv_t_idx] + + rng.normal() * sd_inv[inv_t_idx][2] + ) + else: + row["inv_1"] = np.nan + row["inv_2"] = np.nan + row["inv_3"] = np.nan + rows.append(row) + data = pd.DataFrame(rows).set_index(["caseid", "period"]) + + skill_normalisations = Normalizations( + loadings=({"skill_1": 1.0},) * n_periods, + intercepts=({"skill_1": 0.0},) * n_periods, + ) + inv_normalisations = Normalizations( + loadings=({}, {"inv_1": 1.0}, {"inv_1": 1.0}), + intercepts=({}, {"inv_1": 0.0}, {"inv_1": 0.0}), + ) + + model = ModelSpec( + factors={ + "skills": FactorSpec( + measurements=(("skill_1", "skill_2", "skill_3"),) * n_periods, + normalizations=skill_normalisations, + transition_function="translog", + ), + "investment": FactorSpec( + measurements=( + (), + ("inv_1", "inv_2", "inv_3"), + ("inv_1", "inv_2", "inv_3"), + ), + normalizations=inv_normalisations, + transition_function="linear", + is_endogenous=True, + ), + }, + observed_factors=("log_income",), + n_mixtures=2, + ) + + # Pin everything except sigma_prod_0 / sigma_prod_1 at MATLAB truth. + truth_extras: list[tuple[tuple[str, int, str, str], float]] = [ + (("transition", 0, "skills", "constant"), a_t[0]), + (("transition", 0, "skills", "skills"), sigma_t_arr[0]), + (("transition", 0, "skills", "investment"), gamma_t_arr[0]), + (("transition", 0, "skills", "skills * investment"), delta_t_arr[0]), + (("transition", 1, "skills", "constant"), a_t[1]), + (("transition", 1, "skills", "skills"), sigma_t_arr[1]), + (("transition", 1, "skills", "investment"), gamma_t_arr[1]), + (("transition", 1, "skills", "skills * investment"), delta_t_arr[1]), + # Pin sigma_prod_0 at truth so we can isolate sigma_prod_1. + (("shock_sds", 0, "skills", "-"), sigma_p_arr[0]), + (("investment_eq", 0, "investment", "skills"), beta_skills[0]), + (("investment_eq", 0, "investment", "log_income"), beta_inc[0]), + (("investment_eq", 0, "investment", "constant"), 0.0), + (("investment_eq", 1, "investment", "skills"), beta_skills[1]), + (("investment_eq", 1, "investment", "log_income"), beta_inc[1]), + (("investment_eq", 1, "investment", "constant"), 0.0), + (("investment_sds", 0, "investment", "-"), sigma_i_arr[0]), + (("investment_sds", 1, "investment", "-"), sigma_i_arr[1]), + ] + # Pin all squares + log_income terms in translog to 0. + for t in range(n_periods - 1): + for fac in ("skills", "investment", "log_income"): + truth_extras.append((("transition", t, "skills", f"{fac} ** 2"), 0.0)) + truth_extras.append((("transition", t, "skills", "log_income"), 0.0)) + for cross in ("skills * log_income", "investment * log_income"): + truth_extras.append((("transition", t, "skills", cross), 0.0)) + + fixed_idx = pd.MultiIndex.from_tuples( + [r[0] for r in truth_extras], + names=["category", "period", "name1", "name2"], + ) + fixed_params = pd.DataFrame( + {"value": [r[1] for r in truth_extras]}, index=fixed_idx + ) + + truth_df = pd.DataFrame({"value": [v for _, v in truth_extras]}, index=fixed_idx) + + af_opts = AFEstimationOptions( + n_halton_points=200, + n_halton_points_shock=200, + optimizer_algorithm="scipy_lbfgsb", + ) + result = estimate_af( + model_spec=model, + data=data, + options=af_opts, + fixed_params=fixed_params, + start_params=truth_df, + ) + p2 = result.period_results[2].params + sigma_prod_1_est = float( + p2.loc[("shock_sds", 1, "skills", "-"), "value"] # ty: ignore[invalid-argument-type] + ) + rel_err = abs(sigma_prod_1_est - sigma_p_arr[1]) / sigma_p_arr[1] + assert rel_err < 0.35, ( + f"sigma_prod_1 estimate {sigma_prod_1_est:.4f} is more than 35% off truth " + f"{sigma_p_arr[1]:.4f} (rel error {rel_err:.2%}). Suggests joint-Halton " + f"chain rebuild has regressed and sigma_prod is collapsing toward 0." + ) + + +# --------------------------------------------------------------------------- +# Posterior states tests +# --------------------------------------------------------------------------- + + +@pytest.mark.end_to_end +def test_af_get_individual_states() -> None: + """Verify get_individual_states works with AF results. + + Run AF on a simple single-factor model, then call get_individual_states + with the AF result. Check the returned DataFrame has the right shape, + columns, and reasonable values. + """ + data, _true_params = _simulate_linear_transition_data(n_obs=200, n_periods=3) + model = _make_linear_transition_model(n_periods=3) + + af_result = estimate_af( + model_spec=model, + data=data, + options=AFEstimationOptions( + n_halton_points=30, + n_halton_points_shock=15, + optimizer_algorithm="scipy_lbfgsb", + ), + ) + + result = get_individual_states(data=data, result=af_result) + + # Should have unanchored_states + assert "unanchored_states" in result + states_df = result["unanchored_states"]["states"] + + # DataFrame should have id, period, and factor columns + assert "period" in states_df.columns + assert "skill" in states_df.columns + + # One row per individual per period + n_obs = 200 + n_periods = 3 + assert len(states_df) == n_obs * n_periods + + # Values should be finite + assert states_df["skill"].apply(np.isfinite).all() + + # State estimates should have non-trivial variance (not all the same) + assert states_df["skill"].std() > 0.1 + + +@pytest.mark.end_to_end +def test_af_estimate_with_translog() -> None: + """Verify AF estimation runs with a translog transition function. + + Simulate from a linear DGP but estimate with translog — translog nests + linear (squares and interactions zero), so estimation should still + converge to a finite likelihood and recover the linear coefficient + roughly. With one factor there are only 3 translog params: beta, beta^2, + constant. + """ + data, _true_params = _simulate_linear_transition_data(n_obs=300, n_periods=3) + model = ModelSpec( + factors={ + "skill": FactorSpec( + measurements=(("m1", "m2", "m3"),) * 3, + normalizations=Normalizations( + loadings=({"m1": 1},) * 3, + intercepts=({"m1": 0},) * 3, + ), + transition_function="translog", + ), + }, + ) + + result = estimate_af( + model_spec=model, + data=data, + options=AFEstimationOptions( + n_halton_points=30, + n_halton_points_shock=15, + optimizer_algorithm="scipy_lbfgsb", + ), + ) + + assert len(result.period_results) == 3 + for pr in result.period_results: + assert np.isfinite(pr.loglikelihood), ( + f"Period {pr.period}: non-finite loglik {pr.loglikelihood}" + ) + + # Period 1 should have 3 translog transition params: skill, skill ** 2, constant + p1 = result.period_results[1].params + trans = p1.query("category == 'transition'") + param_names = set(trans.index.get_level_values("name2")) + assert {"skill", "skill ** 2", "constant"}.issubset(param_names), ( + f"Expected translog params skill, skill ** 2, constant; got {param_names}" + ) + + # Linear coefficient should be recovered roughly (true beta = 0.8). + # Tolerance is wide because translog overfits with squared term. + est_beta = float( + p1.loc[("transition", 0, "skill", "skill"), "value"] # ty: ignore[invalid-argument-type] + ) + assert abs(est_beta - 0.8) < 0.4, ( + f"translog skill coefficient: got {est_beta:.3f}, expected ≈ 0.8" + ) + + +@pytest.mark.end_to_end +def test_af_joint_initial_distribution_with_observed_factor() -> None: + """Verify the joint (latent, observed) initial distribution is estimated. + + When observed factors are specified, the initial period estimator models + the joint (latent, observed) distribution and conditions Halton draws on + observed values per the Schur complement (Antweiler & Freyberger 2025). + + This test constructs data with a latent skill strongly correlated with + observed income, runs AF, and verifies: + - The estimated initial_states includes an entry for the observed factor. + - The recovered mean of the observed factor is close to its sample mean. + - The covariance between latent and observed has the expected sign. + """ + rng = np.random.default_rng(2026) + n_obs, n_periods = 400, 2 + true_corr = 0.7 # strong latent-observed correlation + + # Jointly simulate skill and income with specified correlation + z = rng.multivariate_normal( + mean=[0.0, 1.0], + cov=[[1.0, true_corr * 0.5], [true_corr * 0.5, 0.25]], + size=n_obs, + ) + theta = z[:, 0] + income = z[:, 1] + + rows = [] + for i in range(n_obs): + for t in range(n_periods): + rows.append( + { + "caseid": i, + "period": t, + "s1": theta[i] + rng.normal(0, 0.3), + "s2": 0.3 + 0.9 * theta[i] + rng.normal(0, 0.35), + "s3": -0.1 + 1.1 * theta[i] + rng.normal(0, 0.4), + "income": income[i], + } + ) + data = pd.DataFrame(rows).set_index(["caseid", "period"]) + + model = ModelSpec( + factors={ + "skill": FactorSpec( + measurements=(("s1", "s2", "s3"),) * n_periods, + normalizations=Normalizations( + loadings=({"s1": 1},) * n_periods, + intercepts=({"s1": 0},) * n_periods, + ), + transition_function="linear", + ), + }, + observed_factors=("income",), + ) + + result = estimate_af( + model_spec=model, + data=data, + options=AFEstimationOptions( + n_halton_points=40, + n_halton_points_shock=15, + optimizer_algorithm="scipy_lbfgsb", + ), + ) + + p0 = result.period_results[0].params + + # initial_states must now include an entry for the observed factor + income_mean_loc = ("initial_states", 0, "mixture_0", "income") + assert income_mean_loc in p0.index, ( + "initial_states should include the observed factor 'income'" + ) + est_income_mean = float(p0.loc[income_mean_loc, "value"]) # ty: ignore[invalid-argument-type] + sample_income_mean = float(income.mean()) + assert abs(est_income_mean - sample_income_mean) < 0.15, ( + f"Estimated income mean {est_income_mean:.3f} far from sample " + f"{sample_income_mean:.3f}." + ) + + # Cross-covariance entry (skill-income) should reflect the positive + # correlation in the DGP; stored as lower-triangular Cholesky with + # factor ordering (latent, observed). + cross_loc = ("initial_cholcovs", 0, "mixture_0", "income-skill") + assert cross_loc in p0.index, ( + "Cross Cholesky entry between skill and income should be present" + ) + # For a 2x2 joint Cholesky with positive cross-cov, the (1,0) entry + # should be positive. + cross_val = float(p0.loc[cross_loc, "value"]) # ty: ignore[invalid-argument-type] + assert cross_val > 0.05, ( + f"Expected positive skill-income covariance; got Cholesky[1,0]={cross_val:.3f}" + ) + + +@pytest.mark.end_to_end +def test_af_fixed_params_pins_time_invariant_latent() -> None: + """Verify fixed_params pins MC-style time-invariant latent factors. + + Construct a 2-factor model where `mc` is time-invariant and `skill` + evolves linearly. Pin mc's transitions to identity and its shock SD + to a near-zero floor (same convention CHS uses for augmented periods). + After estimation, the pinned parameters must equal the input values + exactly (not optimized away). + """ + rng = np.random.default_rng(7) + n_obs, n_periods = 300, 3 + mc = rng.normal(0, 1, n_obs) + theta = np.zeros((n_obs, n_periods)) + theta[:, 0] = rng.normal(0, 1, n_obs) + for t in range(n_periods - 1): + theta[:, t + 1] = 0.7 * theta[:, t] + 0.2 * mc + rng.normal(0, 0.3, n_obs) + + rows = [] + for i in range(n_obs): + for t in range(n_periods): + row = { + "caseid": i, + "period": t, + "s1": theta[i, t] + rng.normal(0, 0.3), + "s2": 0.3 + 0.9 * theta[i, t] + rng.normal(0, 0.35), + "s3": -0.1 + 1.1 * theta[i, t] + rng.normal(0, 0.4), + } + if t == 0: + row["m1"] = mc[i] + rng.normal(0, 0.3) + row["m2"] = 0.2 + 0.8 * mc[i] + rng.normal(0, 0.35) + row["m3"] = -0.1 + 1.1 * mc[i] + rng.normal(0, 0.4) + rows.append(row) + data = pd.DataFrame(rows).set_index(["caseid", "period"]) + + model = ModelSpec( + factors={ + "skill": FactorSpec( + measurements=(("s1", "s2", "s3"),) * n_periods, + normalizations=Normalizations( + loadings=({"s1": 1},) * n_periods, + intercepts=({"s1": 0},) * n_periods, + ), + transition_function="linear", + ), + "mc": FactorSpec( + measurements=(("m1", "m2", "m3"), (), ()), + normalizations=Normalizations( + loadings=({"m1": 1}, {}, {}), + intercepts=({"m1": 0}, {}, {}), + ), + transition_function="linear", + ), + }, + ) + + # Pin mc to identity transition + floor shock SD across both + # transition periods (0 and 1). + fixed_entries: list[tuple[tuple[str, int, str, str], float]] = [] + for t in (0, 1): + for reg in ("skill", "mc", "constant"): + fixed_entries.append( + (("transition", t, "mc", reg), 1.0 if reg == "mc" else 0.0) + ) + fixed_entries.append((("shock_sds", t, "mc", "-"), 0.001)) + fixed_idx = pd.MultiIndex.from_tuples( + [e[0] for e in fixed_entries], + names=["category", "period", "name1", "name2"], + ) + fixed_df = pd.DataFrame({"value": [e[1] for e in fixed_entries]}, index=fixed_idx) + + result = estimate_af( + model_spec=model, + data=data, + options=AFEstimationOptions( + n_halton_points=30, + n_halton_points_shock=15, + optimizer_algorithm="scipy_lbfgsb", + ), + fixed_params=fixed_df, + ) + + for t_trans in (0, 1): + p_t = result.period_results[t_trans + 1].params + for reg in ("skill", "mc", "constant"): + expected = 1.0 if reg == "mc" else 0.0 + val = float( + p_t.loc[("transition", t_trans, "mc", reg), "value"] # ty: ignore[invalid-argument-type] + ) + assert val == expected, ( + f"mc transition period {t_trans}, regressor {reg}: " + f"expected {expected}, got {val}" + ) + sd = float( + p_t.loc[("shock_sds", t_trans, "mc", "-"), "value"] # ty: ignore[invalid-argument-type] + ) + assert sd == 0.001, f"mc shock_sd period {t_trans}: {sd} (expected 0.001)" + + +def _make_three_factor_log_ces_model( + n_periods: int, +) -> tuple[ModelSpec, pd.DataFrame]: + """Build a 3-factor model with log_ces on fac1 and simulated data. + + fac1 is produced via CES from (fac1, fac2, fac3). In the DGP we mute + fac3's contribution so tests can recover the pinning without fighting a + strong signal from that factor. + """ + rng = np.random.default_rng(17) + n_obs = 250 + + fac1 = np.zeros((n_obs, n_periods)) + fac2 = np.zeros((n_obs, n_periods)) + fac3 = np.zeros((n_obs, n_periods)) + fac1[:, 0] = rng.normal(0.5, 0.2, n_obs) + fac2[:, 0] = rng.normal(0.5, 0.2, n_obs) + fac3[:, 0] = rng.normal(0.0, 0.2, n_obs) + for t in range(n_periods - 1): + fac1[:, t + 1] = 0.4 * fac1[:, t] + 0.6 * fac2[:, t] + rng.normal(0, 0.1, n_obs) + fac2[:, t + 1] = 0.9 * fac2[:, t] + rng.normal(0, 0.1, n_obs) + fac3[:, t + 1] = fac3[:, t] + + rows = [] + for i in range(n_obs): + for t in range(n_periods): + rows.append( + { + "caseid": i, + "period": t, + "y1": fac1[i, t] + rng.normal(0, 0.1), + "y2": 0.5 + 0.8 * fac1[i, t] + rng.normal(0, 0.12), + "y3": -0.2 + 1.1 * fac1[i, t] + rng.normal(0, 0.1), + "y4": fac2[i, t] + rng.normal(0, 0.1), + "y5": 0.2 + 0.9 * fac2[i, t] + rng.normal(0, 0.12), + "y6": -0.1 + 1.1 * fac2[i, t] + rng.normal(0, 0.1), + "y7": fac3[i, t] + rng.normal(0, 0.1), + "y8": 0.1 + 0.9 * fac3[i, t] + rng.normal(0, 0.12), + "y9": -0.1 + 1.0 * fac3[i, t] + rng.normal(0, 0.1), + } + ) + data = pd.DataFrame(rows).set_index(["caseid", "period"]) + + model = ModelSpec( + factors={ + "fac1": FactorSpec( + measurements=(("y1", "y2", "y3"),) * n_periods, + normalizations=Normalizations( + loadings=({"y1": 1},) * n_periods, + intercepts=({"y1": 0},) * n_periods, + ), + transition_function="log_ces", + ), + "fac2": FactorSpec( + measurements=(("y4", "y5", "y6"),) * n_periods, + normalizations=Normalizations( + loadings=({"y4": 1},) * n_periods, + intercepts=({"y4": 0},) * n_periods, + ), + transition_function="linear", + ), + "fac3": FactorSpec( + measurements=(("y7", "y8", "y9"),) * n_periods, + normalizations=Normalizations( + loadings=({"y7": 1},) * n_periods, + intercepts=({"y7": 0},) * n_periods, + ), + transition_function="linear", + ), + }, + ) + return model, data + + +@pytest.mark.end_to_end +def test_af_log_ces_with_cross_factor_gamma_fixed_at_zero() -> None: + """Fix gamma_fac3 = 0 in a log_ces transition and run AF end-to-end. + + Before the probability-constraint + fixed-params support was added, this + combination raised `InvalidConstraintError` because optimagic refused + any fix inside a ProbabilityConstraint selector. Now the fold helper + removes gamma_fac3 from the selector and the remaining two gammas are + optimised on the simplex summing to one. + """ + model, data = _make_three_factor_log_ces_model(n_periods=2) + + fixed_idx = pd.MultiIndex.from_tuples( + [("transition", 0, "fac1", "fac3")], + names=["category", "period", "name1", "name2"], + ) + fixed_df = pd.DataFrame({"value": [0.0]}, index=fixed_idx) + + result = estimate_af( + model_spec=model, + data=data, + options=AFEstimationOptions( + n_halton_points=20, + n_halton_points_shock=10, + optimizer_algorithm="scipy_lbfgsb", + ), + fixed_params=fixed_df, + ) + + p_t = result.period_results[1].params + gamma_fac1 = float( + p_t.loc[("transition", 0, "fac1", "fac1"), "value"] # ty: ignore[invalid-argument-type] + ) + gamma_fac2 = float( + p_t.loc[("transition", 0, "fac1", "fac2"), "value"] # ty: ignore[invalid-argument-type] + ) + gamma_fac3 = float( + p_t.loc[("transition", 0, "fac1", "fac3"), "value"] # ty: ignore[invalid-argument-type] + ) + + assert gamma_fac3 == 0.0 + assert np.isclose(gamma_fac1 + gamma_fac2, 1.0, atol=1e-6) + assert gamma_fac1 > 0.0 + assert gamma_fac2 > 0.0 + + +@pytest.mark.end_to_end +def test_af_log_ces_with_cross_factor_gamma_fixed_at_nonzero() -> None: + """Fix gamma_fac3 = 0.2; verify remaining gammas sum to 0.8 at the optimum.""" + model, data = _make_three_factor_log_ces_model(n_periods=2) + + fixed_idx = pd.MultiIndex.from_tuples( + [("transition", 0, "fac1", "fac3")], + names=["category", "period", "name1", "name2"], + ) + fixed_df = pd.DataFrame({"value": [0.2]}, index=fixed_idx) + + result = estimate_af( + model_spec=model, + data=data, + options=AFEstimationOptions( + n_halton_points=20, + n_halton_points_shock=10, + optimizer_algorithm="scipy_lbfgsb", + ), + fixed_params=fixed_df, + ) + + p_t = result.period_results[1].params + gamma_fac1 = float( + p_t.loc[("transition", 0, "fac1", "fac1"), "value"] # ty: ignore[invalid-argument-type] + ) + gamma_fac2 = float( + p_t.loc[("transition", 0, "fac1", "fac2"), "value"] # ty: ignore[invalid-argument-type] + ) + gamma_fac3 = float( + p_t.loc[("transition", 0, "fac1", "fac3"), "value"] # ty: ignore[invalid-argument-type] + ) + + assert gamma_fac3 == 0.2 + assert np.isclose(gamma_fac1 + gamma_fac2, 0.8, atol=1e-6) + + +@pytest.mark.end_to_end +def test_af_estimate_tolerates_nan_measurements() -> None: + """NaN entries in measurement columns must not poison AF gradients. + + Real panels routinely have missing values; the AF likelihood masks + them out at the per-observation level so each observation contributes + only its non-missing measurements to the log-pdf sum. + """ + rng = np.random.default_rng(2026) + n_obs, n_periods = 400, 2 + + z = rng.multivariate_normal( + mean=[0.0, 1.0], + cov=[[1.0, 0.35], [0.35, 0.25]], + size=n_obs, + ) + theta = z[:, 0] + income = z[:, 1] + + rows = [] + for i in range(n_obs): + for t in range(n_periods): + row = { + "caseid": i, + "period": t, + "s1": theta[i] + rng.normal(0, 0.3), + "s2": 0.3 + 0.9 * theta[i] + rng.normal(0, 0.35), + "s3": -0.1 + 1.1 * theta[i] + rng.normal(0, 0.4), + "income": income[i], + } + # Sprinkle ~10% NaN into s2 across both periods. + if rng.random() < 0.10: + row["s2"] = np.nan + rows.append(row) + data = pd.DataFrame(rows).set_index(["caseid", "period"]) + assert data["s2"].isna().any(), "test setup should inject NaN measurements" + + model = ModelSpec( + factors={ + "skill": FactorSpec( + measurements=(("s1", "s2", "s3"),) * n_periods, + normalizations=Normalizations( + loadings=({"s1": 1},) * n_periods, + intercepts=({"s1": 0},) * n_periods, + ), + transition_function="linear", + ), + }, + observed_factors=("income",), + ) + + result = estimate_af( + model_spec=model, + data=data, + options=AFEstimationOptions( + n_halton_points=30, + n_halton_points_shock=15, + optimizer_algorithm="scipy_lbfgsb", + ), + ) + for pr in result.period_results: + assert pr.success, f"Period {pr.period} failed with NaN measurements" + assert np.isfinite(pr.loglikelihood) + + +@pytest.mark.end_to_end +def test_af_estimate_with_register_params_user_transition() -> None: + """AF must accept `@register_params`-decorated user transition functions. + + User-defined transition functions take individual factor arguments + plus a `params` dict; AF's per-period likelihood passes a packed + state vector and a flat parameter slice. Without the bridging + wrapper in `_get_raw_transition_functions`, callers that supply + custom transitions (e.g. `skane-struct-bw`) raise TypeError at the + first transition-step call. + """ + + @register_params(params=["constant", "skill"]) + def f_skill(skill: jax.Array, params: dict[str, float]) -> jax.Array: + return params["constant"] + params["skill"] * skill + + rng = np.random.default_rng(2026) + n_obs, n_periods = 300, 3 + theta = rng.normal(0, 1, (n_obs, n_periods)) + for t in range(1, n_periods): + theta[:, t] = 0.1 + 0.8 * theta[:, t - 1] + rng.normal(0, 0.4, n_obs) + + rows = [] + for i in range(n_obs): + for t in range(n_periods): + rows.append( + { + "caseid": i, + "period": t, + "s1": theta[i, t] + rng.normal(0, 0.3), + "s2": 0.3 + 0.9 * theta[i, t] + rng.normal(0, 0.35), + "s3": -0.1 + 1.1 * theta[i, t] + rng.normal(0, 0.4), + } + ) + data = pd.DataFrame(rows).set_index(["caseid", "period"]) + + model = ModelSpec( + factors={ + "skill": FactorSpec( + measurements=(("s1", "s2", "s3"),) * n_periods, + normalizations=Normalizations( + loadings=({"s1": 1},) * n_periods, + intercepts=({"s1": 0},) * n_periods, + ), + transition_function=f_skill, + ), + }, + ) + + result = estimate_af( + model_spec=model, + data=data, + options=AFEstimationOptions( + n_halton_points=30, + n_halton_points_shock=15, + optimizer_algorithm="scipy_lbfgsb", + ), + ) + for pr in result.period_results: + assert pr.success, f"Period {pr.period} failed" + assert np.isfinite(pr.loglikelihood) + + +def test_af_result_to_numpy_materialises_and_drops_samples_per_component() -> None: + """`AFEstimationResult.to_numpy()` produces a numpy-only, pickle-friendly copy. + + `estimate_af` itself leaves arrays on-device so the JAX/XLA + compilation cache can be reused across repeated calls (e.g. inside + a Monte Carlo sweep). Callers that need host residency -- pickling, + plotting, sending across processes -- must invoke `to_numpy()`, + which: + + * drops `samples_per_component` (per-period `(n_halton, n_obs, + n_state)` importance buffers, multi-GB at realistic sizes), and + * materialises every `jax.Array` in the result + (`MixtureComponent.mean`, `chol_cov`, + `ConditionalDistribution.cond_means`, `cond_chols`, + `conditional_weights`, `mixture_weights`, and the arrays inside + every `ChainLink`) as `np.ndarray`. JAX arrays bind to GPU + memory; without `to_numpy()`, pickling the result triggers a + GPU→host materialisation inside `__reduce__` that routinely OOMs + on a device still holding JIT caches. + """ + rng = np.random.default_rng(2026) + n_obs, n_periods = 200, 2 + theta = rng.normal(0, 1, (n_obs, n_periods)) + for t in range(1, n_periods): + theta[:, t] = 0.1 + 0.8 * theta[:, t - 1] + rng.normal(0, 0.4, n_obs) + + rows = [] + for i in range(n_obs): + for t in range(n_periods): + rows.append( + { + "caseid": i, + "period": t, + "s1": theta[i, t] + rng.normal(0, 0.3), + "s2": 0.3 + 0.9 * theta[i, t] + rng.normal(0, 0.35), + "s3": -0.1 + 1.1 * theta[i, t] + rng.normal(0, 0.4), + } + ) + data = pd.DataFrame(rows).set_index(["caseid", "period"]) + + model = ModelSpec( + factors={ + "skill": FactorSpec( + measurements=(("s1", "s2", "s3"),) * n_periods, + normalizations=Normalizations( + loadings=({"s1": 1},) * n_periods, + intercepts=({"s1": 0},) * n_periods, + ), + transition_function="linear", + ), + }, + ) + + result = estimate_af( + model_spec=model, + data=data, + options=AFEstimationOptions( + n_halton_points=20, + n_halton_points_shock=10, + optimizer_algorithm="scipy_lbfgsb", + ), + ).to_numpy() + + def _assert_numpy(arr: object, label: str) -> None: + if arr is None: + return + assert isinstance(arr, np.ndarray), ( + f"{label} should be a numpy ndarray, got {type(arr).__name__}" + ) + + for cd in result.conditional_distributions: + assert cd.samples_per_component == (), ( + "samples_per_component should be cleared before returning" + ) + _assert_numpy(cd.mixture_weights, "mixture_weights") + _assert_numpy(cd.conditional_weights, "conditional_weights") + _assert_numpy(cd.cond_means, "cond_means") + _assert_numpy(cd.cond_chols, "cond_chols") + for component in cd.components: + _assert_numpy(component.mean, "MixtureComponent.mean") + _assert_numpy(component.chol_cov, "MixtureComponent.chol_cov") + for cl in cd.chain_links: + _assert_numpy(cl.transition_params, "ChainLink.transition_params") + _assert_numpy(cl.shock_sds, "ChainLink.shock_sds") + _assert_numpy(cl.shock_factor_indices, "ChainLink.shock_factor_indices") + _assert_numpy(cl.inv_eq_params, "ChainLink.inv_eq_params") + _assert_numpy(cl.inv_sds, "ChainLink.inv_sds") + _assert_numpy(cl.obs_factor_values, "ChainLink.obs_factor_values") + + +def test_af_initial_loglike_is_joint_density_of_measurements_and_observed_factors() -> ( # noqa: PLR0915 + None +): + """Pin the joint estimand f(Z_theta,0, Y_0), not the conditional f(Z|Y). + + With observed factors present, the initial-period per-obs log-likelihood + must equal `log p(Y_i) + log_integral` (the JOINT density). If a future + change subtracts `log p(Y_i)` to switch to the conditional MLE, the first + assertion fails. Cross-checked against a plain-numpy single-component + computation of the marginal-Y density and the quadrature integral. + """ + n_factors = 2 # 1 latent + 1 observed + n_latent = 1 + n_mixture_components = 1 + n_measures = 2 + n_controls = 1 + + # Mixture mean (mu_theta, mu_y) and lower-tri Cholesky of the 2x2 joint + # covariance in tril order [L00, L10, L11]. + mu_theta, mu_y = 0.5, -0.3 + chol_l00, chol_l10, chol_l11 = 1.2, 0.4, 0.9 + + control_params = [0.1, -0.2] # (n_measures, n_controls) flat + loadings = [1.0, 0.8] # both measures load on the single latent factor + meas_sds = [0.5, 0.6] + + params = jnp.array( + [ + 1.0, # mixture_weights + mu_theta, # mixture_means + mu_y, + chol_l00, # mixture_chol_covs (tril) + chol_l10, + chol_l11, + *control_params, + *loadings, + *meas_sds, + ] + ) + + # Both measurements load on the single latent factor. + loading_mask = jnp.array([[True], [True]]) + + n_obs = 3 + rng = np.random.default_rng(404) + measurements = jnp.asarray(rng.normal(0, 1, (n_obs, n_measures))) + controls = jnp.asarray(rng.normal(0, 1, (n_obs, n_controls))) + observed_factor_values = jnp.asarray(rng.normal(0, 1, (n_obs, 1))) + + # A handful of 1d standard-normal quadrature nodes with weights summing + # to 1 (the conditional latent dimension is 1). + raw_nodes = np.array([-1.5, -0.5, 0.5, 1.5]) + node_w = np.exp(-0.5 * raw_nodes**2) + node_w = node_w / node_w.sum() + nodes = jnp.asarray(raw_nodes.reshape(-1, 1)) + weights = jnp.asarray(node_w) + + per_obs = np.asarray( + af_per_obs_loglike_initial( + params, + n_factors=n_factors, + n_mixture_components=n_mixture_components, + n_measures=n_measures, + n_controls=n_controls, + measurements=measurements, + controls=controls, + loading_mask=loading_mask, + nodes=nodes, + weights=weights, + stability_floor=0.0, + n_latent_factors=n_latent, + observed_factor_values=observed_factor_values, + ) + ) + + # Independent plain-numpy reference for the single mixture component. + chol_full = np.array([[chol_l00, 0.0], [chol_l10, chol_l11]]) + cov_full = chol_full @ chol_full.T + cov_tt = cov_full[:n_latent, :n_latent] + cov_ty = cov_full[:n_latent, n_latent:] + cov_yy = cov_full[n_latent:, n_latent:] + + full_loadings = np.array(loadings).reshape(n_measures, n_latent) + control_arr = np.array(control_params).reshape(n_measures, n_controls) + meas_sd_arr = np.array(meas_sds) + nodes_np = np.asarray(nodes) + weights_np = np.asarray(weights) + + def _log_norm(x: np.ndarray, mean: float, sd: np.ndarray) -> np.ndarray: + return -0.5 * np.log(2 * np.pi) - np.log(sd) - 0.5 * ((x - mean) / sd) ** 2 + + for i in range(n_obs): + y_i = np.asarray(observed_factor_values[i]) + z_i = np.asarray(measurements[i]) + ctrl_i = np.asarray(controls[i]) + residual_base = z_i - control_arr @ ctrl_i + + # Marginal density of Y_i. + log_marg = -0.5 * np.log(2 * np.pi * cov_yy[0, 0]) - 0.5 * ( + (y_i[0] - mu_y) ** 2 / cov_yy[0, 0] + ) + + # Schur-complement conditional of theta | Y_i. + cond_mean = mu_theta + (cov_ty[0, 0] / cov_yy[0, 0]) * (y_i[0] - mu_y) + cond_cov = cov_tt[0, 0] - cov_ty[0, 0] ** 2 / cov_yy[0, 0] + cond_cov = cond_cov + 1e-10 # matches the code's jitter + cond_chol = np.sqrt(cond_cov) + + log_nodes = [] + for q in range(nodes_np.shape[0]): + theta_q = cond_mean + cond_chol * nodes_np[q, 0] + resid = residual_base - full_loadings[:, 0] * theta_q + log_nodes.append(np.sum(_log_norm(resid, 0.0, meas_sd_arr))) + log_nodes = np.array(log_nodes) + log_integral = np.log(np.sum(np.exp(log_nodes) * weights_np)) + + # The returned per-obs log-likelihood is the JOINT density. + np.testing.assert_allclose(per_obs[i], log_marg + log_integral, atol=1e-8) + # And it is NOT the conditional integral alone (p(Y_i) term present). + assert not np.allclose(per_obs[i], log_integral) + + +def test_update_conditional_distribution_does_not_recondition_on_later_income() -> None: + """Pin that later-period income does NOT re-condition the carried state. + + `_update_conditional_distribution` propagates the chained sample through + the just-fitted transition/investment equations, but the conditioning + payload (`cond_means`, `cond_chols`, `conditional_weights`, + `chain_links`) is carried forward UNCHANGED -- the state distribution + stays conditioned on period-0 income only. Income at t > 0 flows solely + through the transition function (so the chained `components` legitimately + change), never through a re-conditioning update. + """ + n_state = 1 + n_endog = 0 + n_observed_factors = 1 + n_components = 1 + n_halton = 6 + n_obs = 4 + + rng = np.random.default_rng(202) + prev_sample = jnp.asarray(rng.normal(0, 1, (n_halton, n_obs, n_state))) + cond_means = jnp.asarray(rng.normal(0, 1, (n_components, n_obs, n_state))) + cond_chols = jnp.asarray( + np.tile(np.eye(n_state), (n_components, 1, 1)).astype(float) + ) + conditional_weights = jnp.ones((n_obs, n_components)) + + prev_distribution = ConditionalDistribution( + mixture_weights=jnp.array([1.0]), + components=( + MixtureComponent(mean=jnp.zeros(n_state), chol_cov=jnp.eye(n_state)), + ), + samples_per_component=(prev_sample,), + conditional_weights=conditional_weights, + cond_means=cond_means, + cond_chols=cond_chols, + chain_links=(), + ) + + # Linear transition over (state, income): theta_t = 0.7 * theta + 0.3 * Y. + def combined_transition( + full_prev_with_obs: jax.Array, params: jax.Array + ) -> jax.Array: + return jnp.array( + [params[0] * full_prev_with_obs[0] + params[1] * full_prev_with_obs[1]] + ) + + idx = pd.MultiIndex.from_tuples( + [ + ("transition", 1, "skill", "skill"), + ("transition", 1, "skill", "income"), + ("shock_sds", 1, "skill", "-"), + ], + names=["category", "period", "name1", "name2"], + ) + result_params = pd.DataFrame({"value": [0.7, 0.3, 0.4]}, index=idx) + + # Two different later-period income inputs. + income_a = jnp.asarray(rng.normal(0, 1, (n_obs, n_observed_factors))) + income_b = income_a + 5.0 + + joint_nodes = jnp.asarray(rng.normal(0, 1, (n_halton, 1))) # n_shock = 1 column + + def _update(observed_factor_values: jax.Array) -> ConditionalDistribution: + return _update_conditional_distribution( + prev_distribution=prev_distribution, + result_params=result_params, + combined_transition=combined_transition, + joint_nodes=joint_nodes, + n_state=n_state, + n_endog=n_endog, + n_shock=1, + shock_factor_indices=jnp.array([0]), + observed_factor_values=observed_factor_values, + n_observed_factors=n_observed_factors, + ) + + out_a = _update(income_a) + out_b = _update(income_b) + + # The conditioning payload is byte-identical to the input and across the + # two income values: income at t > 0 leaves it untouched. + for out in (out_a, out_b): + np.testing.assert_array_equal( + np.asarray(out.cond_means), np.asarray(prev_distribution.cond_means) + ) + np.testing.assert_array_equal( + np.asarray(out.cond_chols), np.asarray(prev_distribution.cond_chols) + ) + np.testing.assert_array_equal( + np.asarray(out.conditional_weights), + np.asarray(prev_distribution.conditional_weights), + ) + assert out.chain_links == prev_distribution.chain_links + + # The chained sample summary DOES change with income (the single allowed + # channel: income flows through the transition function). + assert not np.allclose( + np.asarray(out_a.components[0].mean), + np.asarray(out_b.components[0].mean), + ) diff --git a/tests/test_af_inference.py b/tests/test_af_inference.py new file mode 100644 index 00000000..ae733ee4 --- /dev/null +++ b/tests/test_af_inference.py @@ -0,0 +1,504 @@ +"""Tests for ``skillmodels.af.inference.compute_af_standard_errors``. + +The AF inference path is the influence-function score bootstrap of +Antweiler & Freyberger (2025) §4.2 (Armstrong-Bertanha-Hong 2014 +style). A single per-observation influence matrix is computed once at +the optimum; each period block carries the earlier periods' influence +via the cross-period blocks of the full-chain Hessian, and the bootstrap +resamples the rows with ONE shared caseid index per replicate so that +cross-period covariances are non-zero and correct. There is no +analytical sandwich path: AF §4.2 explicitly notes the closed-form +variance ignores estimation error in earlier-period nuisance parameters +and is therefore incorrect for any t >= 1. +""" + +import jax +import jax.numpy as jnp +import numpy as np +import pandas as pd +import pytest + +from skillmodels.af.estimate import _extract_period_data, estimate_af +from skillmodels.af.inference import ( + AFInferenceResult, + _build_period_metas, + _compute_block_diagonal_sandwich, + _free_positions_for_period, + _period_t_per_obs_loglike_full, + compute_af_standard_errors, +) +from skillmodels.af.types import AFEstimationOptions +from skillmodels.common.model_spec import ( + FactorSpec, + ModelSpec, + Normalizations, +) +from skillmodels.common.process_model import process_model + + +def _simulate_linear_data( + *, + n_obs: int, + n_periods: int = 2, + seed: int = 0, +) -> pd.DataFrame: + """Simulate a simple single-factor linear-transition panel.""" + rng = np.random.default_rng(seed) + theta = np.zeros((n_obs, n_periods)) + theta[:, 0] = rng.normal(0.0, 1.0, n_obs) + for t in range(n_periods - 1): + theta[:, t + 1] = 0.1 + 0.7 * theta[:, t] + rng.normal(0.0, 0.3, n_obs) + + loadings = (1.0, 0.9, 1.1) + intercepts = (0.0, 0.2, -0.1) + sds = (0.3, 0.4, 0.35) + rows = [] + for i in range(n_obs): + for t in range(n_periods): + row = {"caseid": i, "period": t} + for m_idx, meas in enumerate(("m1", "m2", "m3")): + row[meas] = ( + intercepts[m_idx] + + loadings[m_idx] * theta[i, t] + + rng.normal(0, sds[m_idx]) + ) + rows.append(row) + + return pd.DataFrame(rows).set_index(["caseid", "period"]) + + +def _make_linear_model(n_periods: int = 2) -> ModelSpec: + return ModelSpec( + factors={ + "skill": FactorSpec( + measurements=(("m1", "m2", "m3"),) * n_periods, + normalizations=Normalizations( + loadings=({"m1": 1},) * n_periods, + intercepts=({"m1": 0},) * n_periods, + ), + transition_function="linear", + ), + }, + ) + + +@pytest.fixture(scope="module") +def fitted_result() -> tuple[AFInferenceResult, pd.DataFrame]: + """Fit the AF estimator once and bootstrap SEs; reused across tests.""" + data = _simulate_linear_data(n_obs=400, n_periods=2) + model = _make_linear_model(n_periods=2) + af_opts = AFEstimationOptions( + n_halton_points=25, + n_halton_points_shock=15, + optimizer_algorithm="scipy_lbfgsb", + ) + fit = estimate_af(model_spec=model, data=data, options=af_opts) + inference = compute_af_standard_errors(fit, data, af_opts, n_boot=2000, seed=0) + return inference, fit.params + + +@pytest.mark.end_to_end +def test_af_inference_result_is_inference_dataclass( + fitted_result: tuple[AFInferenceResult, pd.DataFrame], +) -> None: + inference, _ = fitted_result + assert isinstance(inference, AFInferenceResult) + + +@pytest.mark.end_to_end +def test_af_inference_replicate_params_shape( + fitted_result: tuple[AFInferenceResult, pd.DataFrame], +) -> None: + inference, all_params = fitted_result + assert inference.n_boot == 2000 + assert inference.n_clusters == 400 + assert inference.replicate_params.shape == (2000, len(all_params.index)) + assert list(inference.replicate_params.columns) == list(all_params.index) + + +@pytest.mark.end_to_end +def test_af_inference_standard_errors_index_matches_params( + fitted_result: tuple[AFInferenceResult, pd.DataFrame], +) -> None: + inference, all_params = fitted_result + assert inference.standard_errors.index.equals(all_params.index) + + +@pytest.mark.end_to_end +def test_af_inference_vcov_row_index_matches_params( + fitted_result: tuple[AFInferenceResult, pd.DataFrame], +) -> None: + inference, all_params = fitted_result + assert inference.vcov.index.equals(all_params.index) + + +@pytest.mark.end_to_end +def test_af_inference_vcov_column_index_matches_params( + fitted_result: tuple[AFInferenceResult, pd.DataFrame], +) -> None: + inference, all_params = fitted_result + assert inference.vcov.columns.equals(all_params.index) + + +@pytest.mark.end_to_end +def test_af_inference_vcov_diagonal_matches_se_squared( + fitted_result: tuple[AFInferenceResult, pd.DataFrame], +) -> None: + """SEs and vcov are computed from the same replicate distribution.""" + inference, _ = fitted_result + diag = np.diag(inference.vcov.to_numpy()) + se_squared = inference.standard_errors.to_numpy() ** 2 + np.testing.assert_allclose(diag, se_squared, rtol=1e-10, atol=1e-12) + + +@pytest.mark.end_to_end +def test_af_inference_pinned_loading_has_zero_se( + fitted_result: tuple[AFInferenceResult, pd.DataFrame], +) -> None: + inference, _ = fitted_result + assert float(inference.standard_errors.loc[("loadings", 0, "m1", "skill")]) == ( + pytest.approx(0.0, abs=1e-12) + ) + + +@pytest.mark.end_to_end +def test_af_inference_pinned_intercept_has_zero_se( + fitted_result: tuple[AFInferenceResult, pd.DataFrame], +) -> None: + inference, _ = fitted_result + assert float( + inference.standard_errors.loc[("controls", 0, "m1", "constant")] + ) == pytest.approx(0.0, abs=1e-12) + + +@pytest.mark.end_to_end +def test_af_inference_free_loading_has_positive_se( + fitted_result: tuple[AFInferenceResult, pd.DataFrame], +) -> None: + inference, _ = fitted_result + assert inference.standard_errors.loc[("loadings", 0, "m2", "skill")] > 0.0 + + +@pytest.mark.end_to_end +def test_af_inference_free_meas_sd_has_positive_se( + fitted_result: tuple[AFInferenceResult, pd.DataFrame], +) -> None: + inference, _ = fitted_result + assert inference.standard_errors.loc[("meas_sds", 0, "m2", "-")] > 0.0 + + +@pytest.mark.end_to_end +def test_af_inference_vcov_is_symmetric( + fitted_result: tuple[AFInferenceResult, pd.DataFrame], +) -> None: + inference, _ = fitted_result + v = inference.vcov.to_numpy() + np.testing.assert_allclose(v, v.T, atol=1e-10) + + +@pytest.mark.end_to_end +def test_af_inference_vcov_diagonal_nonnegative( + fitted_result: tuple[AFInferenceResult, pd.DataFrame], +) -> None: + inference, _ = fitted_result + diag = np.diag(inference.vcov.to_numpy()) + assert np.all(diag >= 0.0) + + +@pytest.mark.end_to_end +def test_af_inference_pinned_params_have_constant_replicates( + fitted_result: tuple[AFInferenceResult, pd.DataFrame], +) -> None: + """Loadings/intercepts pinned via Normalizations are constant across replicates.""" + inference, _ = fitted_result + pinned = [("loadings", t, "m1", "skill") for t in (0, 1)] + [ + ("controls", t, "m1", "constant") for t in (0, 1) + ] + for loc in pinned: + if loc in inference.replicate_params.columns: + col = inference.replicate_params[loc].to_numpy() + assert col.std() == pytest.approx(0.0, abs=1e-12) + + +@pytest.mark.end_to_end +def test_af_inference_se_shrinks_with_sample_size() -> None: + """SE for a representative free parameter should shrink roughly as 1/sqrt(n).""" + model = _make_linear_model(n_periods=2) + af_opts = AFEstimationOptions( + n_halton_points=25, + n_halton_points_shock=15, + optimizer_algorithm="scipy_lbfgsb", + ) + + data_small = _simulate_linear_data(n_obs=200, n_periods=2, seed=1) + data_large = _simulate_linear_data(n_obs=800, n_periods=2, seed=1) + + fit_small = estimate_af(model_spec=model, data=data_small, options=af_opts) + fit_large = estimate_af(model_spec=model, data=data_large, options=af_opts) + + inf_small = compute_af_standard_errors( + fit_small, data_small, af_opts, n_boot=2000, seed=1 + ) + inf_large = compute_af_standard_errors( + fit_large, data_large, af_opts, n_boot=2000, seed=1 + ) + + loc = ("loadings", 0, "m2", "skill") + se_small = float(inf_small.standard_errors.loc[loc]) + se_large = float(inf_large.standard_errors.loc[loc]) + + # Sample size quadrupled: expect SE ~ halved. Tolerate a wide band + # because the bootstrap is noisy on moderate samples. + ratio = se_large / se_small + assert 0.25 < ratio < 0.8, ( + f"Expected SE ratio in (0.25, 0.8) under 4x sample-size bump; " + f"got {ratio:.3f} (se_small={se_small}, se_large={se_large})" + ) + + +# --------------------------------------------------------------------------- +# AF-F1: influence-function score bootstrap that propagates earlier-period +# estimation uncertainty into later periods. +# --------------------------------------------------------------------------- + + +def _build_metas_for_test(fit, data, af_opts): + """Rebuild the per-period inference metas (mirrors compute_af_standard_errors).""" + model_spec = fit.model_spec + processed_model = process_model(model_spec) + n_periods = processed_model.dimensions.n_periods + latent_factors = processed_model.labels.latent_factors + controls_names = processed_model.labels.controls + observed_factors = processed_model.labels.observed_factors + endog_info = processed_model.endogenous_factors_info + endogenous_factors = tuple( + f + for f in latent_factors + if f in endog_info.factor_info and endog_info.factor_info[f].is_endogenous + ) + period_data = _extract_period_data( + data, + n_periods, + latent_factors, + controls_names, + model_spec, + observed_factors=observed_factors, + ) + return _build_period_metas( + result=fit, + period_data=period_data, + model_spec=model_spec, + processed_model=processed_model, + af_options=af_opts, + observed_factors=observed_factors, + endogenous_factors=endogenous_factors, + ) + + +@pytest.fixture(scope="module") +def fit_and_metas(): + """Fit the 2-period linear model and build inference metas; reused across tests.""" + data = _simulate_linear_data(n_obs=400, n_periods=2) + model = _make_linear_model(n_periods=2) + af_opts = AFEstimationOptions( + n_halton_points=25, + n_halton_points_shock=15, + optimizer_algorithm="scipy_lbfgsb", + ) + fit = estimate_af(model_spec=model, data=data, options=af_opts) + metas = _build_metas_for_test(fit, data, af_opts) + return fit, data, af_opts, metas + + +@pytest.mark.end_to_end +def test_af_inference_cross_period_covariance_is_nonzero( + fit_and_metas, +) -> None: + """Propagation produces non-zero cross-period vcov entries. + + A period-0 free parameter that period-1 depends on (a transition + slope and a free loading) must have non-zero covariance with a + period-1 free parameter. The old own-block independent-resample + bootstrap has E[cross-period cov] = 0; the influence-function fix + shares the caseid index so psi_1 carries B_{1,0} psi_0. + """ + fit, data, af_opts, _metas = fit_and_metas + inference = compute_af_standard_errors(fit, data, af_opts, n_boot=4000, seed=0) + vcov = inference.vcov + + p0_candidates = [ + ("transition", 0, "skill", "skill"), + ("loadings", 0, "m2", "skill"), + ] + p1_candidates = [ + ("loadings", 1, "m2", "skill"), + ("transition", 1, "skill", "skill"), + ] + p0 = next(c for c in p0_candidates if c in vcov.index) + p1 = next(c for c in p1_candidates if c in vcov.index) + + cross_cov = float(np.asarray(vcov.loc[p0, p1]).item()) + assert abs(cross_cov) > 1e-8, ( + f"Expected non-zero cross-period covariance between {p0} and {p1}; " + f"got {cross_cov}." + ) + + +@pytest.mark.end_to_end +def test_af_inference_propagation_inflates_later_period_se( + fit_and_metas, +) -> None: + """The propagated period-1 SE exceeds the old own-block SE. + + Replicate the OLD independent-resample own-block SE inline for a + period-1 free parameter, then assert the NEW propagated SE is + strictly larger (it adds the PSD term Var(A_1^{-1} B_{1,0} psi_0)). + """ + fit, data, af_opts, metas = fit_and_metas + inference = compute_af_standard_errors(fit, data, af_opts, n_boot=4000, seed=0) + + loc = ("loadings", 1, "m2", "skill") + new_se = float(inference.standard_errors.loc[loc]) + + # OLD own-block bootstrap SE for the same period-1 parameter. + period_score_info = _compute_block_diagonal_sandwich(fit, metas) + period1 = next(p for p in period_score_info if p.period == 1) + score = np.asarray(period1.score_matrix) + info = np.asarray(period1.information_matrix) + a_inv = np.linalg.pinv(info) + + n_clusters = int(metas[0].loglike_kwargs["measurements"].shape[0]) + rng = np.random.default_rng(0) + idx = rng.integers(0, n_clusters, size=(4000, n_clusters)) + mean_score = score[idx].mean(axis=1) + delta = -mean_score @ a_inv.T # (n_boot, n_free_own) + + own_col = list(period1.free_param_locs).index(loc) + old_se = float(np.std(delta[:, own_col], ddof=1)) + + assert new_se > old_se * 1.001, ( + f"Expected propagated SE ({new_se}) to exceed own-block SE " + f"({old_se}) by the propagation term." + ) + + +@pytest.mark.end_to_end +def test_af_inference_period1_information_matches_fullchain_ownblock( + fit_and_metas, +) -> None: + """The full-chain Hessian's period-1 own block matches the block-diagonal one. + + Validates the full-chain Hessian wiring used by the influence matrix: + the period-1 own information sub-block recovered from + hessian(_period_t_per_obs_loglike_full) must match the existing + _block_diagonal_sandwich_single information matrix for period 1. + """ + fit, _data, _af_opts, metas = fit_and_metas + flat_super = jnp.asarray(fit.params["value"].to_numpy()) + + period_score_info = _compute_block_diagonal_sandwich(fit, metas) + period1 = next(p for p in period_score_info if p.period == 1) + own_block_info = np.asarray(period1.information_matrix) + + meta1 = metas[1] + pos, _locs = _free_positions_for_period(meta1.params_df) + own_global = jnp.array([meta1.slice_start + p for p in pos], dtype=jnp.int32) + + def neg_mean(fs): + return -jnp.mean(_period_t_per_obs_loglike_full(fs, 1, metas)) + + hess_full = jax.hessian(neg_mean)(flat_super) + fullchain_own = np.asarray(hess_full[own_global][:, own_global]) + + np.testing.assert_allclose(fullchain_own, own_block_info, rtol=1e-4, atol=1e-8) + + +def _make_two_mixture_model(n_periods: int = 2) -> ModelSpec: + return ModelSpec( + factors={ + "skill": FactorSpec( + measurements=(("m1", "m2", "m3"),) * n_periods, + normalizations=Normalizations( + loadings=({"m1": 1},) * n_periods, + intercepts=({"m1": 0},) * n_periods, + ), + transition_function="linear", + ), + }, + n_mixtures=2, + ) + + +def _simulate_bimodal_data(*, n_obs: int, seed: int = 0) -> pd.DataFrame: + """Two-cluster initial distribution so the mixture weights are identified.""" + rng = np.random.default_rng(seed) + theta = np.zeros((n_obs, 2)) + in_high = rng.random(n_obs) < 0.5 + theta[:, 0] = np.where( + in_high, rng.normal(1.0, 0.7, n_obs), rng.normal(-1.0, 0.7, n_obs) + ) + theta[:, 1] = 0.1 + 0.7 * theta[:, 0] + rng.normal(0.0, 0.3, n_obs) + loadings = (1.0, 0.9, 1.1) + intercepts = (0.0, 0.2, -0.1) + sds = (0.3, 0.4, 0.35) + rows = [] + for i in range(n_obs): + for t in range(2): + row = {"caseid": i, "period": t} + for m_idx, meas in enumerate(("m1", "m2", "m3")): + row[meas] = ( + intercepts[m_idx] + + loadings[m_idx] * theta[i, t] + + rng.normal(0, sds[m_idx]) + ) + rows.append(row) + return pd.DataFrame(rows).set_index(["caseid", "period"]) + + +@pytest.fixture(scope="module") +def two_mixture_fit_and_metas(): + """Fit a 2-mixture linear model and build inference metas; reused across tests.""" + data = _simulate_bimodal_data(n_obs=300, seed=0) + model = _make_two_mixture_model(n_periods=2) + af_opts = AFEstimationOptions( + n_halton_points=20, + n_halton_points_shock=12, + optimizer_algorithm="scipy_lbfgsb", + ) + fit = estimate_af(model_spec=model, data=data, options=af_opts) + metas = _build_metas_for_test(fit, data, af_opts) + return fit, metas + + +@pytest.mark.end_to_end +def test_af_fullchain_loglike_depends_on_initial_mixture_weights( + two_mixture_fit_and_metas, +) -> None: + """The full-chain period-1 loglike differentiates wrt the period-0 weights. + + With more than one mixture component, the period-0 posterior mixture weights + are a (softmax) function of the initial mixture-weight parameters, and the + full-chain influence function must carry that dependence so the cross-period + covariance with the mixture-weight params is non-zero (audit F9). Freezing + the weights at their optimum value would zero this gradient while leaving the + likelihood value unchanged, so a faithful full-chain loglike has a non-zero + gradient at the mixture-weight positions. + """ + fit, metas = two_mixture_fit_and_metas + flat_super = jnp.asarray(fit.params["value"].to_numpy()) + + def mean_loglike(fs): + return jnp.mean(_period_t_per_obs_loglike_full(fs, 1, metas)) + + grad = np.asarray(jax.grad(mean_loglike)(flat_super)) + + mw_positions = [ + i + for i, loc in enumerate(fit.params.index) + if loc[0] == "mixture_weights" and loc[1] == 0 + ] + assert mw_positions, "expected free period-0 mixture-weight parameters" + assert np.max(np.abs(grad[mw_positions])) > 1e-6, ( + "period-1 full-chain loglike must depend on the period-0 mixture weights; " + f"got gradient {grad[mw_positions]} at the mixture-weight positions." + ) diff --git a/tests/test_af_initialization.py b/tests/test_af_initialization.py new file mode 100644 index 00000000..50827358 --- /dev/null +++ b/tests/test_af_initialization.py @@ -0,0 +1,105 @@ +"""Tests for AF initialization strategies.""" + +import numpy as np +import pytest + +from skillmodels.af.types import AFEstimationOptions +from skillmodels.amn.moments import spearman_factor_moments + + +def test_default_start_params_strategy_is_amn(): + """Default initialization runs the full AMN estimator upfront.""" + opts = AFEstimationOptions() + + assert opts.start_params_strategy == "amn" + + +def test_start_params_strategy_can_be_set_to_spearman(): + """Legacy Spearman pre-pass is available under the `"spearman"` name.""" + opts = AFEstimationOptions(start_params_strategy="spearman") + + assert opts.start_params_strategy == "spearman" + + +def test_start_params_strategy_can_be_set_to_constant(): + """Legacy constant init remains available for regression testing.""" + opts = AFEstimationOptions( + start_params_strategy="constant", + ) + + assert opts.start_params_strategy == "constant" + + +def test_spearman_seed_closer_to_truth_than_constant_default(): + """Moment-based seed is closer to truth than the static 0.5 default. + + Synthetic data with known sigma_meas and Var(latent) — assert that the + Spearman residual variance gives a starting sigma_meas closer to truth + than the legacy ``obs_sd * 0.5`` heuristic. + """ + rng = np.random.default_rng(0) + n = 1000 + truth_loadings = np.array([1.0, 1.2, 0.9]) + truth_meas_sds = np.array([0.3, 0.4, 0.3]) + truth_factor_sd = 1.5 + factor = rng.normal(0.0, truth_factor_sd, size=n) + eps = rng.normal(0.0, 1.0, size=(n, 3)) * truth_meas_sds + measurements = truth_loadings * factor[:, None] + eps + + spearman = spearman_factor_moments(measurements, anchor_idx=0) + + # Spearman recovers sigma_meas within 30% of truth. + for k in range(3): + assert spearman.meas_sds[k] == pytest.approx(truth_meas_sds[k], rel=0.30) + + # Legacy default is obs_sd * 0.5; for sigma_meas truth=0.3 with anchor + # variance λ²·Var(F)+sigma_meas² ≈ 1²·2.25+0.09 ≈ 2.34, obs_sd ≈ 1.53, + # default seed ≈ 0.76 — way off truth 0.3. Spearman should be closer. + obs_sds = np.nanstd(measurements, axis=0) + legacy_seeds = np.maximum(obs_sds * 0.5, 0.01) + spearman_dist = np.abs(spearman.meas_sds - truth_meas_sds).sum() + legacy_dist = np.abs(legacy_seeds - truth_meas_sds).sum() + assert spearman_dist < legacy_dist + + +def test_spearman_falls_back_for_single_measurement_factor(): + """`valid=False` → moment-init returns the same fallback values.""" + measurements = np.random.default_rng(0).normal(size=(100, 1)) + + result = spearman_factor_moments(measurements, anchor_idx=0) + + assert not result.valid + # Fallback values are constant; downstream code should keep using + # the static defaults instead of overriding from these. + assert result.loadings.shape == (1,) + assert result.meas_sds.shape == (1,) + + +def test_start_params_strategy_other_options_unchanged(): + """Other AFEstimationOptions fields remain at their existing defaults.""" + opts = AFEstimationOptions() + + assert opts.n_halton_points == 50 + assert opts.n_halton_points_shock == 30 + assert opts.optimizer_algorithm == "fides" + assert opts.two_stage is False + assert opts.coarse_fraction == 0.5 + assert opts.stability_floor == 1e-217 + assert opts.n_obs_per_batch is None + + +def test_moment_init_handles_pinned_anchor_loading(): + """When user pins loading to a non-1.0 value, anchor_loading respects it.""" + rng = np.random.default_rng(0) + n = 800 + loadings = np.array([2.0, 0.6, 1.2]) # anchor=2.0 (user normalization) + factor = rng.normal(0.0, 1.0, size=n) + eps = rng.normal(0.0, 0.4, size=(n, 3)) + measurements = loadings * factor[:, None] + eps + + result = spearman_factor_moments(measurements, anchor_idx=0, anchor_loading=2.0) + + assert result.loadings[0] == pytest.approx(2.0, abs=1e-12) + # Other loadings should be on the same scale. + assert result.loadings[1] == pytest.approx(0.6, rel=0.30) + assert result.loadings[2] == pytest.approx(1.2, rel=0.30) diff --git a/tests/test_af_layout_guards.py b/tests/test_af_layout_guards.py new file mode 100644 index 00000000..b2d846da --- /dev/null +++ b/tests/test_af_layout_guards.py @@ -0,0 +1,131 @@ +"""Guards that make the AF calendar adapter fail loudly on unsupported models. + +The shared integrand assembles the latent vector as all dynamic-state factors followed +by all reconstructed-endogenous factors, and the adapter is only defined for endogenous +factors that are reconstructed (no initial distribution). Two configurations would +otherwise be estimated silently against the wrong model: + +- an endogenous factor that still carries an initial distribution taking the + source-investment calendar (it is not a reconstructed investment); +- a public factor order that interleaves an endogenous factor before a dynamic-state + factor, which transposes loading columns relative to the assembled latent vector. + +Both must raise rather than estimate the wrong model. +""" + +import pytest + +from skillmodels.af.step_layout import AFFactorRole +from skillmodels.af.transition_period import ( + _factor_infos_from_spec, + _fail_if_endogenous_precedes_state, + _fail_if_unsupported_adapter_measurements, +) +from skillmodels.common.measurement_models import ProbitMeasurement +from skillmodels.common.model_spec import FactorSpec, ModelSpec, Normalizations + + +def _spec(*, has_initial_distribution: bool) -> ModelSpec: + return ModelSpec( + factors={ + "skills": FactorSpec( + measurements=(("s1",), ("s1",)), + normalizations=Normalizations( + loadings=({"s1": 1}, {"s1": 1}), intercepts=({"s1": 0}, {"s1": 0}) + ), + transition_function="linear", + ), + "investment": FactorSpec( + measurements=(("i1",), ("i1",)), + normalizations=Normalizations( + loadings=({"i1": 1}, {"i1": 1}), intercepts=({"i1": 0}, {"i1": 0}) + ), + transition_function="linear", + is_endogenous=True, + has_initial_distribution=has_initial_distribution, + ), + }, + ) + + +def test_factor_infos_marks_reconstructed_endogenous() -> None: + infos = _factor_infos_from_spec( + _spec(has_initial_distribution=False), endogenous_factors=("investment",) + ) + roles = {info.name: info.role for info in infos} + assert roles["investment"] == AFFactorRole.ENDOGENOUS + assert roles["skills"] == AFFactorRole.DYNAMIC + + +def test_factor_infos_rejects_endogenous_with_initial_distribution() -> None: + with pytest.raises(ValueError, match="has_initial_distribution"): + _factor_infos_from_spec( + _spec(has_initial_distribution=True), endogenous_factors=("investment",) + ) + + +def test_fail_if_endogenous_precedes_state_accepts_state_first() -> None: + # State before endogenous: matches the assembled [theta_states, inv_endog] order. + _fail_if_endogenous_precedes_state(("skills", "investment"), ("investment",)) + + +def test_fail_if_endogenous_precedes_state_rejects_interleaving() -> None: + with pytest.raises(ValueError, match="precede"): + _fail_if_endogenous_precedes_state(("investment", "skills"), ("investment",)) + + +def test_adapter_measurements_accept_plain_gaussian_non_crossloaded() -> None: + # The clean CNLSY-style model (Gaussian, one factor per measurement) is accepted. + _fail_if_unsupported_adapter_measurements(_spec(has_initial_distribution=False)) + + +def test_adapter_measurements_reject_cross_loaded_measurement() -> None: + # "shared" loads on both skills and investment -> not yet supported by the adapter. + model = ModelSpec( + factors={ + "skills": FactorSpec( + measurements=(("s1", "shared"), ("s1",)), + normalizations=Normalizations( + loadings=({"s1": 1}, {"s1": 1}), intercepts=({"s1": 0}, {"s1": 0}) + ), + transition_function="linear", + ), + "investment": FactorSpec( + measurements=(("i1", "shared"), ("i1",)), + normalizations=Normalizations( + loadings=({"i1": 1}, {"i1": 1}), intercepts=({"i1": 0}, {"i1": 0}) + ), + transition_function="linear", + is_endogenous=True, + has_initial_distribution=False, + ), + }, + ) + with pytest.raises(ValueError, match="cross-load"): + _fail_if_unsupported_adapter_measurements(model) + + +def test_adapter_measurements_reject_non_gaussian_family() -> None: + model = ModelSpec( + factors={ + "skills": FactorSpec( + measurements=(("s1",), ("s1",)), + normalizations=Normalizations( + loadings=({"s1": 1}, {"s1": 1}), intercepts=({"s1": 0}, {"s1": 0}) + ), + transition_function="linear", + ), + "investment": FactorSpec( + measurements=(("i1",), ("i1",)), + normalizations=Normalizations( + loadings=({"i1": 1}, {"i1": 1}), intercepts=({"i1": 0}, {"i1": 0}) + ), + transition_function="linear", + is_endogenous=True, + has_initial_distribution=False, + ), + }, + measurement_models={"i1": ProbitMeasurement()}, + ) + with pytest.raises(ValueError, match="Gaussian"): + _fail_if_unsupported_adapter_measurements(model) diff --git a/tests/test_af_limited_measurements.py b/tests/test_af_limited_measurements.py new file mode 100644 index 00000000..ea7a973b --- /dev/null +++ b/tests/test_af_limited_measurements.py @@ -0,0 +1,142 @@ +"""AF probit/Tobit measurement support: hand-computed likelihood acceptance tests. + +With fixed Halton nodes, replacing a Gaussian measure by a probit (or Tobit) +measure must equal a manually node-weighted likelihood -- there is no extra +approximation beyond the existing Halton integration. These tests pin that against +plain-numpy/scipy references. +""" + +import jax.numpy as jnp +import numpy as np +from scipy.stats import norm + +from skillmodels.af.likelihood import af_per_obs_loglike_initial +from skillmodels.common.measurement_models import MeasurementFamily + +_INF = float("inf") + + +def test_initial_probit_measure_matches_node_weighted_reference() -> None: + """A binary probit measure at period 0 equals a hand node-weighted likelihood. + + Single latent factor, single mixture component, no observed factors (so the + unconditional integrand runs). One Gaussian measure plus one probit measure; + the probit contributes ``log Phi((2y-1) eta)`` at each Halton node. + """ + n_factors = 1 + n_latent = 1 + n_components = 1 + n_measures = 2 + n_controls = 1 + + mu = 0.5 + chol = 1.1 + control_params = [0.1, -0.2] + loadings = [1.0, 0.8] + meas_sds = [0.5, 1.0] # probit sd is ignored by the kernel + + params = jnp.array( + [1.0, mu, chol, *control_params, *loadings, *meas_sds], + ) + loading_mask = jnp.array([[True], [True]]) + + n_obs = 4 + rng = np.random.default_rng(7) + y_gauss = rng.normal(0, 1, n_obs) + y_probit = (rng.random(n_obs) < 0.5).astype(float) + measurements = jnp.asarray(np.column_stack([y_gauss, y_probit])) + controls = jnp.asarray(rng.normal(0, 1, (n_obs, n_controls))) + + raw_nodes = np.array([-1.5, -0.5, 0.5, 1.5]) + node_w = np.exp(-0.5 * raw_nodes**2) + node_w = node_w / node_w.sum() + nodes = jnp.asarray(raw_nodes.reshape(-1, 1)) + weights = jnp.asarray(node_w) + + families = jnp.array( + [int(MeasurementFamily.GAUSSIAN), int(MeasurementFamily.PROBIT)] + ) + lowers = jnp.array([-_INF, -_INF]) + uppers = jnp.array([_INF, _INF]) + + per_obs = np.asarray( + af_per_obs_loglike_initial( + params, + n_factors=n_factors, + n_mixture_components=n_components, + n_measures=n_measures, + n_controls=n_controls, + measurements=measurements, + controls=controls, + loading_mask=loading_mask, + nodes=nodes, + weights=weights, + stability_floor=0.0, + n_latent_factors=n_latent, + measurement_families=families, + measurement_lowers=lowers, + measurement_uppers=uppers, + ) + ) + + control_arr = np.array(control_params).reshape(n_measures, n_controls) + load = np.array(loadings) + raw = np.asarray(raw_nodes) + expected = np.empty(n_obs) + for i in range(n_obs): + ctrl_i = np.asarray(controls[i]) + eta_const = control_arr @ ctrl_i # (n_measures,) + node_contrib = np.empty(len(raw)) + for q, z in enumerate(raw): + theta = mu + chol * z + eta = eta_const + load * theta + logp_g = norm.logpdf(y_gauss[i], loc=eta[0], scale=meas_sds[0]) + logp_p = norm.logcdf((2.0 * y_probit[i] - 1.0) * eta[1]) + node_contrib[q] = np.exp(logp_g + logp_p) + expected[i] = np.log(np.dot(node_w, node_contrib)) + + np.testing.assert_allclose(per_obs, expected, rtol=1e-6, atol=1e-9) + + +def test_initial_all_gaussian_families_match_default_path() -> None: + """Passing explicit all-Gaussian families equals omitting them (parity).""" + n_measures = 2 + params = jnp.array([1.0, 0.3, 1.0, 0.0, 0.0, 1.0, 0.7, 0.5, 0.6]) + loading_mask = jnp.array([[True], [True]]) + rng = np.random.default_rng(1) + measurements = jnp.asarray(rng.normal(0, 1, (5, n_measures))) + controls = jnp.asarray(np.ones((5, 1))) + raw = np.array([-1.0, 0.0, 1.0]) + w = np.exp(-0.5 * raw**2) + w = w / w.sum() + nodes = jnp.asarray(raw.reshape(-1, 1)) + weights = jnp.asarray(w) + + def _call(families, lowers, uppers): + return np.asarray( + af_per_obs_loglike_initial( + params, + n_factors=1, + n_mixture_components=1, + n_measures=n_measures, + n_controls=1, + measurements=measurements, + controls=controls, + loading_mask=loading_mask, + nodes=nodes, + weights=weights, + stability_floor=0.0, + n_latent_factors=1, + measurement_families=families, + measurement_lowers=lowers, + measurement_uppers=uppers, + ) + ) + + default = _call(None, None, None) + explicit = _call( + jnp.array([int(MeasurementFamily.GAUSSIAN)] * n_measures), + jnp.array([-_INF] * n_measures), + jnp.array([_INF] * n_measures), + ) + np.testing.assert_allclose(default, explicit, rtol=1e-12, atol=1e-12) diff --git a/tests/test_af_posterior_states.py b/tests/test_af_posterior_states.py new file mode 100644 index 00000000..6f4ca971 --- /dev/null +++ b/tests/test_af_posterior_states.py @@ -0,0 +1,252 @@ +"""Tests for AF posterior state extraction. + +Regression tests for the AF-F6 fix: posterior means are computed against the +per-observation, income-conditioned chained importance sample +(`samples_per_component`) weighted by `conditional_weights`, NOT from fresh +Halton draws against pooled per-component Gaussian summaries. +""" + +import jax +import jax.numpy as jnp +import numpy as np +import pandas as pd +import pytest + +from skillmodels.af import AFEstimationOptions, estimate_af +from skillmodels.af.posterior_states import ( + _compute_posterior_means, + get_af_posterior_states, +) +from skillmodels.af.types import ( + ConditionalDistribution, + MixtureComponent, +) +from skillmodels.common.model_spec import FactorSpec, ModelSpec, Normalizations + +jax.config.update("jax_enable_x64", True) + + +def _estimate_reconstructed_endogenous_model() -> tuple: + """Estimate a small reconstructed-endogenous (calendar-adapter) AF model. + + Investment is endogenous with `has_initial_distribution=False`, so the + source/destination calendar adapter is active and `get_af_posterior_states` + must consume the compiled layout rather than the single-period reconstruction. + Returns `(af_result, model, data)`. + """ + rng = np.random.default_rng(20240617) + n_obs, n_periods = 250, 3 + theta = np.zeros((n_obs, n_periods)) + inv = np.zeros((n_obs, n_periods)) + income = rng.normal(1.0, 0.5, n_obs) + theta[:, 0] = rng.normal(0, 1, n_obs) + inv[:, 0] = 0.5 * theta[:, 0] + 0.2 * income + rng.normal(0, 0.25, n_obs) + for t in range(n_periods - 1): + theta[:, t + 1] = ( + 0.05 + 0.6 * theta[:, t] + 0.3 * inv[:, t] + rng.normal(0, 0.3, n_obs) + ) + inv[:, t + 1] = ( + 0.5 * theta[:, t + 1] + 0.2 * income + rng.normal(0, 0.25, n_obs) + ) + + rows = [] + for i in range(n_obs): + for t in range(n_periods): + row = { + "caseid": i, + "period": t, + "s1": theta[i, t] + rng.normal(0, 0.3), + "s2": 0.3 + 0.8 * theta[i, t] + rng.normal(0, 0.35), + "s3": -0.1 + 1.1 * theta[i, t] + rng.normal(0, 0.4), + "income": income[i], + } + # Investment is measured only at the SOURCE periods (0, 1); it is + # reconstructed at the terminal period, so no terminal indicators. + if t < n_periods - 1: + row["i1"] = inv[i, t] + rng.normal(0, 0.3) + row["i2"] = 0.2 + 0.9 * inv[i, t] + rng.normal(0, 0.35) + row["i3"] = -0.1 + 1.2 * inv[i, t] + rng.normal(0, 0.4) + else: + row["i1"] = row["i2"] = row["i3"] = np.nan + rows.append(row) + data = pd.DataFrame(rows).set_index(["caseid", "period"]) + + inv_meas = (("i1", "i2", "i3"), ("i1", "i2", "i3"), ()) + model = ModelSpec( + factors={ + "skill": FactorSpec( + measurements=(("s1", "s2", "s3"),) * n_periods, + normalizations=Normalizations( + loadings=({"s1": 1},) * n_periods, + intercepts=({"s1": 0},) * n_periods, + ), + transition_function="linear", + ), + "investment": FactorSpec( + measurements=inv_meas, + normalizations=Normalizations( + loadings=({"i1": 1}, {"i1": 1}, {}), + intercepts=({"i1": 0}, {"i1": 0}, {}), + ), + transition_function="linear", + is_endogenous=True, + has_initial_distribution=False, + ), + }, + observed_factors=("income",), + ) + af_result = estimate_af( + model_spec=model, + data=data, + options=AFEstimationOptions( + n_halton_points=30, + n_halton_points_shock=15, + optimizer_algorithm="scipy_lbfgsb", + ), + ) + return af_result, model, data + + +def test_get_af_posterior_states_supports_calendar_adapter() -> None: + # An adapter model (reconstructed-endogenous investment) must yield posterior + # state means for the state factors, not raise the deferred-feature guard. + af_result, model, data = _estimate_reconstructed_endogenous_model() + + out = get_af_posterior_states(af_result=af_result, model_spec=model, data=data) + + states = out["unanchored_states"]["states"] + # State factors only (skill); the endogenous investment is not a state coordinate. + assert "skill" in states.columns + assert "investment" not in states.columns + assert np.isfinite(states["skill"].to_numpy()).all() + + # The period-0 posterior skill mean must track the clean skill signal s1. + p0 = states[states["period"] == 0].set_index("caseid")["skill"] + s1_0 = data.xs(0, level="period")["s1"].reindex(p0.index) + corr = np.corrcoef(p0.to_numpy(), s1_0.to_numpy())[0, 1] + assert corr > 0.5, f"period-0 skill posterior should track s1 (corr={corr:.2f})" + + +def _placeholder_cond_dist( + *, + samples_per_component: tuple, + conditional_weights: jax.Array | None, + mixture_weights: jax.Array, + n_state: int, +) -> ConditionalDistribution: + """Build a ConditionalDistribution with degenerate, unread placeholders. + + The fixed `_compute_posterior_means` must NOT read `components` / + `cond_means` / `cond_chols`, so we fill them with placeholders. + """ + n_components = len(mixture_weights) + return ConditionalDistribution( + mixture_weights=mixture_weights, + components=tuple( + MixtureComponent(mean=jnp.zeros(n_state), chol_cov=jnp.eye(n_state)) + for _ in range(n_components) + ), + samples_per_component=samples_per_component, + conditional_weights=conditional_weights, + cond_means=None, + cond_chols=None, + chain_links=(), + ) + + +def test_compute_posterior_means_respects_per_obs_income_conditioning() -> None: + n_obs = 2 + n_state = 1 + n_summary = 8 + + rng = np.random.default_rng(606) + # Obs 0's samples centered near -2.0, obs 1's near +2.0: two different + # income-conditioned priors. + arr = np.zeros((n_summary, n_obs, n_state)) + arr[:, 0, 0] = -2.0 + rng.normal(0, 0.05, n_summary) + arr[:, 1, 0] = 2.0 + rng.normal(0, 0.05, n_summary) + samples_per_component = (jnp.asarray(arr),) + + cond_dist = _placeholder_cond_dist( + samples_per_component=samples_per_component, + conditional_weights=jnp.ones((n_obs, 1)), + mixture_weights=jnp.array([1.0]), + n_state=n_state, + ) + + # Identical measurement residual for both observations. + measurements = jnp.array([[0.0], [0.0]]) + control_contrib = jnp.array([[0.0], [0.0]]) + full_loadings = jnp.array([[1.0]]) + meas_sds = jnp.array([0.5]) + + out = _compute_posterior_means( + cond_dist=cond_dist, + measurements=measurements, + control_contrib=control_contrib, + full_loadings=full_loadings, + meas_sds=meas_sds, + ) + + # The two observations must get DIFFERENT posterior means, each staying + # on the side of its own income-conditioned prior cluster. Under the old + # pooled code both would coincide. + assert out[0, 0] < -0.5 < 0.5 < out[1, 0] + + +def test_compute_posterior_means_uses_measurements() -> None: + n_summary = 16 + n_state = 1 + + rng = np.random.default_rng(607) + # Single obs, symmetric samples around 0. + base = rng.normal(0, 1.0, n_summary) + arr = base.reshape(n_summary, 1, 1) + samples_per_component = (jnp.asarray(arr),) + + cond_dist = _placeholder_cond_dist( + samples_per_component=samples_per_component, + conditional_weights=jnp.ones((1, 1)), + mixture_weights=jnp.array([1.0]), + n_state=n_state, + ) + + full_loadings = jnp.array([[1.0]]) + meas_sds = jnp.array([0.5]) + control_contrib = jnp.array([[0.0]]) + + out_low = _compute_posterior_means( + cond_dist=cond_dist, + measurements=jnp.array([[-1.5]]), + control_contrib=control_contrib, + full_loadings=full_loadings, + meas_sds=meas_sds, + ) + out_high = _compute_posterior_means( + cond_dist=cond_dist, + measurements=jnp.array([[1.5]]), + control_contrib=control_contrib, + full_loadings=full_loadings, + meas_sds=meas_sds, + ) + + # The posterior mean tracks the measurement (loading = 1). + assert out_low[0, 0] < 0.0 < out_high[0, 0] + + +def test_compute_posterior_means_raises_after_to_numpy() -> None: + cond_dist = _placeholder_cond_dist( + samples_per_component=(), # as `to_numpy()` produces + conditional_weights=None, + mixture_weights=jnp.array([1.0]), + n_state=1, + ) + + with pytest.raises(ValueError, match="to_numpy"): + _compute_posterior_means( + cond_dist=cond_dist, + measurements=jnp.array([[0.0]]), + control_contrib=jnp.array([[0.0]]), + full_loadings=jnp.array([[1.0]]), + meas_sds=jnp.array([0.5]), + ) diff --git a/tests/test_af_sequential_criterion.py b/tests/test_af_sequential_criterion.py new file mode 100644 index 00000000..edc694f4 --- /dev/null +++ b/tests/test_af_sequential_criterion.py @@ -0,0 +1,63 @@ +"""The AF result exposes its objective under an honest name. + +The per-period AF objective is a per-observation *mean* log-likelihood criterion, and +the aggregate is their sum -- a sequential/composite criterion, not a joint sample +log-likelihood. `AFEstimationResult` exposes that value as `sequential_criterion` with a +per-period breakdown in `period_mean_criteria`, while `loglikelihood` is retained as an +equal-valued alias for protocol conformance and back-compat. +""" + +import pandas as pd + +from skillmodels.af.types import AFEstimationResult, AFPeriodResult +from skillmodels.common.model_spec import FactorSpec, ModelSpec, Normalizations + + +def _model() -> ModelSpec: + return ModelSpec( + factors={ + "skills": FactorSpec( + measurements=(("s1",), ("s1",)), + normalizations=Normalizations( + loadings=({"s1": 1}, {"s1": 1}), intercepts=({"s1": 0}, {"s1": 0}) + ), + transition_function="linear", + ), + }, + ) + + +def test_sequential_criterion_aggregates_period_means() -> None: + period_results = ( + AFPeriodResult( + period=0, + params=pd.DataFrame(), + loglikelihood=-1.5, + success=True, + optimize_result=None, + ), + AFPeriodResult( + period=1, + params=pd.DataFrame(), + loglikelihood=-2.0, + success=True, + optimize_result=None, + ), + ) + means = tuple(pr.loglikelihood for pr in period_results) + total = sum(means) + result = AFEstimationResult( + period_results=period_results, + params=pd.DataFrame(), + model_spec=_model(), + conditional_distributions=(), + success=True, + loglikelihood=total, + sequential_criterion=total, + period_mean_criteria=means, + ) + + assert result.sequential_criterion == total + assert result.loglikelihood == result.sequential_criterion + assert result.period_mean_criteria == means + assert sum(result.period_mean_criteria) == result.sequential_criterion diff --git a/tests/test_af_step_assembly.py b/tests/test_af_step_assembly.py new file mode 100644 index 00000000..74c25d84 --- /dev/null +++ b/tests/test_af_step_assembly.py @@ -0,0 +1,195 @@ +"""Tests for assembling an AF step's target + importance arrays from a layout. + +This is the heart of the calendar fix: for step `s -> d`, the target block must source +destination skills from period `d` and source investment from period `s` (so age-7 +indicators measure I_0), and the importance block must include every static-persistent +factor's period-0 measurement rows at *every* step (the dropped-MC/MN fix), with their +fixed params pulled from the cumulative `HistoricalParams` (period-0 result), not the +immediately-previous step. +""" + +import numpy as np +import pandas as pd + +from skillmodels.af.step_assembly import assemble_step_arrays +from skillmodels.af.step_layout import ( + AFFactorInfo, + AFFactorRole, + HistoricalParams, + compile_af_step_layouts, +) + + +def _layouts(): + return compile_af_step_layouts( + ( + AFFactorInfo("skills", AFFactorRole.DYNAMIC, (("sk",), ("sk",), ("sk",))), + AFFactorInfo("MC", AFFactorRole.STATIC_PERSISTENT, (("mc",), (), ())), + AFFactorInfo( + "investment", AFFactorRole.ENDOGENOUS, (("inv",), ("inv",), ()) + ), + ), + n_periods=3, + ) + + +def _frames(): + # age-7 investment lives at period 0; age-9 at period 1. MC measured at period 0. + return { + 0: pd.DataFrame( + {"sk": [1.0, 2.0], "mc": [7.0, 8.0], "inv": [0.1, 0.2]}, index=[1, 2] + ), + 1: pd.DataFrame({"sk": [3.0, 4.0], "inv": [0.3, 0.4]}, index=[1, 2]), + 2: pd.DataFrame({"sk": [5.0, 6.0]}, index=[1, 2]), + } + + +def _historical(): + rows = [ + ("loadings", 0, "mc", "MC", 1.5), + ("controls", 0, "mc", "constant", 0.0), + ("meas_sds", 0, "mc", "-", 0.4), + ("loadings", 0, "sk", "skills", 1.0), + ("controls", 0, "sk", "constant", 0.0), + ("meas_sds", 0, "sk", "-", 0.5), + ("loadings", 1, "sk", "skills", 1.0), + ("controls", 1, "sk", "constant", 0.0), + ("meas_sds", 1, "sk", "-", 0.5), + ] + idx = pd.MultiIndex.from_tuples( + [(r[0], r[1], r[2], r[3]) for r in rows], + names=["category", "period", "name1", "name2"], + ) + return HistoricalParams(pd.DataFrame({"value": [r[4] for r in rows]}, index=idx)) + + +def test_step_0_to_1_target_sources_investment_from_period0() -> None: + arrays = assemble_step_arrays( + _layouts()[0], + _frames(), + ("skills", "MC", "investment"), + _historical(), + ("constant",), + ) + # Target columns: skills@1 (=[3,4]) and investment@0 (age-7, =[0.1,0.2]). + cols = {name: arrays.target_measurements[:, j] for j, name in arrays.target_order} + np.testing.assert_array_equal(cols[("sk", 1)], [3.0, 4.0]) + np.testing.assert_array_equal(cols[("inv", 0)], [0.1, 0.2]) + + +def test_step_1_to_2_importance_includes_static_mc_from_period0() -> None: + arrays = assemble_step_arrays( + _layouts()[1], + _frames(), + ("skills", "MC", "investment"), + _historical(), + ("constant",), + ) + imp = {name: arrays.importance_measurements[:, j] for j, name in arrays.imp_order} + # F3: MC_0 data is present in the 1->2 importance block (and source skills@1). + np.testing.assert_array_equal(imp[("mc", 0)], [7.0, 8.0]) + np.testing.assert_array_equal(imp[("sk", 1)], [3.0, 4.0]) + # MC's fixed loading/SD come from the period-0 history. + mc_row = [n for _, n in arrays.imp_order].index(("mc", 0)) + assert arrays.importance_loadings_flat[mc_row] == 1.5 + assert arrays.importance_meas_sds[mc_row] == 0.4 + + +def _frames_with_control(): + # A non-constant measurement control `x` whose value differs by period, so a row + # sourced from the wrong period is detectable. + return { + 0: pd.DataFrame( + {"sk": [1.0, 2.0], "mc": [7.0, 8.0], "inv": [0.1, 0.2], "x": [10.0, 20.0]}, + index=[1, 2], + ), + 1: pd.DataFrame( + {"sk": [3.0, 4.0], "inv": [0.3, 0.4], "x": [100.0, 200.0]}, index=[1, 2] + ), + 2: pd.DataFrame({"sk": [5.0, 6.0], "x": [1000.0, 2000.0]}, index=[1, 2]), + } + + +def _historical_with_control(): + rows = [ + ("loadings", 0, "mc", "MC", 1.5), + ("controls", 0, "mc", "x", 0.5), + ("meas_sds", 0, "mc", "-", 0.4), + ("loadings", 1, "sk", "skills", 1.0), + ("controls", 1, "sk", "x", 2.0), + ("meas_sds", 1, "sk", "-", 0.5), + ] + idx = pd.MultiIndex.from_tuples( + [(r[0], r[1], r[2], r[3]) for r in rows], + names=["category", "period", "name1", "name2"], + ) + return HistoricalParams(pd.DataFrame({"value": [r[4] for r in rows]}, index=idx)) + + +def test_importance_control_contrib_sources_each_row_from_its_control_period() -> None: + # 1->2 importance block: MC@0 (control_period 0) + source skills@1 (period 1). + # Each row's control contribution must use that row's OWN period's control data and + # fixed params, not one shared source-period matrix. + arrays = assemble_step_arrays( + _layouts()[1], + _frames_with_control(), + ("skills", "MC", "investment"), + _historical_with_control(), + ("x",), + ) + rows = [n for _, n in arrays.imp_order] + mc_row = rows.index(("mc", 0)) + sk_row = rows.index(("sk", 1)) + # MC_0: x@period0 ([10,20]) * 0.5; skills_1: x@period1 ([100,200]) * 2.0. + np.testing.assert_allclose( + arrays.importance_control_contrib[:, mc_row], [5.0, 10.0] + ) + np.testing.assert_allclose( + arrays.importance_control_contrib[:, sk_row], [200.0, 400.0] + ) + + +def _frames_with_string_ids(): + # Same data as `_frames`, but individuals keyed by non-integer (string) IDs. + return { + 0: pd.DataFrame( + {"sk": [1.0, 2.0], "mc": [7.0, 8.0], "inv": [0.1, 0.2]}, index=["a", "b"] + ), + 1: pd.DataFrame({"sk": [3.0, 4.0], "inv": [0.3, 0.4]}, index=["a", "b"]), + 2: pd.DataFrame({"sk": [5.0, 6.0]}, index=["a", "b"]), + } + + +def test_assemble_preserves_non_integer_ids() -> None: + # The adapter's contract is ID-indexed alignment, not numeric IDs: string/UUID + # individual identifiers must align rather than be coerced or rejected. + arrays = assemble_step_arrays( + _layouts()[0], + _frames_with_string_ids(), + ("skills", "MC", "investment"), + _historical(), + ("constant",), + ) + assert list(arrays.ids) == ["a", "b"] + cols = {name: arrays.target_measurements[:, j] for j, name in arrays.target_order} + np.testing.assert_array_equal(cols[("inv", 0)], [0.1, 0.2]) + + +def test_target_controls_source_each_row_from_its_control_period() -> None: + # 1->2 target block: skills@2 (control_period 2) + source investment@1 (period 1). + # The per-row control-data tensor must read each row's own period's control values. + arrays = assemble_step_arrays( + _layouts()[1], + _frames_with_control(), + ("skills", "MC", "investment"), + _historical_with_control(), + ("x",), + ) + order = [n for _, n in arrays.target_order] + sk_col = order.index(("sk", 2)) + inv_col = order.index(("inv", 1)) + # target_controls has shape (n_ids, n_target, n_controls); single control `x`. + # skills@2 reads x from period 2 ([1000,2000]); investment@1 reads x from period 1 + # ([100,200]) -- each row sourced from its own control_period. + np.testing.assert_allclose(arrays.target_controls[:, sk_col, 0], [1000.0, 2000.0]) + np.testing.assert_allclose(arrays.target_controls[:, inv_col, 0], [100.0, 200.0]) diff --git a/tests/test_af_step_compile.py b/tests/test_af_step_compile.py new file mode 100644 index 00000000..75a81c46 --- /dev/null +++ b/tests/test_af_step_compile.py @@ -0,0 +1,89 @@ +"""Tests for AF step param-index compilation and the cumulative param registry. + +A mixed-calendar target block (destination skills at `d`, source investment at `s`) +must still be emitted in the flat parser's global category order -- all controls, then +all loadings, then all measurement SDs -- while each row keeps its true `param_period`. +Importance terms read fixed values for period-0 static factors (MC/MN) that the +immediately-previous step result does not contain, so a cumulative `HistoricalParams` +registry keyed by the full MultiIndex is required. +""" + +import pandas as pd + +from skillmodels.af.step_layout import ( + AFFactorInfo, + AFFactorRole, + HistoricalParams, + compile_af_step_layouts, + compile_target_measurement_index, +) + + +def _cnlsy_factor_infos() -> tuple[AFFactorInfo, ...]: + return ( + AFFactorInfo("skills", AFFactorRole.DYNAMIC, (("sk_a", "sk_b"),) * 3), + AFFactorInfo("MC", AFFactorRole.STATIC_PERSISTENT, (("mc_1", "mc_2"), (), ())), + AFFactorInfo("MN", AFFactorRole.STATIC_PERSISTENT, (("mn_1",), (), ())), + AFFactorInfo( + "investment", + AFFactorRole.ENDOGENOUS, + (("inv_a", "inv_b"), ("inv_a", "inv_b"), ()), + ), + ) + + +def _params_df(rows: list[tuple[str, int, str, str, float]]) -> pd.DataFrame: + idx = pd.MultiIndex.from_tuples( + [(r[0], r[1], r[2], r[3]) for r in rows], + names=["category", "period", "name1", "name2"], + ) + return pd.DataFrame({"value": [r[4] for r in rows]}, index=idx) + + +def test_target_measurement_index_uses_global_category_order() -> None: + layout = compile_af_step_layouts(_cnlsy_factor_infos(), n_periods=3)[0] + index = compile_target_measurement_index(layout, controls=("constant",)) + categories = [tup[0] for tup in index] + # 4 target measures (2 skills + 2 inv): all controls, then loadings, then sds. + assert categories == ["controls"] * 4 + ["loadings"] * 4 + ["meas_sds"] * 4 + + +def test_target_measurement_index_keeps_true_param_periods() -> None: + layout = compile_af_step_layouts(_cnlsy_factor_infos(), n_periods=3)[0] + index = set(compile_target_measurement_index(layout, controls=("constant",))) + # destination skills indexed at period 1; source investment stays at period 0. + assert ("loadings", 1, "sk_a", "skills") in index + assert ("loadings", 0, "inv_a", "investment") in index + assert ("controls", 0, "inv_a", "constant") in index + assert ("meas_sds", 1, "sk_b", "-") in index + + +def test_historical_params_reaches_period0_static_factor() -> None: + initial = _params_df( + [ + ("loadings", 0, "mc_1", "MC", 1.3), + ("loadings", 0, "sk_a", "skills", 1.0), + ] + ) + step01 = _params_df( + [ + ("loadings", 1, "sk_a", "skills", 0.9), + ("loadings", 0, "inv_a", "investment", 0.7), + ] + ) + hist = HistoricalParams.from_param_frames([initial, step01]) + # MC_0 is reachable from the cumulative registry... + assert hist.value("loadings", 0, "mc_1", "MC") == 1.3 + # ...but NOT from the immediately-previous step result alone (the AF1 defect). + assert ("loadings", 0, "mc_1", "MC") not in step01.index + + +def test_historical_params_rejects_duplicate_index() -> None: + initial = _params_df([("loadings", 0, "sk_a", "skills", 1.0)]) + dup = _params_df([("loadings", 0, "sk_a", "skills", 2.0)]) + try: + HistoricalParams.from_param_frames([initial, dup]) + except ValueError: + return + msg = "Expected duplicate-index ValueError" + raise AssertionError(msg) diff --git a/tests/test_af_step_data.py b/tests/test_af_step_data.py new file mode 100644 index 00000000..34fa62ec --- /dev/null +++ b/tests/test_af_step_data.py @@ -0,0 +1,107 @@ +"""Tests for ID-aligned assembly of an AF step's measurement arrays. + +A mixed-calendar step block sources columns from different calendar periods +(destination skills at `d`, source investment at `s`). Those per-period frames may have +different individual orders and samples, so the assembler must join on individual ID +rather than concatenate positionally (the AF2 defect), and source each term's column +from its own `data_period`. +""" + +import numpy as np +import pandas as pd + +from skillmodels.af.step_data import ( + build_block_loading_mask, + build_step_measurement_array, +) +from skillmodels.af.step_layout import ( + AFFactorInfo, + AFFactorRole, + compile_af_step_layouts, +) + + +def _step_0_to_1_targets(): + layout = compile_af_step_layouts( + ( + AFFactorInfo("skills", AFFactorRole.DYNAMIC, (("sk_a",), ("sk_a",))), + AFFactorInfo("investment", AFFactorRole.ENDOGENOUS, (("inv_a",), ())), + ), + n_periods=2, + )[0] + return layout.target_terms() + + +def test_step_measurement_array_preserves_non_integer_ids() -> None: + # The assembler joins on individual ID, which must hold for string/UUID IDs, not + # only CNLSY-style numeric case IDs. + frame0 = pd.DataFrame({"sk_a": [10.0, 11.0], "inv_a": [1.0, 2.0]}, index=["b", "a"]) + frame1 = pd.DataFrame({"sk_a": [100.0, 200.0]}, index=["a", "b"]) + ids, values, term_order = build_step_measurement_array( + _step_0_to_1_targets(), {0: frame0, 1: frame1} + ) + assert ids.tolist() == ["a", "b"] + inv_col = term_order.index(("inv_a", 0)) + # investment from period 0, ID-aligned: a->2, b->1. + np.testing.assert_array_equal(values[:, inv_col], [2.0, 1.0]) + + +def test_step_measurement_array_sources_each_term_from_its_data_period() -> None: + # Period frames deliberately have DIFFERENT individual orders. + frame0 = pd.DataFrame( + {"sk_a": [10.0, 11.0, 12.0], "inv_a": [1.0, 2.0, 3.0]}, index=[2, 1, 3] + ) + frame1 = pd.DataFrame({"sk_a": [100.0, 200.0, 300.0]}, index=[3, 1, 2]) + ids, values, term_order = build_step_measurement_array( + _step_0_to_1_targets(), {0: frame0, 1: frame1} + ) + + assert ids.tolist() == [1, 2, 3] + # skills from period 1 (destination), ID-aligned: id1->200, id2->300, id3->100. + sk_col = term_order.index(("sk_a", 1)) + np.testing.assert_array_equal(values[:, sk_col], [200.0, 300.0, 100.0]) + # investment from period 0 (source), ID-aligned: id1->2, id2->1, id3->3. + inv_col = term_order.index(("inv_a", 0)) + np.testing.assert_array_equal(values[:, inv_col], [2.0, 1.0, 3.0]) + + +def test_step_measurement_array_uses_id_intersection_under_attrition() -> None: + # Individual 3 is missing from period 1; the step sample is the intersection. + frame0 = pd.DataFrame( + {"sk_a": [10.0, 11.0, 12.0], "inv_a": [1.0, 2.0, 3.0]}, index=[1, 2, 3] + ) + frame1 = pd.DataFrame({"sk_a": [100.0, 200.0]}, index=[1, 2]) + ids, values, term_order = build_step_measurement_array( + _step_0_to_1_targets(), {0: frame0, 1: frame1} + ) + assert ids.tolist() == [1, 2] + inv_col = term_order.index(("inv_a", 0)) + np.testing.assert_array_equal(values[:, inv_col], [1.0, 2.0]) + + +def test_step_measurement_array_does_not_mispair_positionally() -> None: + # If assembled positionally, id-2's investment (period 0, row 0 = 99) would be + # paired with id-2's skill (period 1, row 0 = 100), which is wrong. + frame0 = pd.DataFrame({"sk_a": [0.0, 0.0], "inv_a": [99.0, 7.0]}, index=[2, 1]) + frame1 = pd.DataFrame({"sk_a": [100.0, 500.0]}, index=[1, 2]) + ids, values, term_order = build_step_measurement_array( + _step_0_to_1_targets(), {0: frame0, 1: frame1} + ) + inv_col = term_order.index(("inv_a", 0)) + sk_col = term_order.index(("sk_a", 1)) + # id 1: inv=7 (period0), skill=100 (period1); id 2: inv=99, skill=500. + assert ids.tolist() == [1, 2] + np.testing.assert_array_equal(values[:, inv_col], [7.0, 99.0]) + np.testing.assert_array_equal(values[:, sk_col], [100.0, 500.0]) + + +def test_block_loading_mask_marks_each_term_factor() -> None: + targets = _step_0_to_1_targets() # sk_a -> skills, inv_a -> investment + # Latent order is [skills, investment]; the integrand dots loadings against it. + mask = build_block_loading_mask(targets, latent_factors=("skills", "investment")) + term_order = [(t.measurement, t.eval_node.value) for t in targets] + sk_row = term_order.index(("sk_a", "theta_dest")) + inv_row = term_order.index(("inv_a", "inv_src")) + # skills row loads only on the skills column; investment row only on investment. + np.testing.assert_array_equal(mask[sk_row], [True, False]) + np.testing.assert_array_equal(mask[inv_row], [False, True]) diff --git a/tests/test_af_step_layout.py b/tests/test_af_step_layout.py new file mode 100644 index 00000000..407588bf --- /dev/null +++ b/tests/test_af_step_layout.py @@ -0,0 +1,175 @@ +"""Tests for the AF source/destination step-layout compiler. + +The AF estimator is sequential: step `s -> d = s+1` estimates the transition, the +source-period investment equation, and a measurement block. Under the contemporaneous +public `ModelSpec`, an investment indicator declared at calendar period `c` measures +`I_c`. The compiler re-times these calendar declarations onto AF's sequential steps so +that, for step `s -> d`: + +- the FREE target block scores destination dynamic-state (skill) indicators on + `theta_d` and source endogenous (investment) indicators on `I_s`; +- the FIXED importance block scores source dynamic-state indicators on `theta_s` and + every static-persistent factor's period-0 indicators on its time-invariant value. + +This reproduces MATLAB `likelihood_01`/`likelihood_12` (target = {skill_{s+1}, inv_s}, +importance = {skill_s, MC_0, MN_0}) while the public spec stays contemporaneous. +""" + +from skillmodels.af.step_layout import ( + AFEval, + AFFactorInfo, + AFFactorRole, + compile_af_step_layouts, +) + + +def _cnlsy_factor_infos() -> tuple[AFFactorInfo, ...]: + """A minimal 3-period CNLSY-shaped factor set (skills, MC, MN, investment).""" + return ( + AFFactorInfo( + name="skills", + role=AFFactorRole.DYNAMIC, + measurements_by_period=( + ("sk_a", "sk_b"), + ("sk_a", "sk_b"), + ("sk_a", "sk_b"), + ), + ), + AFFactorInfo( + name="MC", + role=AFFactorRole.STATIC_PERSISTENT, + measurements_by_period=(("mc_1", "mc_2"), (), ()), + ), + AFFactorInfo( + name="MN", + role=AFFactorRole.STATIC_PERSISTENT, + measurements_by_period=(("mn_1",), (), ()), + ), + AFFactorInfo( + name="investment", + role=AFFactorRole.ENDOGENOUS, + measurements_by_period=(("inv_a", "inv_b"), ("inv_a", "inv_b"), ()), + ), + ) + + +def _term_keys(terms, role): + """Set of (measurement, data_period, param_period, eval, free) for one role.""" + return { + (t.measurement, t.data_period, t.param_period, t.eval_node, t.free) + for t in terms + if t.role == role + } + + +def test_compiles_one_layout_per_transition() -> None: + layouts = compile_af_step_layouts(_cnlsy_factor_infos(), n_periods=3) + assert len(layouts) == 2 + assert (layouts[0].source_period, layouts[0].destination_period) == (0, 1) + assert (layouts[1].source_period, layouts[1].destination_period) == (1, 2) + + +def test_step_0_to_1_target_block() -> None: + layout = compile_af_step_layouts(_cnlsy_factor_infos(), n_periods=3)[0] + # Destination skills on theta_d, source investment (age-7, calendar 0) on I_0. + assert _term_keys(layout.terms, "target") == { + ("sk_a", 1, 1, AFEval.THETA_DEST, True), + ("sk_b", 1, 1, AFEval.THETA_DEST, True), + ("inv_a", 0, 0, AFEval.INV_SRC, True), + ("inv_b", 0, 0, AFEval.INV_SRC, True), + } + + +def test_step_0_to_1_importance_block_includes_static_factors() -> None: + layout = compile_af_step_layouts(_cnlsy_factor_infos(), n_periods=3)[0] + # Source skills on theta_s plus the static MC_0/MN_0 densities (the F3 fix). + assert _term_keys(layout.terms, "importance") == { + ("sk_a", 0, 0, AFEval.THETA_SRC, False), + ("sk_b", 0, 0, AFEval.THETA_SRC, False), + ("mc_1", 0, 0, AFEval.STATIC, False), + ("mc_2", 0, 0, AFEval.STATIC, False), + ("mn_1", 0, 0, AFEval.STATIC, False), + } + + +def test_step_1_to_2_target_uses_age9_investment_on_i1() -> None: + layout = compile_af_step_layouts(_cnlsy_factor_infos(), n_periods=3)[1] + # Destination skills on theta_2, source investment (age-9, calendar 1) on I_1. + assert _term_keys(layout.terms, "target") == { + ("sk_a", 2, 2, AFEval.THETA_DEST, True), + ("sk_b", 2, 2, AFEval.THETA_DEST, True), + ("inv_a", 1, 1, AFEval.INV_SRC, True), + ("inv_b", 1, 1, AFEval.INV_SRC, True), + } + + +def test_step_1_to_2_importance_reapplies_period0_static_factors() -> None: + layout = compile_af_step_layouts(_cnlsy_factor_infos(), n_periods=3)[1] + # Source skills are now calendar 1; MC_0/MN_0 are re-applied unchanged. + assert _term_keys(layout.terms, "importance") == { + ("sk_a", 1, 1, AFEval.THETA_SRC, False), + ("sk_b", 1, 1, AFEval.THETA_SRC, False), + ("mc_1", 0, 0, AFEval.STATIC, False), + ("mc_2", 0, 0, AFEval.STATIC, False), + ("mn_1", 0, 0, AFEval.STATIC, False), + } + + +def test_static_persistent_does_not_leak_future_periods() -> None: + """A static factor contributes only its period-0 rows to every importance block. + + A static-persistent factor whose declarations span periods 0 and 2 re-applies its + period-0 measurement as a fixed importance term at every step, and never lets its + period-2 declaration leak forward into an earlier step's importance block. + """ + factor_infos = ( + AFFactorInfo( + name="skills", + role=AFFactorRole.DYNAMIC, + measurements_by_period=(("sk0",), ("sk1",), ("sk2",)), + ), + AFFactorInfo( + name="MC", + role=AFFactorRole.STATIC_PERSISTENT, + measurements_by_period=(("mc0",), (), ("mc2",)), + ), + AFFactorInfo( + name="MN", + role=AFFactorRole.STATIC_PERSISTENT, + measurements_by_period=(("mn0",), (), ()), + ), + ) + layouts = compile_af_step_layouts(factor_infos, n_periods=3) + step_01_static = { + (t.measurement, t.data_period) + for t in layouts[0].terms + if t.role == "importance" and t.eval_node == AFEval.STATIC + } + assert ("mc0", 0) in step_01_static + assert ("mc2", 2) not in step_01_static + assert ("mn0", 0) in step_01_static + + for layout in layouts: + step_static = { + (t.measurement, t.data_period) + for t in layout.terms + if t.role == "importance" and t.eval_node == AFEval.STATIC + } + assert ("mn0", 0) in step_static + + +def test_each_investment_calendar_wave_is_a_target_exactly_once() -> None: + layouts = compile_af_step_layouts(_cnlsy_factor_infos(), n_periods=3) + inv_targets = [ + (t.measurement, t.data_period) + for layout in layouts + for t in layout.terms + if t.role == "target" and t.eval_node == AFEval.INV_SRC + ] + # age-7 (calendar 0) and age-9 (calendar 1) each used once; no calendar-2 wave. + assert sorted(inv_targets) == [ + ("inv_a", 0), + ("inv_a", 1), + ("inv_b", 0), + ("inv_b", 1), + ] diff --git a/tests/test_af_t5_extension.py b/tests/test_af_t5_extension.py new file mode 100644 index 00000000..0374a872 --- /dev/null +++ b/tests/test_af_t5_extension.py @@ -0,0 +1,166 @@ +"""End-to-end test that AF works for T = 5 periods. + +The AF paper's iterative chain (Section 3) is described for general T, +but skillmodels' AF tests so far cover T = 3. This test runs the full +chain on a synthetic T=5 panel and confirms `estimate_af` produces +five per-period results with finite likelihoods and the expected +chain-link structure (k links after estimating period k). + +Marked `end_to_end` so it does not run in the default test suite. +""" + +import jax +import numpy as np +import pandas as pd +import pytest + +from skillmodels.af import AFEstimationOptions, estimate_af +from skillmodels.common.model_spec import ( + FactorSpec, + ModelSpec, + Normalizations, +) +from skillmodels.common.params_index import get_params_index +from skillmodels.common.process_model import process_model + +jax.config.update("jax_enable_x64", True) + + +def _build_t5_model() -> ModelSpec: + """Two-factor T=5 model: linear `state`, linear `inv`, three measures each.""" + return ModelSpec( + factors={ + "state": FactorSpec( + measurements=(("y1", "y2", "y3"),) * 5, + normalizations=Normalizations( + loadings=({"y1": 1},) * 5, + intercepts=({"y1": 0},) * 5, + ), + transition_function="linear", + ), + "inv": FactorSpec( + measurements=(("z1", "z2", "z3"),) * 5, + normalizations=Normalizations( + loadings=({"z1": 1},) * 5, + intercepts=({"z1": 0},) * 5, + ), + transition_function="linear", + ), + }, + ) + + +def _truth_params_t5(model: ModelSpec) -> pd.DataFrame: + """Build a truth params DataFrame for the T=5 model from the params index.""" + processed = process_model(model) + p_index = get_params_index( + update_info=processed.update_info, + labels=processed.labels, + dimensions=processed.dimensions, + transition_info=processed.transition_info, + endogenous_factors_info=processed.endogenous_factors_info, + ) + df = pd.DataFrame({"value": np.zeros(len(p_index))}, index=p_index) + cat = df.index.get_level_values("category") + df.loc[cat == "loadings", "value"] = 1.0 + df.loc[cat == "meas_sds", "value"] = 0.3 + df.loc[cat == "shock_sds", "value"] = 0.4 + df.loc[cat == "mixture_weights", "value"] = 1.0 + for aug_period in range(4): + for factor, other in (("state", "inv"), ("inv", "state")): + for regressor, val in ( + (factor, 0.7), + (other, 0.2), + ("constant", 0.1), + ): + loc = ("transition", aug_period, factor, regressor) + if loc in df.index: + df.loc[loc, "value"] = val + cholcov_diag_mask = pd.Series( + [ + idx[0] == "initial_cholcovs" + and "-" in idx[3] + and idx[3].split("-")[0] == idx[3].split("-")[1] + for idx in df.index + ], + index=df.index, + ) + df.loc[cholcov_diag_mask, "value"] = 1.0 + return df + + +def _simulate_synthetic_t5( + model: ModelSpec, + params: pd.DataFrame, + n_obs: int, + seed: int, +) -> pd.DataFrame: + """Simulate (states + measurements) directly for the T=5 model.""" + n_periods = 5 + rng = np.random.default_rng(seed) + state = rng.normal(0.0, 1.0, size=(n_obs, 2)) # (state_t, inv_t) + state_history = [state.copy()] + + def _val(loc: tuple) -> float: + return float(params.loc[loc, "value"]) + + for t in range(1, n_periods): + prev = state_history[-1] + new_state = np.zeros_like(prev) + for f, idx in (("state", 0), ("inv", 1)): + other_idx = 1 - idx + other = "inv" if f == "state" else "state" + a = _val(("transition", t - 1, f, f)) + b = _val(("transition", t - 1, f, other)) + c = _val(("transition", t - 1, f, "constant")) + sigma = _val(("shock_sds", t - 1, f, "-")) + new_state[:, idx] = ( + a * prev[:, idx] + + b * prev[:, other_idx] + + c + + sigma * rng.normal(size=n_obs) + ) + state_history.append(new_state) + + records: list[dict] = [] + for obs_id in range(n_obs): + for t in range(n_periods): + row: dict[str, float | int] = {"caseid": obs_id, "period": t} + st = state_history[t][obs_id] + for f, idx in (("state", 0), ("inv", 1)): + meas_prefix = "y" if f == "state" else "z" + for k in (1, 2, 3): + meas_name = f"{meas_prefix}{k}" + lam = _val(("loadings", t, meas_name, f)) + sigma_eps = _val(("meas_sds", t, meas_name, "-")) + row[meas_name] = float(lam * st[idx] + sigma_eps * rng.normal()) + records.append(row) + return pd.DataFrame.from_records(records).set_index(["caseid", "period"]) + + +@pytest.mark.end_to_end +def test_af_chain_runs_for_t5() -> None: + """`estimate_af` runs the full T=5 chain and produces finite per-period llik.""" + model = _build_t5_model() + params = _truth_params_t5(model) + data = _simulate_synthetic_t5(model, params, n_obs=200, seed=20260510) + + af_options = AFEstimationOptions( + n_halton_points=20, + n_halton_points_shock=10, + optimizer_algorithm="scipy_lbfgsb", + ) + + result = estimate_af(model_spec=model, data=data, options=af_options) + + assert len(result.period_results) == 5, ( + f"Expected 5 per-period results for T=5; got {len(result.period_results)}" + ) + for pr in result.period_results: + assert np.isfinite(pr.loglikelihood), ( + f"period {pr.period}: non-finite loglikelihood {pr.loglikelihood}" + ) + assert len(result.conditional_distributions) == 5 + # Each period after 0 carries one chain link per prior transition. + for t, cd in enumerate(result.conditional_distributions): + assert len(cd.chain_links) == max(t, 0) diff --git a/tests/test_af_validate_investment_calendar.py b/tests/test_af_validate_investment_calendar.py new file mode 100644 index 00000000..0d3c301c --- /dev/null +++ b/tests/test_af_validate_investment_calendar.py @@ -0,0 +1,115 @@ +"""Regression tests for the AF endogenous-investment measurement calendar. + +On the calendar-adapter path a reconstructed endogenous factor (investment, +`is_endogenous=True` and `has_initial_distribution=False`) is contemporaneous: a +period-c investment indicator measures `I_c`, the same calendar CHS / AMN read. +The adapter makes the public ModelSpec contemporaneous and the AF step assembler +re-times the source investment internally, so `validate_af_model` must NOT warn +that the indicators denote `I_{t-1}` or that estimators disagree on the calendar. +A user who shifted their data to satisfy such a warning would reintroduce the +original off-by-one bug. +""" + +import warnings + +from skillmodels.af.validate import validate_af_model +from skillmodels.common.model_spec import ( + FactorSpec, + ModelSpec, + Normalizations, +) + + +def _skills_factor() -> FactorSpec: + return FactorSpec( + measurements=(("y1", "y2", "y3"),) * 2, + normalizations=Normalizations( + loadings=({"y1": 1},) * 2, + intercepts=({"y1": 0},) * 2, + ), + transition_function="translog_af", + ) + + +def _lagged_calendar_warned(records: list[warnings.WarningMessage]) -> bool: + """Return whether any recorded warning teaches the stale lagged calendar.""" + return any( + "I_{t-1}" in str(r.message) + or "different investment calendars" in str(r.message) + or "generated from period" in str(r.message) + for r in records + ) + + +def test_no_lagged_calendar_warning_for_reconstructed_endogenous() -> None: + """A reconstructed endogenous factor with measurements emits no calendar warning. + + Under the calendar adapter its period-c indicators score the contemporaneous + `I_c` (shared with CHS / AMN), so `validate_af_model` must not claim they + denote `I_{t-1}` or that estimators read different investment calendars. + """ + model = ModelSpec( + factors={ + "skills": _skills_factor(), + "investment": FactorSpec( + measurements=((), ("z1", "z2", "z3")), + normalizations=Normalizations( + loadings=({}, {"z1": 1}), + intercepts=({}, {"z1": 0}), + ), + transition_function="linear", + is_endogenous=True, + has_initial_distribution=False, + ), + }, + ) + with warnings.catch_warnings(record=True) as records: + warnings.simplefilter("always") + validate_af_model(model) + assert not _lagged_calendar_warned(records) + + +def test_validate_af_model_no_calendar_warning_for_standard_investment() -> None: + """A standard (non-endogenous) investment factor measures the contemporaneous value. + + With `is_endogenous=False` the factor is an ordinary latent state factor whose + period-t measurements score I_t -- the same calendar as CHS/AMN -- so no + calendar warning fires. + """ + model = ModelSpec( + factors={ + "skills": _skills_factor(), + "investment": FactorSpec( + measurements=(("z1", "z2", "z3"),) * 2, + normalizations=Normalizations( + loadings=({"z1": 1},) * 2, + intercepts=({"z1": 0},) * 2, + ), + transition_function="linear", + ), + }, + ) + with warnings.catch_warnings(record=True) as records: + warnings.simplefilter("always") + validate_af_model(model) + assert not _lagged_calendar_warned(records) + + +def test_validate_af_model_no_calendar_warning_for_measurementless_endogenous() -> None: + """An endogenous factor with no measurements has nothing to mis-calendar.""" + model = ModelSpec( + factors={ + "skills": _skills_factor(), + "investment": FactorSpec( + measurements=((), ()), + normalizations=Normalizations(loadings=({}, {}), intercepts=({}, {})), + transition_function="linear", + is_endogenous=True, + has_initial_distribution=False, + ), + }, + ) + with warnings.catch_warnings(record=True) as records: + warnings.simplefilter("always") + validate_af_model(model) + assert not _lagged_calendar_warned(records) diff --git a/tests/test_af_validate_normalizations.py b/tests/test_af_validate_normalizations.py new file mode 100644 index 00000000..2daec9e8 --- /dev/null +++ b/tests/test_af_validate_normalizations.py @@ -0,0 +1,189 @@ +"""Regression tests for the AF period-0 normalization-anchor check (audit F7b). + +`validate_af_model` previously rejected only `normalizations is None`. A +`Normalizations` object whose period-0 maps are empty therefore slipped +through, leaving the initial factor distribution's affine orbit (scale + +location) unpinned and the trans-log model under-identified. + +The period-0 distribution is not produced by any transition, so its anchor +must be supplied directly: a loading/intercept normalization, a `fixed_params` +pin, or an equality constraint tying it to an anchored parameter. These tests +pin that period-0 check. Periods t>0 (where the transition can legitimately +propagate the anchor) are deliberately out of scope here -- the +transition-aware identification check is a separate (P4) item. +""" + +import functools +import warnings +from collections.abc import Mapping + +import optimagic as om +import pandas as pd +import pytest + +from skillmodels.af.validate import validate_af_model +from skillmodels.common.constraints import select_by_loc +from skillmodels.common.model_spec import ( + FactorSpec, + ModelSpec, + Normalizations, +) + + +def _model( + *, + skills_loadings: tuple[Mapping[str, float], ...], + skills_intercepts: tuple[Mapping[str, float], ...], + skills_transition: str = "translog_af", +) -> ModelSpec: + """Build a two-period AF model with controllable skills normalizations.""" + return ModelSpec( + factors={ + "skills": FactorSpec( + measurements=(("y1", "y2", "y3"),) * 2, + normalizations=Normalizations( + loadings=skills_loadings, + intercepts=skills_intercepts, + ), + transition_function=skills_transition, + ), + "investment": FactorSpec( + measurements=(("z1", "z2", "z3"),) * 2, + normalizations=Normalizations( + loadings=({"z1": 1},) * 2, + intercepts=({"z1": 0},) * 2, + ), + transition_function="linear", + is_endogenous=True, + ), + }, + ) + + +def test_validate_af_model_raises_on_empty_period0_loading() -> None: + model = _model( + skills_loadings=({}, {"y1": 1}), + skills_intercepts=({"y1": 0},) * 2, + ) + with pytest.raises(ValueError, match="period 0"): + validate_af_model(model) + + +def test_validate_af_model_raises_on_empty_period0_intercept() -> None: + model = _model( + skills_loadings=({"y1": 1},) * 2, + skills_intercepts=({}, {"y1": 0}), + ) + with pytest.raises(ValueError, match="period 0"): + validate_af_model(model) + + +def test_validate_af_model_raises_on_all_empty_normalizations() -> None: + model = _model( + skills_loadings=({}, {}), + skills_intercepts=({}, {}), + ) + with pytest.raises(ValueError, match="period 0"): + validate_af_model(model) + + +def test_validate_af_model_accepts_period0_loading_via_fixed_params() -> None: + model = _model( + skills_loadings=({}, {"y1": 1}), + skills_intercepts=({"y1": 0},) * 2, + ) + fixed = pd.DataFrame( + {"value": [1.0]}, + index=pd.MultiIndex.from_tuples( + [("loadings", 0, "y1", "skills")], + names=["category", "period", "name1", "name2"], + ), + ) + with warnings.catch_warnings(): + warnings.simplefilter("error", UserWarning) + assert validate_af_model(model, fixed_params=fixed) is None + + +def test_validate_af_model_accepts_period0_intercept_via_fixed_params() -> None: + model = _model( + skills_loadings=({"y1": 1},) * 2, + skills_intercepts=({}, {"y1": 0}), + ) + fixed = pd.DataFrame( + {"value": [0.0]}, + index=pd.MultiIndex.from_tuples( + [("controls", 0, "y1", "constant")], + names=["category", "period", "name1", "name2"], + ), + ) + with warnings.catch_warnings(): + warnings.simplefilter("error", UserWarning) + assert validate_af_model(model, fixed_params=fixed) is None + + +def test_validate_af_model_accepts_period0_loading_via_equality_constraint() -> None: + model = _model( + skills_loadings=({}, {"y1": 1}), + skills_intercepts=({"y1": 0},) * 2, + ) + group = pd.MultiIndex.from_tuples( + [ + ("loadings", 0, "y1", "skills"), + ("loadings", 1, "y1", "skills"), + ], + names=["category", "period", "name1", "name2"], + ) + constraints: list[om.constraints.Constraint] = [ + om.EqualityConstraint(selector=functools.partial(select_by_loc, loc=group)), + ] + with warnings.catch_warnings(): + warnings.simplefilter("error", UserWarning) + assert validate_af_model(model, constraints=constraints) is None + + +def test_validate_af_model_log_ces_requires_initial_intercept_anchor() -> None: + # The CES simplex replaces only the cross-period location alternative, not + # the absolute initial anchor mu_theta,0,1=0 (Pro F1). So plain log_ces / + # log_ces_af still need a period-0 intercept (location) anchor. + model = _model( + skills_loadings=({"y1": 1},) * 2, + skills_intercepts=({}, {}), + skills_transition="log_ces_af", + ) + with pytest.raises(ValueError, match="period 0"): + validate_af_model(model) + + +def test_validate_af_model_log_ces_still_requires_loading_anchor() -> None: + # The scale anchor (lambda_theta,0,1=1) is still required for log_ces. + model = _model( + skills_loadings=({}, {}), + skills_intercepts=({}, {}), + skills_transition="log_ces_af", + ) + with pytest.raises(ValueError, match="period 0"): + validate_af_model(model) + + +def test_validate_af_model_log_ces_with_constant_requires_intercept_anchor() -> None: + # log_ces_with_constant has a free additive level (no simplex location), so + # the measurement-intercept location anchor IS required (F8). + model = _model( + skills_loadings=({"y1": 1},) * 2, + skills_intercepts=({}, {}), + skills_transition="log_ces_with_constant", + ) + with pytest.raises(ValueError, match="period 0"): + validate_af_model(model) + + +def test_validate_af_model_accepts_empty_normalization_at_later_period() -> None: + # Period 0 is anchored; period 1 maps are empty. The transition can carry + # the anchor forward, so this must NOT raise (transition-aware check is P4). + model = _model( + skills_loadings=({"y1": 1}, {}), + skills_intercepts=({"y1": 0}, {}), + ) + with warnings.catch_warnings(): + warnings.simplefilter("error", UserWarning) + assert validate_af_model(model) is None diff --git a/tests/test_af_validate_production_leakage.py b/tests/test_af_validate_production_leakage.py new file mode 100644 index 00000000..dc9aec5c --- /dev/null +++ b/tests/test_af_validate_production_leakage.py @@ -0,0 +1,112 @@ +"""Regression tests for the AF observed-factor production-leakage guard. + +These pin two AF-F3 fixes: + +* the production factor using a built-in transition function that enumerates + parameters over `all_factors` (latent + observed) while observed factors + (e.g. income) are present triggers a loud `UserWarning`, because the + observed factors would otherwise enter the production function with free + coefficients (a silent wrong-estimand). The warning is non-breaking by + design (see deviation note in the implementation); and +* the paper-matching `translog_af` / `log_ces_af` variants (which only + enumerate production factors) are accepted without a warning. +""" + +import warnings + +import pytest + +from skillmodels.af.validate import validate_af_model +from skillmodels.common.model_spec import ( + CorrectionSpec, + FactorSpec, + ModelSpec, + Normalizations, +) + + +def _build_model( + *, + skills_transition: str, + observed_factors: tuple[str, ...], +) -> ModelSpec: + """Build a minimal AF model: one production factor + one investment factor.""" + return ModelSpec( + factors={ + "skills": FactorSpec( + measurements=(("y1", "y2", "y3"),) * 2, + normalizations=Normalizations( + loadings=({"y1": 1},) * 2, + intercepts=({"y1": 0},) * 2, + ), + transition_function=skills_transition, + ), + "investment": FactorSpec( + measurements=(("z1", "z2", "z3"),) * 2, + normalizations=Normalizations( + loadings=({"z1": 1},) * 2, + intercepts=({"z1": 0},) * 2, + ), + transition_function="linear", + is_endogenous=True, + ), + }, + observed_factors=observed_factors, + ) + + +def test_validate_af_model_warns_on_observed_factor_in_builtin_production() -> None: + model = _build_model( + skills_transition="translog", + observed_factors=("income",), + ) + with pytest.warns(UserWarning, match="only through the investment equation"): + validate_af_model(model) + + +def test_validate_af_model_no_warning_when_no_observed_factors() -> None: + model = _build_model( + skills_transition="translog", + observed_factors=(), + ) + # No observed factors means no leakage is possible: no leakage warning. + with warnings.catch_warnings(): + warnings.simplefilter("error", UserWarning) + assert validate_af_model(model) is None + + +def test_validate_af_model_no_warning_with_translog_af() -> None: + model = _build_model( + skills_transition="translog_af", + observed_factors=("income",), + ) + # `translog_af` enumerates production factors only -> not leaky, no warning. + with warnings.catch_warnings(): + warnings.simplefilter("error", UserWarning) + assert validate_af_model(model) is None + + +def test_validate_af_model_raises_on_correction_spec() -> None: + # AF implements only the kappa=0 (exogenous-investment) special case, so a + # CorrectionSpec must raise loudly rather than silently estimate a different + # estimand than CHS on the identical spec. + model = _build_model( + skills_transition="translog_af", + observed_factors=("income",), + ) + investment = FactorSpec( + measurements=(("z1", "z2", "z3"),) * 2, + normalizations=Normalizations( + loadings=({"z1": 1},) * 2, + intercepts=({"z1": 0},) * 2, + ), + transition_function="linear", + is_endogenous=True, + correction=CorrectionSpec(instruments=("income",)), + ) + model = ModelSpec( + factors={"skills": model.factors["skills"], "investment": investment}, + observed_factors=("income",), + ) + with pytest.raises(NotImplementedError, match="control-function correction"): + validate_af_model(model) diff --git a/tests/test_amn_estimate.py b/tests/test_amn_estimate.py new file mode 100644 index 00000000..e218df7a --- /dev/null +++ b/tests/test_amn_estimate.py @@ -0,0 +1,455 @@ +"""Tests for `skillmodels.amn.estimate.estimate_amn` (end-to-end orchestration).""" + +import numpy as np +import optimagic as om +import pandas as pd +import pytest + +from skillmodels.amn import estimate_amn +from skillmodels.amn.estimate import _fail_if_standalone_unsupported +from skillmodels.amn.mixture_em import InsufficientCompleteCasesError +from skillmodels.amn.types import AMNEstimationOptions +from skillmodels.common.model_spec import ( + FactorSpec, + ModelSpec, + Normalizations, +) +from skillmodels.common.process_model import process_model + + +def _tiny_model() -> ModelSpec: + return ModelSpec( + factors={ + "skills": FactorSpec( + measurements=(("y1", "y2", "y3"), ("y1", "y2", "y3")), + normalizations=Normalizations( + loadings=({"y1": 1}, {"y1": 1}), + intercepts=({"y1": 0}, {}), + ), + transition_function="linear", + ), + }, + n_mixtures=2, + ) + + +def _tiny_ces_model() -> ModelSpec: + """A model whose skill transition is restricted CES (`log_ces`). + + AMN cannot consistently estimate this standalone (no primitive-scale + recovery), so estimate_amn must refuse it unless it is seeding estimate_chs. + """ + return ModelSpec( + factors={ + "skills": FactorSpec( + measurements=(("y1", "y2", "y3"), ("y1", "y2", "y3")), + normalizations=Normalizations( + loadings=({"y1": 1}, {"y1": 1}), + intercepts=({"y1": 0}, {}), + ), + transition_function="log_ces", + ), + }, + n_mixtures=2, + ) + + +def _tiny_data(n: int = 1500, seed: int = 0) -> pd.DataFrame: + rng = np.random.default_rng(seed) + rows = [] + for caseid in range(n): + f0 = rng.normal() + f1 = 0.6 * f0 + rng.normal(0, 0.5) + for period, f in [(0, f0), (1, f1)]: + rows.append( + { + "caseid": caseid, + "period": period, + "y1": f + rng.normal(0, 0.3), + "y2": 0.9 * f + rng.normal(0, 0.4), + "y3": 1.1 * f + rng.normal(0, 0.5), + } + ) + return pd.DataFrame(rows).set_index(["caseid", "period"]) + + +def test_estimate_amn_produces_combined_params_dataframe(): + model = _tiny_model() + data = _tiny_data(n=1500) + options = AMNEstimationOptions(n_simulation_draws=5000, seed=0) + + result = estimate_amn(model, data, options) + + assert result.params.index.names == [ + "category", + "aug_period", + "name1", + "name2", + ] + cats = set(result.params.index.get_level_values("category")) + assert {"loadings", "meas_sds", "transition", "shock_sds"} <= cats + # 6 measurement loadings, 6 meas_sds, 1 transition (slope on skills) + + # constant for period 0, 1 shock_sds for period 0. + assert "controls" in cats # measurement intercepts collapse to controls + + +def _subsample_model() -> ModelSpec: + """Model whose `skills` factor has one rotating-subsample measurement. + + Measured by full-sample y1 (normalization) and y2, plus y_sub, which is + missing for almost every individual. + """ + return ModelSpec( + factors={ + "skills": FactorSpec( + measurements=(("y1", "y2", "y_sub"), ("y1", "y2", "y_sub")), + normalizations=Normalizations( + loadings=({"y1": 1}, {"y1": 1}), + intercepts=({"y1": 0}, {}), + ), + transition_function="linear", + ), + }, + n_mixtures=2, + ) + + +def _subsample_data(n: int = 1500, seed: int = 0) -> pd.DataFrame: + rng = np.random.default_rng(seed) + rows = [] + for caseid in range(n): + f0 = rng.normal() + f1 = 0.6 * f0 + rng.normal(0, 0.5) + for period, f in [(0, f0), (1, f1)]: + # y_sub observed only for the very first individual: the full + # complete-case count (1) is below the 2 mixture components, exactly + # the rotating-subsample regime that makes complete-case EM infeasible. + y_sub = f + rng.normal(0, 0.3) if caseid == 0 else np.nan + rows.append( + { + "caseid": caseid, + "period": period, + "y1": f + rng.normal(0, 0.3), + "y2": 0.9 * f + rng.normal(0, 0.4), + "y_sub": y_sub, + } + ) + return pd.DataFrame(rows).set_index(["caseid", "period"]) + + +def test_estimate_amn_complete_case_raises_on_subsample_measurement(): + """Default complete-case Stage 1 raises an informative error on subsamples. + + With a rotating-subsample measurement the full augmented vector has too few + complete cases (1 < 2 components) to fit the mixture. The default + complete-case method must raise `InsufficientCompleteCasesError` pointing at + the missing-data method, rather than silently dropping the measurement or + switching methods. + """ + model = _subsample_model() + data = _subsample_data(n=1500) + options = AMNEstimationOptions(n_simulation_draws=5000, seed=0) + + with pytest.raises(InsufficientCompleteCasesError, match="missing_data"): + estimate_amn(model, data, options) + + +def test_estimate_amn_missing_data_includes_subsample_measurement(): + """The missing-data method seeds on the full set, keeping the subsample. + + Marginalising over missing entries needs no complete cases, so the subsample + measurement `y_sub` is retained in the recovered loadings rather than + dropped. Same interface as the default -- only `mixture_em_method` differs. + """ + model = _subsample_model() + data = _subsample_data(n=1500) + options = AMNEstimationOptions( + n_simulation_draws=5000, seed=0, mixture_em_method="missing_data" + ) + + result = estimate_amn(model, data, options) + + meas = result.params.xs("loadings", level="category").index.get_level_values( + "name1" + ) + assert "y_sub" in set(meas) # subsample measurement retained, not dropped + assert "y2" in set(meas) + + +def _split_panel_data(n: int = 1000, seed: int = 0) -> pd.DataFrame: + """Unbalanced panel: each individual is observed in exactly one period. + + No individual spans both periods, so the augmented vector has zero + complete-case rows -- the regime that forces the missing-data EM. + """ + rng = np.random.default_rng(seed) + rows = [] + for caseid in range(n): + f = rng.normal() + period = caseid % 2 + rows.append( + { + "caseid": caseid, + "period": period, + "y1": f + rng.normal(0, 0.3), + "y2": 0.9 * f + rng.normal(0, 0.4), + "y3": 1.1 * f + rng.normal(0, 0.5), + } + ) + return pd.DataFrame(rows).set_index(["caseid", "period"]) + + +def test_estimate_amn_complete_case_raises_on_unbalanced_panel(): + """With zero complete-case rows the default method raises, no silent switch.""" + model = _tiny_model() + data = _split_panel_data(n=1000) + options = AMNEstimationOptions(n_simulation_draws=2000, seed=0) + + with pytest.raises(InsufficientCompleteCasesError, match="missing_data"): + estimate_amn(model, data, options) + + +def test_estimate_amn_missing_data_fits_unbalanced_panel(): + """The missing-data method fits the mixture even with no complete rows. + + Each individual is observed in exactly one period, so columns from the two + periods are never co-observed: the EM still fits (and recovers the means) + but warns that the cross-period covariances are unidentified. + """ + model = _tiny_model() + data = _split_panel_data(n=1000) + options = AMNEstimationOptions( + n_simulation_draws=2000, seed=0, mixture_em_method="missing_data" + ) + + with pytest.warns(RuntimeWarning, match="co-observation"): + result = estimate_amn(model, data, options) + + assert isinstance(result.success, bool) + assert result.stages.mixture.means.shape[0] == 2 + + +@pytest.mark.parametrize("override", ["start_params", "fixed_params"]) +def test_estimate_amn_rejects_param_overrides(override): + """estimate_amn refuses start_params wholesale and fixed_params it cannot honour. + + `start_params` has no single free optimisation to warm-start, so any pin is + refused. `fixed_params` is honoured for the categories owned by the stage + that fits them (transition, loadings, controls, meas_sds); a pin on a + category AMN cannot hold in-stage (here a derived `shock_sds` residual SD) + still raises rather than silently overwriting the estimate. + """ + model = _tiny_model() + data = _tiny_data(n=1500) + options = AMNEstimationOptions(n_simulation_draws=2000, seed=0) + + pin = pd.DataFrame( + {"value": [0.42]}, + index=pd.MultiIndex.from_tuples( + [("shock_sds", 0, "skills", "-")], + names=["category", "aug_period", "name1", "name2"], + ), + ) + + callers = { + "start_params": lambda: estimate_amn(model, data, options, start_params=pin), + "fixed_params": lambda: estimate_amn(model, data, options, fixed_params=pin), + } + + with pytest.raises(NotImplementedError): + callers[override]() + + +def test_estimate_amn_honours_fixed_loading(): + """A pinned measurement loading is held in the Stage-2 minimum distance. + + The free fit would estimate the y2 loading from the moments; pinning it must + hold it exactly while the other structural parameters adjust around it. + """ + model = _tiny_model() + data = _tiny_data(n=1500) + options = AMNEstimationOptions(n_simulation_draws=2000, seed=0) + + pin = pd.DataFrame( + {"value": [0.8]}, + index=pd.MultiIndex.from_tuples( + [("loadings", 0, "y2", "skills")], + names=["category", "aug_period", "name1", "name2"], + ), + ) + + result = estimate_amn(model, data, options, fixed_params=pin) + + got = result.params.loc[("loadings", 0, "y2", "skills"), "value"] + assert got == pytest.approx(0.8) + + +def test_estimate_amn_honours_fixed_meas_sd(): + """A pinned measurement SD is held in the Stage-2 minimum distance.""" + model = _tiny_model() + data = _tiny_data(n=1500) + options = AMNEstimationOptions(n_simulation_draws=2000, seed=0) + + pin = pd.DataFrame( + {"value": [0.5]}, + index=pd.MultiIndex.from_tuples( + [("meas_sds", 0, "y2", "-")], + names=["category", "aug_period", "name1", "name2"], + ), + ) + + result = estimate_amn(model, data, options, fixed_params=pin) + + got = result.params.loc[("meas_sds", 0, "y2", "-"), "value"] + assert got == pytest.approx(0.5) + + +def test_estimate_amn_rejects_pinning_normalized_loading(): + """Pinning a loading the model already normalizes is a clear error. + + `y1` is the loading-normalized measure (lambda = 1), so it is not a free + Stage-2 parameter; trying to pin it must raise rather than silently no-op. + """ + model = _tiny_model() + data = _tiny_data(n=1500) + options = AMNEstimationOptions(n_simulation_draws=2000, seed=0) + + pin = pd.DataFrame( + {"value": [2.0]}, + index=pd.MultiIndex.from_tuples( + [("loadings", 0, "y1", "skills")], + names=["category", "aug_period", "name1", "name2"], + ), + ) + + with pytest.raises(ValueError, match="normaliz"): + estimate_amn(model, data, options, fixed_params=pin) + + +def test_estimate_amn_rejects_constraints(): + """A non-empty constraints list is refused; the AMN stages cannot honour it.""" + model = _tiny_model() + data = _tiny_data(n=1500) + options = AMNEstimationOptions(n_simulation_draws=2000, seed=0) + + constraint = om.EqualityConstraint( + selector=lambda params: params.loc[[("loadings", 1, "y2", "skills")]] + ) + + with pytest.raises(NotImplementedError): + estimate_amn(model, data, options, constraints=[constraint]) + + +def test_estimate_amn_standalone_rejects_restricted_ces(): + """Standalone AMN refuses a restricted-CES model it cannot consistently estimate. + + The restricted-CES (`log_ces`) Stage-3 regression omits Freyberger's + primitive-scale recovery, so a standalone fit would return inconsistent CES + parameters. estimate_amn must raise instead, pointing to log_ces_general or + seeding estimate_chs. + """ + model = _tiny_ces_model() + data = _tiny_data(n=500) + options = AMNEstimationOptions(n_simulation_draws=2000, seed=0) + + with pytest.raises(NotImplementedError, match="restricted-CES"): + estimate_amn(model, data, options) + + +def test_amn_seeding_bypasses_restricted_ces_guard(): + """The standalone guard does not fire when AMN is seeding estimate_chs. + + `linearize_control_function=True` marks the CHS-seeding context (CHS re-fits + every parameter), so a rough restricted-CES seed is acceptable; the guard + must let it through. A non-CES model never trips the guard either. + """ + ces = process_model(_tiny_ces_model()) + # Seeding context: no raise even though the transition is restricted CES. + _fail_if_standalone_unsupported(ces, for_start_values=True) + # Standalone non-CES model: no raise. + _fail_if_standalone_unsupported( + process_model(_tiny_model()), for_start_values=False + ) + # Standalone CES: raises (mirrors the integration test above). + with pytest.raises(NotImplementedError, match="restricted-CES"): + _fail_if_standalone_unsupported(ces, for_start_values=False) + + +def test_estimate_amn_standalone_rejects_log_ces_af(): + """log_ces_af is restricted CES too (Pro F6) and must trip the guard.""" + model = ModelSpec( + factors={ + "skills": FactorSpec( + measurements=(("y1", "y2", "y3"), ("y1", "y2", "y3")), + normalizations=Normalizations( + loadings=({"y1": 1}, {"y1": 1}), + intercepts=({"y1": 0}, {}), + ), + transition_function="log_ces_af", + ), + }, + n_mixtures=2, + ) + processed = process_model(model) + with pytest.raises(NotImplementedError, match="restricted-CES"): + _fail_if_standalone_unsupported(processed, for_start_values=False) + + +def test_estimate_amn_returns_success_flag(): + model = _tiny_model() + data = _tiny_data(n=1500) + options = AMNEstimationOptions(n_simulation_draws=2000, seed=1) + + result = estimate_amn(model, data, options) + + assert isinstance(result.success, bool) + assert result.stages.mixture.weights.shape == (2,) + assert result.stages.structural.factor_period_slots == ( + (0, "skills"), + (1, "skills"), + ) + + +def test_estimate_amn_honours_fixed_transition_constant(): + """A pinned transition constant is held exactly in the Stage-3 regression. + + The free fit would put a nonzero intercept on the skills production + regression; pinning it to 0 must partial the intercept out and report + exactly 0, leaving the other coefficients free. + """ + model = _tiny_model() + data = _tiny_data(n=1500) + options = AMNEstimationOptions(n_simulation_draws=5000, seed=0) + + pin = pd.DataFrame( + {"value": [0.0]}, + index=pd.MultiIndex.from_tuples( + [("transition", 0, "skills", "constant")], + names=["category", "aug_period", "name1", "name2"], + ), + ) + + result = estimate_amn(model, data, options, fixed_params=pin) + + got = result.params.loc[("transition", 0, "skills", "constant"), "value"] + assert got == 0.0 + + +def test_estimate_amn_honours_fixed_transition_slope(): + """A pinned transition slope is held at its value, not re-estimated.""" + model = _tiny_model() + data = _tiny_data(n=1500) + options = AMNEstimationOptions(n_simulation_draws=5000, seed=0) + + pin = pd.DataFrame( + {"value": [0.3]}, + index=pd.MultiIndex.from_tuples( + [("transition", 0, "skills", "skills")], + names=["category", "aug_period", "name1", "name2"], + ), + ) + + result = estimate_amn(model, data, options, fixed_params=pin) + + got = result.params.loc[("transition", 0, "skills", "skills"), "value"] + assert got == pytest.approx(0.3) diff --git a/tests/test_amn_inference.py b/tests/test_amn_inference.py new file mode 100644 index 00000000..a5ebb5bf --- /dev/null +++ b/tests/test_amn_inference.py @@ -0,0 +1,146 @@ +"""Tests for `skillmodels.amn.inference.compute_amn_standard_errors`.""" + +import dataclasses + +import numpy as np +import pandas as pd +import pytest + +import skillmodels.amn.inference as inf +from skillmodels.amn import compute_amn_standard_errors, estimate_amn +from skillmodels.amn.types import AMNEstimationOptions +from skillmodels.common.model_spec import ( + FactorSpec, + ModelSpec, + Normalizations, +) + + +def _tiny_model() -> ModelSpec: + return ModelSpec( + factors={ + "skills": FactorSpec( + measurements=(("y1", "y2", "y3"), ("y1", "y2", "y3")), + normalizations=Normalizations( + loadings=({"y1": 1}, {"y1": 1}), + intercepts=({"y1": 0}, {}), + ), + transition_function="linear", + ), + }, + n_mixtures=2, + ) + + +def _tiny_data(n: int = 800, seed: int = 0) -> pd.DataFrame: + rng = np.random.default_rng(seed) + rows = [] + for caseid in range(n): + f0 = rng.normal() + f1 = 0.6 * f0 + rng.normal(0, 0.5) + for period, f in [(0, f0), (1, f1)]: + rows.append( + { + "caseid": caseid, + "period": period, + "y1": f + rng.normal(0, 0.3), + "y2": 0.9 * f + rng.normal(0, 0.4), + "y3": 1.1 * f + rng.normal(0, 0.5), + } + ) + return pd.DataFrame(rows).set_index(["caseid", "period"]) + + +def test_bootstrap_returns_expected_shapes(): + model = _tiny_model() + data = _tiny_data(n=500, seed=0) + options = AMNEstimationOptions(n_simulation_draws=1000, seed=0) + fit = estimate_amn(model, data, options) + + inference = compute_amn_standard_errors(fit, data, options, n_boot=5, seed=11) + + assert inference.n_boot == 5 + assert inference.n_clusters == 500 + assert inference.standard_errors.shape[0] == fit.params.shape[0] + assert inference.replicate_params.shape == (5, fit.params.shape[0]) + assert inference.vcov.shape == (fit.params.shape[0], fit.params.shape[0]) + + +def test_bootstrap_standard_errors_non_negative_and_finite_where_replicates_finite(): + model = _tiny_model() + data = _tiny_data(n=500, seed=1) + options = AMNEstimationOptions(n_simulation_draws=1000, seed=0) + fit = estimate_amn(model, data, options) + + inference = compute_amn_standard_errors(fit, data, options, n_boot=8, seed=42) + + # Wherever we have at least two finite replicates for a parameter, + # the std should be finite and non-negative. + for col in inference.standard_errors.index: + finite = inference.replicate_params[col].dropna() + if len(finite) >= 2: + se = inference.standard_errors[col] + assert np.isfinite(se) + assert se >= 0.0 + + +def test_bootstrap_uses_distinct_reproducible_replicate_seeds(monkeypatch): + model = _tiny_model() + data = _tiny_data(n=500, seed=0) + options = AMNEstimationOptions(n_simulation_draws=1000, seed=0) + fit = estimate_amn(model, data, options) + + real = inf.estimate_amn + + def make_spy(record: list[int]): + def spy(model_spec, boot_data, amn_options): + record.append(amn_options.seed) + return real(model_spec, boot_data, amn_options) + + return spy + + seen_seeds: list[int] = [] + monkeypatch.setattr(inf, "estimate_amn", make_spy(seen_seeds)) + compute_amn_standard_errors(fit, data, options, n_boot=4, seed=7) + + # All four replicate seeds are distinct (independent random streams). + assert len(seen_seeds) == 4 + assert len(set(seen_seeds)) == 4 + + # Same top-level seed reproduces the exact same replicate seeds. + seen_again: list[int] = [] + monkeypatch.setattr(inf, "estimate_amn", make_spy(seen_again)) + compute_amn_standard_errors(fit, data, options, n_boot=4, seed=7) + assert seen_again == seen_seeds + + +def test_bootstrap_excludes_nonconverged_replicate(monkeypatch): + model = _tiny_model() + data = _tiny_data(n=500, seed=0) + options = AMNEstimationOptions(n_simulation_draws=1000, seed=0) + fit = estimate_amn(model, data, options) + + real = inf.estimate_amn + sentinel = -999.0 + call_counter = {"n": 0} + + def spy(model_spec, boot_data, amn_options): + idx = call_counter["n"] + call_counter["n"] += 1 + real_fit = real(model_spec, boot_data, amn_options) + if idx == 1: + # 2nd replicate: nonconverged with a recognizable sentinel value. + bad_params = real_fit.params.copy() + bad_params["value"] = sentinel + return dataclasses.replace(real_fit, params=bad_params, success=False) + return real_fit + + monkeypatch.setattr(inf, "estimate_amn", spy) + + with pytest.warns(RuntimeWarning, match="did not converge"): + inference = compute_amn_standard_errors(fit, data, options, n_boot=4, seed=3) + + # The nonconverged replicate's row is all NaN, not stored. + assert inference.replicate_params.iloc[1].isna().all() + # The sentinel params never leak into the bootstrap distribution. + assert not (inference.replicate_params == sentinel).to_numpy().any() diff --git a/tests/test_amn_limited_measurement_rejection.py b/tests/test_amn_limited_measurement_rejection.py new file mode 100644 index 00000000..cecf2e8f --- /dev/null +++ b/tests/test_amn_limited_measurement_rejection.py @@ -0,0 +1,79 @@ +"""AMN must reject non-Gaussian measurements rather than treat them as continuous. + +AMN's mixture-EM and minimum-distance stages recover loadings/SDs from the +cross-covariance of multi-indicator measurements -- a continuous-Gaussian moment +map. A probit/Tobit measure routed through it would be silently treated as +continuous, so `estimate_amn` rejects any non-Gaussian `measurement_models` entry. +A future working-linear seeding path will translate such measures before AMN runs. +""" + +import numpy as np +import pandas as pd +import pytest + +from skillmodels.amn.estimate import estimate_amn +from skillmodels.common.measurement_models import ( + ProbitMeasurement, + TobitMeasurement, +) +from skillmodels.common.model_spec import ( + FactorSpec, + ModelSpec, + Normalizations, +) + + +def _model(measurement_models) -> ModelSpec: + return ModelSpec( + factors={ + "skills": FactorSpec( + measurements=(("y1", "y2", "y3"),) * 2, + normalizations=Normalizations( + loadings=({"y1": 1},) * 2, + intercepts=({"y1": 0},) * 2, + ), + transition_function="linear", + ), + }, + measurement_models=measurement_models, + ) + + +def _tiny_data() -> pd.DataFrame: + rng = np.random.default_rng(0) + rows = [] + for caseid in range(20): + for period in (0, 1): + rows.append( + { + "caseid": caseid, + "period": period, + "y1": rng.normal(), + "y2": rng.normal(), + "y3": rng.normal(), + } + ) + return pd.DataFrame(rows).set_index(["caseid", "period"]) + + +@pytest.mark.parametrize( + "models", + [ + {"y2": ProbitMeasurement()}, + {"y3": TobitMeasurement(lower=0.0)}, + ], +) +def test_estimate_amn_rejects_non_gaussian_measurements(models) -> None: + with pytest.raises(NotImplementedError, match="Gaussian"): + estimate_amn(_model(models), _tiny_data()) + + +def test_estimate_amn_rejects_non_gaussian_even_for_start_values() -> None: + # The seeding path must hand AMN a working-linear (Gaussian) spec; a raw + # probit/Tobit spec is rejected even with for_start_values=True. + with pytest.raises(NotImplementedError, match="Gaussian"): + estimate_amn( + _model({"y2": ProbitMeasurement()}), + _tiny_data(), + for_start_values=True, + ) diff --git a/tests/test_amn_log_ces_general_seed.py b/tests/test_amn_log_ces_general_seed.py new file mode 100644 index 00000000..bbeec7ff --- /dev/null +++ b/tests/test_amn_log_ces_general_seed.py @@ -0,0 +1,48 @@ +"""Tests for the log_ces_general NLS seed in AMN Stage 3 (Pro F4). + +`log_ces_general` names its exponents `sigma_` and its outside +coefficient `tfp`. The generic seed previously recognized only the exact names +`phi`/`rho`/`sigma`, so every parameter started at 0 and the transition +evaluated `tfp * log(sum gamma_i ...) = 0 * log(0) = NaN`, which made +scipy.least_squares raise "Residuals are not finite in the initial point". The +seed must recognize `sigma_*` and `tfp` and start the gammas strictly positive. +""" + +import math + +import jax.numpy as jnp +import numpy as np + +from skillmodels.amn.simulate_and_regress import ( + _fit_generic_nls, + _seed_generic_nls_theta0, +) +from skillmodels.common.transition_functions import log_ces_general + + +def test_log_ces_general_seed_is_finite() -> None: + names = ("skills", "investment", "sigma_skills", "sigma_investment", "tfp") + theta0 = _seed_generic_nls_theta0(names, {}, n_unknowns=len(names)) + # gammas strictly positive (so log(gamma) is finite). + assert theta0[0] > 0.0 + assert theta0[1] > 0.0 + # exponents and outside coefficient nonzero. + assert theta0[2] != 0.0 + assert theta0[3] != 0.0 + assert theta0[4] != 0.0 + # the transition evaluates finite at the seed. + val = float(log_ces_general(jnp.asarray([1.0, 2.0]), jnp.asarray(theta0))) + assert math.isfinite(val) + + +def test_fit_generic_nls_log_ces_general_does_not_blow_up() -> None: + # Synthetic data from a known transformed CES; the fitter must start finite + # and return a finite residual_sd (Pro F4 reproduction). + g1, g2, s1, s2, tfp = 0.65, 0.35, -0.25, -0.5, -2.0 + rng = np.random.default_rng(0) + states = rng.normal(size=(400, 2)) + y = tfp * np.log(g1 * np.exp(states[:, 0] * s1) + g2 * np.exp(states[:, 1] * s2)) + names = ("skills", "investment", "sigma_skills", "sigma_investment", "tfp") + params, resid_sd = _fit_generic_nls(log_ces_general, names, y, states) + assert math.isfinite(resid_sd) + assert all(math.isfinite(v) for v in params.values()) diff --git a/tests/test_amn_minimum_distance.py b/tests/test_amn_minimum_distance.py new file mode 100644 index 00000000..d1ea1f3d --- /dev/null +++ b/tests/test_amn_minimum_distance.py @@ -0,0 +1,587 @@ +"""Tests for `skillmodels.amn.minimum_distance` (AMN Stage 2).""" + +import numpy as np +import pandas as pd +import pytest + +from skillmodels.amn.minimum_distance import ( + _build_structure, + _initial_guess, + _make_objective_and_grad, + _objective, + _pack_layout, + solve_minimum_distance, +) +from skillmodels.amn.mixture_em import ( + build_augmented_measure_layout, + build_augmented_measure_matrix, + fit_mixture_em, +) +from skillmodels.amn.types import ( + AugmentedMeasureLayout, + MixtureFitResult, +) +from skillmodels.common.model_spec import ( + FactorSpec, + ModelSpec, + Normalizations, +) +from skillmodels.common.process_model import process_model + + +def _tiny_model() -> ModelSpec: + return ModelSpec( + factors={ + "skills": FactorSpec( + measurements=(("y1", "y2", "y3"), ("y1", "y2", "y3")), + normalizations=Normalizations( + loadings=({"y1": 1}, {"y1": 1}), + intercepts=({"y1": 0}, {}), + ), + transition_function="linear", + ), + }, + ) + + +def _build_oracle_mixture( + *, + n_components: int = 2, + n_aug: int = 6, + seed: int = 0, + layout: AugmentedMeasureLayout | None = None, +) -> tuple[MixtureFitResult, dict[str, np.ndarray]]: + """Build a synthetic MixtureFitResult with known structural moments. + + Layout: 2 periods x 3 measurements on a single latent factor, anchor + measurement loading=1, others = (1.0, 0.8, 1.2). Mean-zero on the + period-0 factor. + """ + del seed + if layout is None: + layout = AugmentedMeasureLayout( + columns=tuple( + f"y[{t}|skills|{m}]" for t in (0, 1) for m in ("y1", "y2", "y3") + ), + measurement_slots=tuple(range(n_aug)), + observed_factor_slots=(), + control_slots=(), + measurement_meta=tuple( + (t, "skills", m) for t in (0, 1) for m in ("y1", "y2", "y3") + ), + observed_factor_meta=(), + control_meta=(), + ) + + truth_lambda = np.zeros((6, 2)) + truth_lambda[0, 0] = 1.0 + truth_lambda[1, 0] = 0.8 + truth_lambda[2, 0] = 1.2 + truth_lambda[3, 1] = 1.0 + truth_lambda[4, 1] = 0.8 + truth_lambda[5, 1] = 1.2 + truth_intercept = np.array([0.0, 0.1, -0.2, 0.5, 0.3, 0.4]) + truth_sigma2 = np.array([0.3, 0.25, 0.4, 0.35, 0.2, 0.5]) ** 2 + + truth_mu = np.array([[-0.6, 0.4], [0.4, -0.3]]) # period-0 enforces sum-to-zero + # Enforce sum-to-zero on column 0 (period-0 latent slot) with + # weights 0.5/0.5. + truth_mu[1, 0] = -truth_mu[0, 0] + truth_omega = np.array( + [ + [[1.0, 0.4], [0.4, 1.2]], + [[0.9, 0.2], [0.2, 1.1]], + ] + ) + + means = np.empty((n_components, n_aug)) + covs = np.empty((n_components, n_aug, n_aug)) + for m in range(n_components): + means[m] = truth_intercept + truth_lambda @ truth_mu[m] + covs[m] = truth_lambda @ truth_omega[m] @ truth_lambda.T + np.diag(truth_sigma2) + + weights = np.array([0.5, 0.5]) + + return MixtureFitResult( + weights=weights, + means=means, + covariances=covs, + loglikelihood=-100.0, + n_iter=10, + converged=True, + layout=layout, + ), { + "lambda": truth_lambda, + "intercept": truth_intercept, + "sigma2": truth_sigma2, + "mu": truth_mu, + "omega": truth_omega, + } + + +def _mean_zero_model() -> ModelSpec: + """Canonical AMN: free period-0 intercept, location set by weighted mean-zero.""" + return ModelSpec( + factors={ + "skills": FactorSpec( + measurements=(("y1", "y2", "y3"), ("y1", "y2", "y3")), + normalizations=Normalizations( + loadings=({"y1": 1}, {"y1": 1}), + intercepts=({}, {}), + ), + transition_function="linear", + ), + }, + ) + + +def test_build_structure_drops_mean_zero_when_initial_intercept_pinned(): + """A pinned period-0 intercept removes that factor's mean-zero baseline slot. + + `_tiny_model` pins the period-0 anchor intercept to 0, which supplies the + initial location. Imposing the weighted mean-zero on top would be a second + normalization of the same orbit direction (audit F7), so the period-0 factor + mean stays free and is NOT a baseline slot. + """ + model = _tiny_model() + processed = process_model(model) + layout = build_augmented_measure_layout(processed) + + struct = _build_structure(layout, processed) + + # 2 latent-factor-period slots: (0, skills) and (1, skills). + assert len(struct.factor_period_slots) == 2 + assert (0, "skills") in struct.factor_period_slots + assert (1, "skills") in struct.factor_period_slots + # 6 measurement slots; 2 of them (y1 at periods 0,1) have + # normalized loading=1, so lambda has 4 free entries. + assert struct.lambda_free_mask.sum() == 4 + # y1 at period 0 has normalized intercept=0; the other 5 are free. + assert struct.intercept_free_mask.sum() == 5 + # All 6 measurement slots have free sigma2 (no obs factors, no controls). + assert struct.sigma2_free_mask.sum() == 6 + # The pinned period-0 intercept already anchors location, so there is no + # mean-zero baseline slot. + assert struct.baseline_mean_zero_slots == () + + +def test_build_structure_keeps_mean_zero_when_initial_intercept_free(): + """With a free period-0 intercept, the weighted mean-zero anchors location. + + The canonical AMN convention leaves the measurement intercepts free and sets + the initial location through the period-0 weighted mean-zero, so the period-0 + factor slot IS a baseline slot. + """ + model = _mean_zero_model() + processed = process_model(model) + layout = build_augmented_measure_layout(processed) + + struct = _build_structure(layout, processed) + + # No pinned intercept anywhere, so all 6 intercepts are free. + assert struct.intercept_free_mask.sum() == 6 + baseline_slot = struct.factor_period_slots.index((0, "skills")) + assert baseline_slot in struct.baseline_mean_zero_slots + + +def test_pack_layout_returns_consistent_total(): + model = _tiny_model() + processed = process_model(model) + layout = build_augmented_measure_layout(processed) + struct = _build_structure(layout, processed) + + n_total, slices = _pack_layout(struct, n_components=2) + + # `_tiny_model` pins the period-0 intercept, so there is no mean-zero + # baseline slot and every mu entry is free (audit F7). + # sigma2: 6 free; chol_0+chol_1: 2*3=6; mu: 2*2 - 0 baseline = 4; + # lambda: 4 free; intercept: 5 free => 6+6+4+4+5 = 25. + assert n_total == 25 + assert slices["sigma2"] == slice(0, 6) + + +def _numpy_fd_grad(fn, x, h: float = 1e-6) -> np.ndarray: + """Central finite-difference gradient of a scalar function.""" + grad = np.zeros_like(x) + for i in range(x.size): + xp = x.copy() + xp[i] += h + xm = x.copy() + xm[i] -= h + grad[i] = (fn(xp) - fn(xm)) / (2 * h) + return grad + + +def test_md_analytical_gradient_matches_numerical(): + """The JAX objective + gradient match the numpy criterion and its FD gradient. + + `solve_minimum_distance` passes this analytical gradient to the optimizer so + each L-BFGS-B step costs one backward pass instead of `n_params` finite- + difference objective evaluations -- the difference between seconds and hours + once the factor-period block (and thus the parameter vector) is large. + """ + model = _tiny_model() + processed = process_model(model) + layout = build_augmented_measure_layout(processed) + mixture, _ = _build_oracle_mixture(layout=layout) + struct = _build_structure(layout, processed) + n_components = mixture.weights.shape[0] + n_total, slices = _pack_layout(struct, n_components) + + value_fn, grad_fn = _make_objective_and_grad( + struct, + slices, + n_components=n_components, + mixture_weights=mixture.weights, + target_means=mixture.means, + target_covs=mixture.covariances, + ) + + rng = np.random.default_rng(1) + flat = _initial_guess( + struct, + slices, + n_components=n_components, + n_total=n_total, + target_means=mixture.means, + target_covs=mixture.covariances, + ) + 0.05 * rng.standard_normal(n_total) + + def numpy_obj(x: np.ndarray) -> float: + return _objective( + x, + struct, + slices, + n_components=n_components, + mixture_weights=mixture.weights, + target_means=mixture.means, + target_covs=mixture.covariances, + ) + + assert value_fn(flat) == pytest.approx(numpy_obj(flat), rel=1e-6) + np.testing.assert_allclose( + grad_fn(flat), _numpy_fd_grad(numpy_obj, flat), rtol=1e-4, atol=1e-5 + ) + + +def test_solve_minimum_distance_respects_maxiter_cap(): + """A `stopping_maxiter` cap is honoured (the seeding budget bound). + + With the exact analytical gradient each L-BFGS-B step is cheap, but a seed + does not need full convergence; the cap bounds the Stage-2 cost on a large + factor-period block. A tiny cap must return a valid result, not error. + """ + model = _tiny_model() + processed = process_model(model) + layout = build_augmented_measure_layout(processed) + mixture, _ = _build_oracle_mixture(layout=layout) + + result = solve_minimum_distance( + mixture, processed, algo_options={"stopping_maxiter": 2} + ) + + assert isinstance(result.objective_value, float) + assert result.loadings.shape[0] == 6 + + +def test_solve_minimum_distance_recovers_oracle(): + model = _tiny_model() + processed = process_model(model) + layout = build_augmented_measure_layout(processed) + mixture, _truth = _build_oracle_mixture(layout=layout) + + result = solve_minimum_distance(mixture, processed) + + # The minimum-distance criterion should be near zero on oracle moments. + assert result.objective_value < 1e-3 + + # Loadings should match truth within tolerance. + loadings = result.loadings.reset_index().set_index(["period", "measurement"]) + assert loadings.loc[(0, "y1"), "loading"] == pytest.approx(1.0, abs=1e-6) + assert loadings.loc[(0, "y2"), "loading"] == pytest.approx(0.8, abs=5e-2) + assert loadings.loc[(0, "y3"), "loading"] == pytest.approx(1.2, abs=5e-2) + + +def _nonzero_initial_mean_oracle( + layout: AugmentedMeasureLayout, +) -> MixtureFitResult: + """Oracle moments whose period-0 factor mean is NONZERO in every component. + + The period-0 intercept of the anchor measurement is pinned to 0 (see + `_tiny_model`), so that pin already supplies the initial location: the + factor mean must stay free to absorb the true nonzero level. Imposing the + AMN weighted mean-zero restriction on top would force the weighted mean to + 0 and contradict these moments, so a faithful Stage-2 fit must reach SSE 0 + only when it does NOT double-normalize the location. + """ + n_components, n_aug = 2, 6 + truth_lambda = np.zeros((6, 2)) + truth_lambda[0, 0] = 1.0 + truth_lambda[1, 0] = 0.8 + truth_lambda[2, 0] = 1.2 + truth_lambda[3, 1] = 1.0 + truth_lambda[4, 1] = 0.8 + truth_lambda[5, 1] = 1.2 + truth_intercept = np.array([0.0, 0.1, -0.2, 0.5, 0.3, 0.4]) + truth_sigma2 = np.array([0.3, 0.25, 0.4, 0.35, 0.2, 0.5]) ** 2 + # Period-0 latent mean is 0.4 in BOTH mixtures => weighted mean 0.4 != 0. + truth_mu = np.array([[0.4, 0.4], [0.4, -0.3]]) + truth_omega = np.array( + [ + [[1.0, 0.4], [0.4, 1.2]], + [[0.9, 0.2], [0.2, 1.1]], + ] + ) + + means = np.empty((n_components, n_aug)) + covs = np.empty((n_components, n_aug, n_aug)) + for m in range(n_components): + means[m] = truth_intercept + truth_lambda @ truth_mu[m] + covs[m] = truth_lambda @ truth_omega[m] @ truth_lambda.T + np.diag(truth_sigma2) + + return MixtureFitResult( + weights=np.array([0.5, 0.5]), + means=means, + covariances=covs, + loglikelihood=-100.0, + n_iter=10, + converged=True, + layout=layout, + ) + + +def test_pinned_initial_intercept_frees_factor_mean_from_mean_zero(): + """A pinned period-0 intercept disables the weighted mean-zero on that factor. + + Pinning the anchor intercept and imposing the AMN weighted mean-zero + constraint are two location normalizations on the same orbit direction. + With a nonzero true initial mean only ONE can hold, so a faithful fit drops + mean-zero (the intercept pin supplies location) and recovers the moments at + SSE 0; double-normalizing would leave a large irreducible residual. + """ + model = _tiny_model() + processed = process_model(model) + layout = build_augmented_measure_layout(processed) + mixture = _nonzero_initial_mean_oracle(layout) + + result = solve_minimum_distance(mixture, processed) + + assert result.objective_value < 1e-3 + + +def test_solve_minimum_distance_rejects_unknown_weighting(): + model = _tiny_model() + processed = process_model(model) + layout = build_augmented_measure_layout(processed) + mixture, _ = _build_oracle_mixture(layout=layout) + + with pytest.raises(ValueError, match="Unknown weighting"): + solve_minimum_distance(mixture, processed, weighting="bogus") + + +def _observed_factor_model() -> ModelSpec: + """One latent factor (2 measurements, 1 period) plus an observed factor.""" + return ModelSpec( + factors={ + "skills": FactorSpec( + measurements=(("y1", "y2"),), + normalizations=Normalizations( + loadings=({"y1": 1},), + intercepts=({"y1": 0},), + ), + transition_function="linear", + ), + }, + observed_factors=("inv",), + controls=("momed",), + ) + + +def test_build_structure_pins_observed_and_control_intercepts(): + model = _observed_factor_model() + processed = process_model(model) + layout = build_augmented_measure_layout(processed) + + struct = _build_structure(layout, processed) + + # Observed-factor and control slots must have pinned (not free) zero + # intercepts; this is the direct guard against the regression. + for idx in (*layout.observed_factor_slots, *layout.control_slots): + assert struct.intercept_free_mask[idx] == np.False_ + assert struct.intercept_value[idx] == 0.0 + + # A latent measurement slot with a non-normalized intercept (y2) is + # still free, confirming we only pinned the observed/control slots. + y2_slot = next( + slot + for slot, meta in zip( + layout.measurement_slots, layout.measurement_meta, strict=True + ) + if meta[2] == "y2" + ) + assert struct.intercept_free_mask[y2_slot] == np.True_ + + +def test_minimum_distance_recovers_observed_factor_level(): + model = ModelSpec( + factors={ + "skills": FactorSpec( + measurements=(("y1", "y2"),), + normalizations=Normalizations( + loadings=({"y1": 1},), + intercepts=({"y1": 0},), + ), + transition_function="linear", + ), + }, + observed_factors=("inv",), + ) + processed = process_model(model) + layout = build_augmented_measure_layout(processed) + + # Augmented vector columns: y1, y2, obs_factor inv. + # Factor-period slots: (0, skills), (0, inv). + n_aug = 3 + n_components = 2 + truth_lambda = np.zeros((n_aug, 2)) + truth_lambda[0, 0] = 1.0 # y1 loads on skills, normalized. + truth_lambda[1, 0] = 0.8 # y2 loads on skills, free. + truth_lambda[2, 1] = 1.0 # obs_factor inv loads on its own slot. + truth_intercept = np.array([0.0, 0.1, 0.0]) + truth_sigma2 = np.array([0.3, 0.25, 0.0]) ** 2 + + pi = np.array([1.3, 2.1]) # true per-component reduced-form level of inv. + truth_mu = np.zeros((n_components, 2)) + truth_mu[0, 0] = -0.6 # skills period-0 mean-zero (weights 0.5/0.5). + truth_mu[1, 0] = 0.6 + truth_mu[:, 1] = pi + truth_omega = np.array( + [ + [[1.0, 0.0], [0.0, 0.5]], + [[0.9, 0.0], [0.0, 0.4]], + ] + ) + + means = np.empty((n_components, n_aug)) + covs = np.empty((n_components, n_aug, n_aug)) + for m in range(n_components): + means[m] = truth_intercept + truth_lambda @ truth_mu[m] + covs[m] = truth_lambda @ truth_omega[m] @ truth_lambda.T + np.diag(truth_sigma2) + + mixture = MixtureFitResult( + weights=np.array([0.5, 0.5]), + means=means, + covariances=covs, + loglikelihood=-1.0, + n_iter=1, + converged=True, + layout=layout, + ) + + result = solve_minimum_distance(mixture, processed) + + inv_col = result.factor_period_slots.index((0, "inv")) + np.testing.assert_allclose(result.factor_mixture_means[:, inv_col], pi, atol=1e-3) + assert result.objective_value < 1e-3 + + +def test_solve_minimum_distance_runs_on_fitted_mixture(): + """End-to-end: simulate 1-component data, fit, then recover Lambda.""" + model = _tiny_model() + processed = process_model(model) + layout = build_augmented_measure_layout(processed) + + rng = np.random.default_rng(0) + n = 1500 + # period-0 factor mean-zero (sum-to-zero with itself => 0). + period0 = rng.normal(0.0, 1.0, size=n) + period1 = 0.7 * period0 + rng.normal(0.0, 0.6, size=n) + + rows = [] + for caseid in range(n): + for period, f in [(0, period0[caseid]), (1, period1[caseid])]: + rows.append( + { + "caseid": caseid, + "period": period, + "y1": f + rng.normal(0, 0.3), + "y2": 0.8 * f + rng.normal(0, 0.4), + "y3": 1.2 * f + rng.normal(0, 0.35), + } + ) + data = pd.DataFrame(rows).set_index(["caseid", "period"]) + augmented = build_augmented_measure_matrix(data, processed, layout) + + mixture = fit_mixture_em(augmented, n_components=2, n_init=2, seed=0, layout=layout) + + result = solve_minimum_distance(mixture, processed) + + # Just verifying it runs and produces a finite objective. + assert np.isfinite(result.objective_value) + assert result.loadings.shape[0] == 6 + + +def _ces_model(*, loadings: tuple, intercepts: tuple) -> ModelSpec: + """CES (`log_ces`) model with 3 measurements over 2 periods.""" + return ModelSpec( + factors={ + "skills": FactorSpec( + measurements=(("y1", "y2", "y3"), ("y1", "y2", "y3")), + normalizations=Normalizations( + loadings=loadings, + intercepts=intercepts, + ), + transition_function="log_ces", + ), + }, + ) + + +def test_solve_minimum_distance_rejects_ces_overnormalization(): + model = _ces_model( + loadings=({"y1": 1, "y2": 1}, {"y1": 1}), + intercepts=({"y1": 0}, {}), + ) + processed = process_model(model) + layout = build_augmented_measure_layout(processed) + mixture, _ = _build_oracle_mixture(layout=layout) + + with pytest.raises(ValueError, match="loading normalizations"): + solve_minimum_distance(mixture, processed) + + +def test_solve_minimum_distance_allows_ces_overnormalization_when_opted_in(): + model = _ces_model( + loadings=({"y1": 1, "y2": 1}, {"y1": 1}), + intercepts=({"y1": 0}, {}), + ) + processed = process_model(model) + layout = build_augmented_measure_layout(processed) + mixture, _ = _build_oracle_mixture(layout=layout) + + result = solve_minimum_distance(mixture, processed, allow_overnormalization=True) + + assert np.isfinite(result.objective_value) + + +def test_solve_minimum_distance_rejects_ces_missing_normalization(): + model = _ces_model( + loadings=({"y1": 1}, {}), + intercepts=({"y1": 0}, {}), + ) + processed = process_model(model) + layout = build_augmented_measure_layout(processed) + mixture, _ = _build_oracle_mixture(layout=layout) + + with pytest.raises(ValueError, match="no loading normalization"): + solve_minimum_distance(mixture, processed) + + +def test_solve_minimum_distance_rejects_documented_optimal(): + model = _tiny_model() + processed = process_model(model) + layout = build_augmented_measure_layout(processed) + mixture, _ = _build_oracle_mixture(layout=layout) + + with pytest.raises(NotImplementedError, match="not yet implemented"): + solve_minimum_distance(mixture, processed, weighting="optimal") diff --git a/tests/test_amn_missing_data_em.py b/tests/test_amn_missing_data_em.py new file mode 100644 index 00000000..2c2d2f6e --- /dev/null +++ b/tests/test_amn_missing_data_em.py @@ -0,0 +1,290 @@ +"""Tests for the missing-data Gaussian-mixture EM (AMN Stage 1 fallback).""" + +import numpy as np +import pytest +from scipy.special import logsumexp +from scipy.stats import multivariate_normal +from sklearn.mixture import GaussianMixture + +from skillmodels.amn.missing_data_em import _run_em, fit_gaussian_mixture_missing + + +def _mixture_loglik( + data: np.ndarray, + weights: np.ndarray, + means: np.ndarray, + covs: np.ndarray, +) -> float: + """Independent complete-data Gaussian-mixture log-likelihood (an oracle).""" + log_comp = np.column_stack( + [ + np.log(weights[k]) + + multivariate_normal.logpdf(data, mean=means[k], cov=covs[k]) + for k in range(weights.shape[0]) + ] + ) + return float(logsumexp(log_comp, axis=1).sum()) + + +def _simulate_two_component( + *, + n: int, + weights: tuple[float, float], + means: tuple[np.ndarray, np.ndarray], + chols: tuple[np.ndarray, np.ndarray], + seed: int, +) -> np.ndarray: + rng = np.random.default_rng(seed) + labels = rng.choice([0, 1], size=n, p=list(weights)) + out = np.empty((n, means[0].shape[0])) + for k in (0, 1): + idx = labels == k + if idx.any(): + standard = rng.normal(size=(int(idx.sum()), means[k].shape[0])) + out[idx] = standard @ chols[k].T + means[k] + return out + + +_WEIGHTS = (0.4, 0.6) +_MEANS = (np.array([-2.0, 1.0]), np.array([2.0, -1.0])) +_CHOLS = ( + np.linalg.cholesky(np.array([[1.0, 0.3], [0.3, 1.2]])), + np.linalg.cholesky(np.array([[0.8, -0.2], [-0.2, 1.0]])), +) + + +def _align(fitted_means: np.ndarray) -> np.ndarray: + """Return the index order lining fitted components up to the truth by mean[0].""" + return np.argsort(fitted_means[:, 0]) + + +def test_missing_data_em_matches_sklearn_on_complete_data(): + """With no missingness the EM must match sklearn's GaussianMixture.""" + data = _simulate_two_component( + n=4000, weights=_WEIGHTS, means=_MEANS, chols=_CHOLS, seed=1 + ) + + mine = fit_gaussian_mixture_missing( + data, n_components=2, max_iter=500, tol=1e-7, n_init=5, reg_covar=1e-6, seed=1 + ) + ref = GaussianMixture( + n_components=2, covariance_type="full", n_init=5, reg_covar=1e-6, random_state=1 + ).fit(data) + + mine_order = _align(mine.means) + ref_order = _align(ref.means_) + np.testing.assert_allclose( + mine.weights[mine_order], ref.weights_[ref_order], atol=0.02 + ) + np.testing.assert_allclose(mine.means[mine_order], ref.means_[ref_order], atol=0.05) + + +def test_missing_data_em_covariances_match_sklearn_under_nontrivial_ridge(): + """On complete data the EM must reproduce sklearn's covariances exactly. + + The fitted covariance is the observed-data MLE: observed entries carry no + extra measurement noise. A non-trivial `reg_covar` is the ridge added once + by the M-step (exactly as sklearn does); it must not also inflate the + covariance used in the E-step's density and conditional moments. With a + large ridge any double-counting is plainly visible in the covariances. + """ + data = _simulate_two_component( + n=6000, weights=_WEIGHTS, means=_MEANS, chols=_CHOLS, seed=11 + ) + reg = 0.1 + + mine = fit_gaussian_mixture_missing( + data, n_components=2, max_iter=800, tol=1e-10, n_init=5, reg_covar=reg, seed=11 + ) + # Match the convergence criteria so both EMs sit at the same fixed point: + # at convergence the complete-data update equations are identical, so any + # remaining covariance gap is a genuine math discrepancy, not early stopping. + ref = GaussianMixture( + n_components=2, + covariance_type="full", + n_init=5, + reg_covar=reg, + random_state=11, + tol=1e-10, + max_iter=800, + ).fit(data) + + mine_order = _align(mine.means) + ref_order = _align(ref.means_) + np.testing.assert_allclose( + mine.covariances[mine_order], + ref.covariances_[ref_order], + rtol=2e-3, + atol=2e-3, + ) + + +def test_missing_data_em_recovers_params_under_mcar(): + """Under ~30% MCAR missingness the EM recovers the true mixture.""" + data = _simulate_two_component( + n=8000, weights=_WEIGHTS, means=_MEANS, chols=_CHOLS, seed=2 + ) + rng = np.random.default_rng(2) + data = data.copy() + data[rng.uniform(size=data.shape) < 0.3] = np.nan + + fit = fit_gaussian_mixture_missing( + data, n_components=2, max_iter=500, tol=1e-7, n_init=5, reg_covar=1e-6, seed=2 + ) + + order = _align(fit.means) + truth_order = _align(np.vstack(_MEANS)) + np.testing.assert_allclose( + fit.weights[order], np.array(_WEIGHTS)[truth_order], atol=0.05 + ) + for fk, tk in zip(order, truth_order, strict=True): + np.testing.assert_allclose(fit.means[fk], _MEANS[tk], atol=0.15) + + +def test_missing_data_em_fits_when_no_row_is_complete(): + """Fits even when every row misses an entry (the unbalanced-panel case). + + Column 0 is missing for even rows and column 1 for odd rows, so no row is + complete -- the complete-case GaussianMixture is infeasible -- yet the + pairwise/marginal information still identifies a single Gaussian's means. + No row observes both columns, so the cross-covariance is unidentified: the + fit must flag that (and warn) rather than report ordinary convergence alone. + """ + rng = np.random.default_rng(3) + data = rng.normal(loc=[5.0, -3.0], scale=[1.0, 1.0], size=(2000, 2)) + data[::2, 0] = np.nan # even rows miss column 0 + data[1::2, 1] = np.nan # odd rows miss column 1 + assert (~np.isnan(data).any(axis=1)).sum() == 0 # no complete rows + + with pytest.warns(RuntimeWarning, match="co-observation"): + fit = fit_gaussian_mixture_missing( + data, + n_components=1, + max_iter=500, + tol=1e-7, + n_init=3, + reg_covar=1e-6, + seed=3, + ) + + np.testing.assert_allclose(fit.means[0], [5.0, -3.0], atol=0.1) + assert fit.co_observation_graph_connected is False + + +def test_missing_data_em_raises_on_never_observed_column_by_default(): + """A never-observed column is unidentified -> raise unless explicitly allowed. + + A column observed in no row contributes nothing to the likelihood: its mean + and (co)variances are arbitrary, not estimated. Returning a neutral seed for + it silently feeds noise into the downstream structural moments, so standalone + estimation must fail loudly rather than warn. Regression for audit finding F7. + """ + rng = np.random.default_rng(5) + data = rng.normal(size=(200, 3)) + data[:, 1] = np.nan # column 1 never observed + + with pytest.raises(ValueError, match="never observed"): + fit_gaussian_mixture_missing( + data, n_components=1, max_iter=50, tol=1e-7, n_init=1, seed=0 + ) + + +def test_missing_data_em_allows_never_observed_column_when_opted_in(): + """`allow_never_observed=True` (the seeding path) keeps the warn+neutral-seed. + + When the missing-data EM only seeds an estimator that re-fits every parameter + from the data (e.g. `estimate_chs`), a never-observed column dropped by row + subsampling must not crash the pipeline; it falls back to a neutral seed and + warns. Regression for audit finding F7. + """ + rng = np.random.default_rng(5) + data = rng.normal(size=(200, 3)) + data[:, 1] = np.nan # column 1 never observed + + with pytest.warns(RuntimeWarning, match="never observed"): + fit = fit_gaussian_mixture_missing( + data, + n_components=1, + max_iter=50, + tol=1e-7, + n_init=1, + reg_covar=1e-6, + seed=0, + allow_never_observed=True, + ) + + assert fit.co_observation_graph_connected is False + assert fit.means.shape == (1, 3) + np.testing.assert_allclose(fit.means[0, [0, 2]], 0.0, atol=0.2) + + +def test_missing_data_em_reports_connected_co_observation_graph_under_mcar(): + """Under MCAR every column pair is co-observed somewhere, so the flag is True.""" + data = _simulate_two_component( + n=3000, weights=_WEIGHTS, means=_MEANS, chols=_CHOLS, seed=7 + ) + rng = np.random.default_rng(7) + data[rng.uniform(size=data.shape) < 0.2] = np.nan + + fit = fit_gaussian_mixture_missing( + data, n_components=2, max_iter=300, tol=1e-7, n_init=2, reg_covar=1e-6, seed=7 + ) + + assert fit.co_observation_graph_connected is True + + +def test_missing_data_em_reports_convergence_and_shapes(): + data = _simulate_two_component( + n=1000, weights=_WEIGHTS, means=_MEANS, chols=_CHOLS, seed=4 + ) + data[::5, 0] = np.nan + + fit = fit_gaussian_mixture_missing( + data, n_components=2, max_iter=500, tol=1e-7, n_init=2, reg_covar=1e-6, seed=4 + ) + + assert fit.weights.shape == (2,) + assert fit.means.shape == (2, 2) + assert fit.covariances.shape == (2, 2, 2) + assert isinstance(fit.converged, bool) + assert fit.n_iter >= 1 + + +def test_run_em_returns_loglik_of_returned_params(): + """The returned log-likelihood must score the returned parameters. + + The score is computed in the E-step at the start of each iteration, but the + parameters are then updated by the M-step. Returning that pre-M-step score + alongside the post-M-step parameters makes the restart ranking one step + stale. A single EM step from a deliberately-off start moves the parameters + a lot, so the stale score lags the true score of the returned params by a + wide margin. + """ + data = _simulate_two_component( + n=2000, weights=_WEIGHTS, means=_MEANS, chols=_CHOLS, seed=21 + ) + mask = np.ones_like(data) + weights0 = np.array([0.5, 0.5]) + means0 = np.array([[0.0, 0.0], [0.5, -0.5]]) # far from the true means at ±2 + covs0 = np.stack([np.eye(2), np.eye(2)]) + + weights, means, covs, loglik, _n_iter, _converged = _run_em( + data, mask, weights0, means0, covs0, max_iter=1, tol=0.0, reg_covar=1e-6 + ) + + oracle = _mixture_loglik(data, weights, means, covs) + np.testing.assert_allclose(loglik, oracle, rtol=1e-6) + + +def test_missing_data_em_raises_when_all_columns_missing_for_all_rows(): + data = np.full((10, 2), np.nan) + with pytest.raises(ValueError, match="no observed"): + fit_gaussian_mixture_missing( + data, + n_components=1, + max_iter=10, + tol=1e-6, + n_init=1, + reg_covar=1e-6, + seed=0, + ) diff --git a/tests/test_amn_mixture_em.py b/tests/test_amn_mixture_em.py new file mode 100644 index 00000000..96d86e21 --- /dev/null +++ b/tests/test_amn_mixture_em.py @@ -0,0 +1,259 @@ +"""Tests for `skillmodels.amn.mixture_em` (AMN Stage 1).""" + +import warnings + +import numpy as np +import pandas as pd +import pytest + +from skillmodels.amn.mixture_em import ( + InsufficientCompleteCasesError, + build_augmented_measure_layout, + build_augmented_measure_matrix, + fit_mixture_em, +) +from skillmodels.common.model_spec import ( + FactorSpec, + ModelSpec, + Normalizations, +) +from skillmodels.common.process_model import process_model + + +def _tiny_model() -> ModelSpec: + """Return a 2-period, 1-latent-factor model with 3 indicators per period.""" + return ModelSpec( + factors={ + "skills": FactorSpec( + measurements=(("y1", "y2", "y3"), ("y1", "y2", "y3")), + normalizations=Normalizations( + loadings=({"y1": 1}, {"y1": 1}), + intercepts=({"y1": 0}, {}), + ), + transition_function="linear", + ), + }, + ) + + +def _tiny_long_data(n: int = 200, seed: int = 0) -> pd.DataFrame: + """Two periods, three measurements each, drawn from N(0, 1) + noise.""" + rng = np.random.default_rng(seed) + rows = [] + for caseid in range(n): + factor_0 = rng.normal() + factor_1 = 0.6 * factor_0 + rng.normal(0, 0.5) + for period, f in [(0, factor_0), (1, factor_1)]: + rows.append( + { + "caseid": caseid, + "period": period, + "y1": f + rng.normal(0, 0.3), + "y2": 0.9 * f + rng.normal(0, 0.4), + "y3": 1.1 * f + rng.normal(0, 0.5), + } + ) + return pd.DataFrame(rows).set_index(["caseid", "period"]) + + +def test_layout_has_one_slot_per_measurement_update(): + model = _tiny_model() + processed = process_model(model) + + layout = build_augmented_measure_layout(processed) + + # 2 periods x 3 measurements = 6 measurement slots, no observed factors + # or controls. + assert len(layout.measurement_slots) == 6 + assert layout.observed_factor_slots == () + assert layout.control_slots == () + assert len(layout.columns) == 6 + + +def test_layout_records_period_factor_and_measurement_names(): + model = _tiny_model() + processed = process_model(model) + + layout = build_augmented_measure_layout(processed) + + assert set(layout.measurement_meta) == { + (0, "skills", "y1"), + (0, "skills", "y2"), + (0, "skills", "y3"), + (1, "skills", "y1"), + (1, "skills", "y2"), + (1, "skills", "y3"), + } + + +def test_layout_skips_anchoring_rows(): + """Anchoring outcomes (purpose != measurement) must not become slots.""" + base = _tiny_model() + from skillmodels.common.model_spec import AnchoringSpec # noqa: PLC0415 + + anchored = base.with_anchoring( + AnchoringSpec( + outcomes={"skills": "outcome"}, + free_controls=False, + free_constant=False, + free_loadings=True, + ignore_constant_when_anchoring=True, + ) + ) + processed = process_model(anchored) + + layout = build_augmented_measure_layout(processed) + + # 6 measurement slots; anchoring update rows are filtered out. + for _, factor, _ in layout.measurement_meta: + assert factor == "skills" + assert len(layout.measurement_slots) == 6 + + +def test_matrix_fills_each_slot_from_the_right_period(): + model = _tiny_model() + processed = process_model(model) + data = _tiny_long_data(n=50, seed=1) + + layout = build_augmented_measure_layout(processed) + matrix = build_augmented_measure_matrix(data, processed, layout) + + assert matrix.shape == (50, 6) + + # Period 0 slot for y1 must equal data.loc[(*, 0), "y1"]. + period0_y1_slot = next( + slot + for slot, meta in zip( + layout.measurement_slots, layout.measurement_meta, strict=True + ) + if meta == (0, "skills", "y1") + ) + expected = data.xs(0, level="period")["y1"].to_numpy() + np.testing.assert_allclose(matrix[:, period0_y1_slot], expected) + + +def test_matrix_marks_missing_caseids_as_nan(): + model = _tiny_model() + processed = process_model(model) + layout = build_augmented_measure_layout(processed) + data = _tiny_long_data(n=10, seed=2) + # Drop period 1 for caseid 0 entirely. + data = data.drop(index=(0, 1)) + + matrix = build_augmented_measure_matrix(data, processed, layout) + + # The first row corresponds to caseid 0; period-1 slots should be NaN. + period1_slots = [ + slot + for slot, (period, _, _) in zip( + layout.measurement_slots, layout.measurement_meta, strict=True + ) + if period == 1 + ] + assert np.all(np.isnan(matrix[0, period1_slots])) + # Period-0 slots for the same caseid stay finite. + period0_slots = [ + slot + for slot, (period, _, _) in zip( + layout.measurement_slots, layout.measurement_meta, strict=True + ) + if period == 0 + ] + assert np.all(np.isfinite(matrix[0, period0_slots])) + + +def _simulate_two_component_panel( + *, + n: int, + weights: tuple[float, float], + means: tuple[np.ndarray, np.ndarray], + chols: tuple[np.ndarray, np.ndarray], + seed: int, +) -> np.ndarray: + rng = np.random.default_rng(seed) + labels = rng.choice([0, 1], size=n, p=list(weights)) + samples = np.empty((n, means[0].shape[0])) + for k in (0, 1): + idx = labels == k + if idx.any(): + standard = rng.normal(size=(idx.sum(), means[k].shape[0])) + samples[idx] = standard @ chols[k].T + means[k] + return samples + + +def test_fit_mixture_em_recovers_two_components_within_tolerance(): + truth_weights = (0.4, 0.6) + truth_means = (np.array([-1.5, 1.0]), np.array([1.5, -1.0])) + truth_chols = ( + np.linalg.cholesky(np.array([[1.0, 0.3], [0.3, 1.2]])), + np.linalg.cholesky(np.array([[0.8, -0.2], [-0.2, 1.0]])), + ) + augmented = _simulate_two_component_panel( + n=4000, + weights=truth_weights, + means=truth_means, + chols=truth_chols, + seed=11, + ) + + result = fit_mixture_em(augmented, n_components=2, n_init=3, seed=11) + + assert result.converged + # Order of components is arbitrary; line them up to the truth by + # nearest-mean. + order = np.argsort(result.means[:, 0]) + truth_order = np.argsort([truth_means[0][0], truth_means[1][0]]) + + np.testing.assert_allclose( + result.weights[order], + np.array(truth_weights)[truth_order], + atol=0.05, + ) + for fitted_k, truth_k in zip(order, truth_order, strict=True): + np.testing.assert_allclose( + result.means[fitted_k], + truth_means[truth_k], + atol=0.15, + ) + + +def test_fit_mixture_em_drops_incomplete_rows(): + rng = np.random.default_rng(3) + augmented = rng.normal(size=(200, 4)) + augmented[:50, 2] = np.nan # 50 rows incomplete + + with pytest.warns(RuntimeWarning, match=r"50/200"): + result = fit_mixture_em(augmented, n_components=2, n_init=2, seed=3) + + # n_complete = 150; loglikelihood should be ~150 * per-row mean. + # The check we actually want is that it runs without error and the + # iteration count is sensible. + assert result.n_iter >= 1 + assert result.weights.shape == (2,) + + +def test_fit_mixture_em_warns_on_complete_case_drop(): + rng = np.random.default_rng(7) + augmented = rng.normal(size=(200, 4)) + augmented[:30, 2] = np.nan # 30 incomplete rows -> 170 complete + + with pytest.warns(RuntimeWarning, match=r"30/200"): + result = fit_mixture_em(augmented, n_components=2, n_init=2, seed=7) + + assert result.weights.shape == (2,) + + +def test_fit_mixture_em_no_warning_when_complete(): + rng = np.random.default_rng(8) + augmented = rng.normal(size=(200, 4)) # no NaNs + + with warnings.catch_warnings(): + warnings.simplefilter("error", RuntimeWarning) + # Must not raise: no complete-case rows dropped. + fit_mixture_em(augmented, n_components=2, n_init=2, seed=8) + + +def test_fit_mixture_em_raises_when_too_few_complete_rows(): + augmented = np.array([[np.nan, 1.0], [1.0, 2.0]]) + with pytest.raises(InsufficientCompleteCasesError, match="missing_data"): + fit_mixture_em(augmented, n_components=3, n_init=1, seed=0) diff --git a/tests/test_amn_moments.py b/tests/test_amn_moments.py new file mode 100644 index 00000000..4293708a --- /dev/null +++ b/tests/test_amn_moments.py @@ -0,0 +1,213 @@ +"""Unit tests for `skillmodels.amn.moments` Spearman estimators.""" + +import numpy as np +import pytest + +from skillmodels.amn.moments import ( + SpearmanResult, + derive_unexplained_sd, + seed_beta_from_ols, + spearman_factor_moments, +) + + +def _simulate_three_indicators( + *, + n: int, + loadings: np.ndarray, + meas_sds: np.ndarray, + factor_var: float, + seed: int = 0, +) -> np.ndarray: + rng = np.random.default_rng(seed) + factor = rng.normal(0.0, np.sqrt(factor_var), size=n) + eps = rng.normal(0.0, 1.0, size=(n, len(loadings))) * meas_sds + return loadings * factor[:, None] + eps + + +def test_spearman_recovers_loadings_within_30pct(): + truth_loadings = np.array([1.0, 1.3, 0.8]) + truth_meas_sds = np.array([0.4, 0.5, 0.3]) + truth_factor_var = 1.5 + measurements = _simulate_three_indicators( + n=2000, + loadings=truth_loadings, + meas_sds=truth_meas_sds, + factor_var=truth_factor_var, + seed=42, + ) + + result = spearman_factor_moments(measurements, anchor_idx=0) + + assert result.valid + assert result.loadings[0] == pytest.approx(1.0, abs=1e-12) + assert result.loadings[1] == pytest.approx(truth_loadings[1], rel=0.30) + assert result.loadings[2] == pytest.approx(truth_loadings[2], rel=0.30) + assert result.latent_var == pytest.approx(truth_factor_var, rel=0.30) + for k in range(3): + assert result.meas_sds[k] == pytest.approx(truth_meas_sds[k], rel=0.30) + + +def test_spearman_anchor_fallback_on_zero_cov(): + rng = np.random.default_rng(0) + n = 1500 + factor = rng.normal(0.0, 1.0, size=n) + # First measurement is independent noise; the next two share the factor. + indep = rng.normal(0.0, 1.0, size=n) + measurements = np.column_stack( + [ + indep, + 1.2 * factor + 0.4 * rng.normal(size=n), + 0.9 * factor + 0.3 * rng.normal(size=n), + ] + ) + + result = spearman_factor_moments(measurements, anchor_idx=0) + + # Anchor candidate 0 is uncorrelated with the others — but the routine + # rotates to a different anchor and still returns a valid result, with + # the user-requested anchor (idx 0) reported on a 1.0 loading scale. + assert result.valid + assert result.loadings[0] == pytest.approx(1.0, abs=1e-12) + # The loading on idx 0 is on a degenerate scale; what matters is that + # the routine didn't NaN out and returned finite values everywhere. + assert np.all(np.isfinite(result.loadings)) + assert np.all(np.isfinite(result.meas_sds)) + assert np.isfinite(result.latent_var) + + +def test_spearman_handles_negative_residual_variance(): + # Tiny n forces sample noise where S_kk < λ_k² Var(F) is possible. + truth_loadings = np.array([1.0, 0.9, 1.1]) + truth_meas_sds = np.array([0.05, 0.05, 0.05]) + measurements = _simulate_three_indicators( + n=20, + loadings=truth_loadings, + meas_sds=truth_meas_sds, + factor_var=1.0, + seed=7, + ) + + result = spearman_factor_moments(measurements, sd_floor=1e-3) + + assert np.all(np.isfinite(result.meas_sds)) + assert np.all(result.meas_sds >= 1e-3 - 1e-12) + assert np.isfinite(result.latent_var) + + +def test_spearman_below_two_measurements_returns_invalid(): + measurements = np.random.default_rng(0).normal(size=(100, 1)) + + result = spearman_factor_moments(measurements) + + assert not result.valid + assert result.loadings.shape == (1,) + + +def test_spearman_pairwise_complete_handles_nan(): + truth_loadings = np.array([1.0, 1.2, 0.8]) + truth_meas_sds = np.array([0.3, 0.3, 0.3]) + truth_factor_var = 1.0 + measurements = _simulate_three_indicators( + n=3000, + loadings=truth_loadings, + meas_sds=truth_meas_sds, + factor_var=truth_factor_var, + seed=1, + ) + # Punch a few NaNs into different columns so listwise-complete would + # discard most rows. + rng = np.random.default_rng(2) + for col in range(3): + idx = rng.choice(3000, size=400, replace=False) + measurements[idx, col] = np.nan + + result = spearman_factor_moments(measurements) + + assert result.valid + assert result.loadings[1] == pytest.approx(truth_loadings[1], rel=0.30) + assert result.loadings[2] == pytest.approx(truth_loadings[2], rel=0.30) + + +def test_derive_unexplained_sd_clamped(): + # β'Σβ > latent_var → clamped to floor, not NaN. + sd = derive_unexplained_sd( + latent_var=0.5, + beta=np.array([2.0]), + prev_state_cov=np.array([[1.0]]), + sd_floor=1e-3, + ) + + assert sd == pytest.approx(1e-3, abs=1e-12) + + +def test_derive_unexplained_sd_recovers_residual(): + # latent_var = 1.0, β'Σβ = 0.36 → residual var = 0.64 → sd = 0.8. + sd = derive_unexplained_sd( + latent_var=1.0, + beta=np.array([0.6]), + prev_state_cov=np.array([[1.0]]), + ) + + assert sd == pytest.approx(0.8, rel=1e-9) + + +def test_derive_unexplained_sd_handles_multivariate_state(): + beta = np.array([0.3, 0.4]) + cov = np.array([[1.0, 0.2], [0.2, 1.0]]) + # β'Σβ = 0.09 + 2*0.3*0.4*0.2 + 0.16 = 0.298 + expected = float(np.sqrt(1.0 - 0.298)) + + sd = derive_unexplained_sd(latent_var=1.0, beta=beta, prev_state_cov=cov) + + assert sd == pytest.approx(expected, rel=1e-9) + + +def test_seed_beta_from_ols_recovers_known_coefs(): + rng = np.random.default_rng(0) + n = 500 + x = rng.normal(size=(n, 2)) + y = 0.7 * x[:, 0] - 0.3 * x[:, 1] + 0.1 * rng.normal(size=n) + + beta = seed_beta_from_ols(y, x) + + assert beta.shape == (2,) + assert beta[0] == pytest.approx(0.7, rel=0.10) + assert beta[1] == pytest.approx(-0.3, rel=0.20) + + +def test_seed_beta_from_ols_handles_nan_pairwise(): + rng = np.random.default_rng(0) + n = 500 + x = rng.normal(size=(n, 2)) + y = 0.5 * x[:, 0] + 0.05 * rng.normal(size=n) + y[::5] = np.nan + x[::7, 0] = np.nan + + beta = seed_beta_from_ols(y, x) + + assert beta.shape == (2,) + assert np.all(np.isfinite(beta)) + + +def test_seed_beta_from_ols_returns_zeros_on_rank_deficient(): + n = 50 + x = np.zeros((n, 3)) + y = np.random.default_rng(0).normal(size=n) + + beta = seed_beta_from_ols(y, x) + + assert beta.shape == (3,) + assert np.allclose(beta, 0.0) + + +def test_spearman_result_dataclass_is_frozen(): + result = SpearmanResult( + loadings=np.zeros(2), + meas_sds=np.zeros(2), + latent_var=0.0, + valid=False, + ) + + with pytest.raises(AttributeError): + result.valid = True # ty: ignore[invalid-assignment] diff --git a/tests/test_amn_plot_harmonization.py b/tests/test_amn_plot_harmonization.py new file mode 100644 index 00000000..836e1079 --- /dev/null +++ b/tests/test_amn_plot_harmonization.py @@ -0,0 +1,84 @@ +"""Parametrised tests confirming plot helpers work for CHS, AF, and AMN.""" + +import numpy as np +import pandas as pd +import pytest + +from skillmodels.amn import AMNEstimationOptions, estimate_amn +from skillmodels.common.individual_states import get_individual_states +from skillmodels.common.model_spec import ( + FactorSpec, + ModelSpec, + Normalizations, +) +from skillmodels.common.variance_decomposition import decompose_measurement_variance + + +def _tiny_model() -> ModelSpec: + return ModelSpec( + factors={ + "skills": FactorSpec( + measurements=(("y1", "y2", "y3"), ("y1", "y2", "y3")), + normalizations=Normalizations( + loadings=({"y1": 1}, {"y1": 1}), + intercepts=({"y1": 0}, {}), + ), + transition_function="linear", + ), + }, + n_mixtures=2, + ) + + +def _tiny_data(n: int = 500, seed: int = 0) -> pd.DataFrame: + rng = np.random.default_rng(seed) + rows = [] + for caseid in range(n): + f0 = rng.normal() + f1 = 0.6 * f0 + rng.normal(0, 0.5) + for period, f in [(0, f0), (1, f1)]: + rows.append( + { + "caseid": caseid, + "period": period, + "y1": f + rng.normal(0, 0.3), + "y2": 0.9 * f + rng.normal(0, 0.4), + "y3": 1.1 * f + rng.normal(0, 0.5), + } + ) + return pd.DataFrame(rows).set_index(["caseid", "period"]) + + +@pytest.fixture(scope="module") +def amn_fit(): + model = _tiny_model() + data = _tiny_data(n=400) + options = AMNEstimationOptions(n_simulation_draws=1000, seed=0) + fit = estimate_amn(model, data, options) + return fit, data + + +def test_get_individual_states_dispatches_to_amn(amn_fit): + fit, data = amn_fit + + out = get_individual_states(data=data, result=fit) + + assert "unanchored_states" in out + states = out["unanchored_states"]["states"] + assert "skills" in states.columns + assert {"id", "period", "skills"} <= set(states.columns) + + +def test_decompose_measurement_variance_works_with_amn_result(amn_fit): + fit, data = amn_fit + + filtered = get_individual_states(data=data, result=fit) + states_root = filtered.get("anchored_states", filtered["unanchored_states"]) + decomp = decompose_measurement_variance( + fit.model_spec, + fit.params, + filtered_states=states_root["states"], + ) + + assert {"loading", "factor_variance", "meas_sd"} <= set(decomp.columns) + assert decomp.shape[0] > 0 diff --git a/tests/test_amn_simulate_and_regress.py b/tests/test_amn_simulate_and_regress.py new file mode 100644 index 00000000..0f14c1c5 --- /dev/null +++ b/tests/test_amn_simulate_and_regress.py @@ -0,0 +1,651 @@ +"""Tests for `skillmodels.amn.simulate_and_regress` (AMN Stage 3).""" + +import math +from dataclasses import replace + +import jax +import jax.numpy as jnp +import numpy as np +import pandas as pd +import pytest + +from skillmodels.amn.simulate_and_regress import ( + _draw_factor_panel, + _fit_generic_nls, + _fit_investment_residual, + _fit_linear, + _fit_log_ces, + simulate_and_regress, +) +from skillmodels.amn.types import MinimumDistanceResult +from skillmodels.common.decorators import register_params +from skillmodels.common.model_spec import ( + CorrectionSpec, + FactorSpec, + ModelSpec, + Normalizations, +) +from skillmodels.common.process_model import process_model +from skillmodels.common.transition_functions import log_ces_general + + +@register_params(params=["self_coef", "ctrl_coef", "constant"]) +def _skills_with_obs_control(skills, obs_ctrl, params): + """Registered transition that uses an observed control factor.""" + return ( + params["constant"] + + params["self_coef"] * skills + + params["ctrl_coef"] * obs_ctrl + ) + + +def _endogenous_model() -> ModelSpec: + """2-period model with an endogenous investment factor and a state factor.""" + return ModelSpec( + factors={ + "skills": FactorSpec( + measurements=(("y1", "y2"), ("y1", "y2")), + normalizations=Normalizations( + loadings=({"y1": 1}, {"y1": 1}), + intercepts=({"y1": 0}, {}), + ), + transition_function="linear", + ), + "investment": FactorSpec( + measurements=(("i1", "i2"), ("i1", "i2")), + normalizations=Normalizations( + loadings=({"i1": 1}, {"i1": 1}), + intercepts=({"i1": 0}, {}), + ), + transition_function="linear", + is_endogenous=True, + ), + }, + ) + + +def _endogenous_structural() -> MinimumDistanceResult: + """Structural mixture covering the endogenous model's (period, factor) slots.""" + slots = ( + (0, "skills"), + (0, "investment"), + (1, "skills"), + (1, "investment"), + ) + n = len(slots) + means = np.zeros((1, n)) + covs = np.array([np.eye(n) + 0.3 * (np.ones((n, n)) - np.eye(n))]) + return _make_structural(means, covs, slots) + + +def _linear_model() -> ModelSpec: + return ModelSpec( + factors={ + "skills": FactorSpec( + measurements=(("y1", "y2", "y3"), ("y1", "y2", "y3")), + normalizations=Normalizations( + loadings=({"y1": 1}, {"y1": 1}), + intercepts=({"y1": 0}, {}), + ), + transition_function="linear", + ), + }, + ) + + +def _make_structural( + means: np.ndarray, + covs: np.ndarray, + slots: tuple[tuple[int, str], ...], +) -> MinimumDistanceResult: + return MinimumDistanceResult( + loadings=pd.DataFrame(), + measurement_intercepts=pd.DataFrame(), + measurement_sds=pd.DataFrame(), + factor_mixture_means=means, + factor_mixture_covariances=covs, + factor_period_slots=slots, + objective_value=0.0, + success=True, + ) + + +def test_fit_linear_recovers_known_coefficients(): + rng = np.random.default_rng(0) + n = 1000 + x_design = rng.normal(size=(n, 2)) + y = 0.5 * x_design[:, 0] - 0.3 * x_design[:, 1] + 1.2 + rng.normal(0, 0.1, size=n) + + params, sd = _fit_linear(y, x_design, ["a", "b"]) + + assert params["a"] == _pytest_approx(0.5, 0.05) + assert params["b"] == _pytest_approx(-0.3, 0.05) + assert params["constant"] == _pytest_approx(1.2, 0.05) + assert sd == _pytest_approx(0.1, abs_tol=0.02) + + +def _pytest_approx(target: float, rel: float = 0.05, *, abs_tol: float | None = None): + import pytest # noqa: PLC0415 + + if abs_tol is not None: + return pytest.approx(target, abs=abs_tol) + return pytest.approx(target, rel=rel) + + +def test_fit_log_ces_recovers_known_rho_and_share(): + rng = np.random.default_rng(1) + n = 2000 + x_design = rng.normal(0, 0.5, size=(n, 2)) + rho_true = -0.5 + gammas_true = np.array([0.65, 0.35]) + exponents = x_design * rho_true + log_inside = np.log( + gammas_true[0] * np.exp(exponents[:, 0]) + + gammas_true[1] * np.exp(exponents[:, 1]) + ) + y = log_inside / rho_true + rng.normal(0, 0.05, size=n) + + params, sd = _fit_log_ces(y, x_design, ["a", "b"], with_constant=False) + + assert params["a"] == _pytest_approx(0.65, 0.15) + assert params["b"] == _pytest_approx(0.35, 0.15) + assert params["phi"] == _pytest_approx(rho_true, abs_tol=0.15) + assert sd == _pytest_approx(0.05, abs_tol=0.05) + + +def test_draw_factor_panel_yields_expected_shape_and_moments(): + slots = ((0, "skills"), (1, "skills")) + truth_means = np.array([[-0.5, -0.2], [0.5, 0.3]]) + truth_covs = np.array( + [ + [[1.0, 0.3], [0.3, 1.1]], + [[0.9, 0.1], [0.1, 1.0]], + ] + ) + structural = _make_structural(truth_means, truth_covs, slots) + + panel = _draw_factor_panel(structural, np.array([0.4, 0.6]), n_draws=20000, seed=0) + + assert panel.shape == (20000, 2) + # Sample-mean on slot 0: 0.4 * (-0.5) + 0.6 * 0.5 = 0.1 + # Sample-mean on slot 1: 0.4 * (-0.2) + 0.6 * 0.3 = 0.1 + np.testing.assert_allclose(panel.mean().to_numpy(), [0.1, 0.1], atol=0.05) + + +def test_simulate_and_regress_returns_linear_transition_for_simple_model(): + model = _linear_model() + processed = process_model(model) + + # Build a structural result where both periods have a single + # factor; truth coefficient for the period-0 -> period-1 transition + # is 0.7 with intercept 0.1. + slots = ((0, "skills"), (1, "skills")) + truth_means = np.array([[0.0, 0.0]]) + truth_covs = np.array([[[1.0, 0.7], [0.7, 1.0 * 0.7**2 + 0.51]]]) + structural = _make_structural(truth_means, truth_covs, slots) + + result = simulate_and_regress( + structural, + processed, + model, + mixture_weights=np.array([1.0]), + n_draws=5000, + seed=0, + ) + + params = result.production_params + slope = float( + params.loc[("transition", 0, "skills", "skills"), "value"] # ty: ignore[invalid-argument-type] + ) + assert slope == _pytest_approx(0.7, abs_tol=0.05) + + +def test_simulate_and_regress_handles_translog(): + """Generic NLS path recovers translog params via the function callable.""" + from skillmodels.common.model_spec import ( # noqa: PLC0415 + FactorSpec, + ModelSpec, + Normalizations, + ) + from skillmodels.common.process_model import process_model # noqa: PLC0415 + + model = ModelSpec( + factors={ + "skills": FactorSpec( + measurements=(("y1", "y2", "y3"), ("y1", "y2", "y3")), + normalizations=Normalizations( + loadings=({"y1": 1}, {"y1": 1}), + intercepts=({"y1": 0}, {}), + ), + transition_function="translog", + ), + }, + ) + processed = process_model(model) + slots = ((0, "skills"), (1, "skills")) + # Cov(period0, period1) chosen so OLS slope ≈ 0.6. + truth_means = np.array([[0.0, 0.0]]) + truth_covs = np.array([[[1.0, 0.6], [0.6, 1.0 * 0.6**2 + 0.4]]]) + structural = MinimumDistanceResult( + loadings=pd.DataFrame(), + measurement_intercepts=pd.DataFrame(), + measurement_sds=pd.DataFrame(), + factor_mixture_means=truth_means, + factor_mixture_covariances=truth_covs, + factor_period_slots=slots, + objective_value=0.0, + success=True, + ) + + result = simulate_and_regress( + structural, + processed, + model, + mixture_weights=np.array([1.0]), + n_draws=5000, + seed=0, + ) + + params = result.production_params + # translog params: linear coefficient on `skills` plus `skills ** 2` + # plus `constant`. The linear coefficient should approach the + # cov / var slope (≈ 0.6); the square coefficient should be small. + assert ("transition", 0, "skills", "skills") in params.index + assert ("transition", 0, "skills", "skills ** 2") in params.index + assert ("transition", 0, "skills", "constant") in params.index + slope = float( + params.loc[("transition", 0, "skills", "skills"), "value"] # ty: ignore[invalid-argument-type] + ) + assert slope == _pytest_approx(0.6, abs_tol=0.1) + + +def test_simulate_and_regress_no_investment_eq_category(): + model = _endogenous_model() + processed = process_model(model) + structural = _endogenous_structural() + + result = simulate_and_regress( + structural, + processed, + model, + mixture_weights=np.array([1.0]), + n_draws=3000, + seed=0, + ) + + # Production params are produced; the misleading 'investment_eq' rows + # are gone and investment_params is empty. + assert not result.production_params.empty + assert len(result.investment_params) == 0 + categories = set(result.production_params.index.get_level_values("category")) | set( + result.investment_params.index.get_level_values("category") + ) + assert "investment_eq" not in categories + + +# --- Control-function (investment-endogeneity) regression fixtures ---------- +# +# Closed-form LINEAR DGP for the AMN/AF control-function correction. One +# skill (state) factor + one endogenous investment factor + an observed +# instrument `income`, over two periods. Primitives are independent +# N(0, .): theta0 (var 1.0), income Y0 (var 1.0), eta_I (var 0.50), +# eps_C (var 0.30), and an extra independent primitive feeding the +# irrelevant f[1|investment] slot. The DGP sets investment I0 to +# b_I times theta0 plus b_Y times Y0 plus eta_I (b_I=0.50, b_Y=0.70), +# and next-period skills theta1 to lam times theta0 plus psi times I0 +# plus kappa times eta_I plus eps_C (lam=0.40, psi=0.60, kappa=0.80). +# OLS of theta1 on theta0 and I0 is biased upward on the I0 coefficient +# (I0 is correlated with eta_I, which enters theta1); adding the +# first-stage residual eta_I as a control function `cf` recovers +# psi=0.60 and identifies kappa=0.80. + +_CF_B_I = 0.50 +_CF_B_Y = 0.70 +_CF_LAM = 0.40 +_CF_PSI = 0.60 +_CF_KAPPA = 0.80 +_CF_SLOTS = ( + (0, "skills"), + (0, "investment"), + (0, "income"), + (1, "skills"), + (1, "investment"), +) + + +def _cf_model() -> ModelSpec: + """Skill + endogenous investment factor with an observed instrument.""" + return ModelSpec( + factors={ + "skills": FactorSpec( + measurements=(("y1", "y2"), ("y1", "y2")), + normalizations=Normalizations( + loadings=({"y1": 1}, {"y1": 1}), + intercepts=({"y1": 0}, {}), + ), + transition_function="linear", + ), + "investment": FactorSpec( + measurements=(("i1", "i2"), ("i1", "i2")), + normalizations=Normalizations( + loadings=({"i1": 1}, {"i1": 1}), + intercepts=({"i1": 0}, {}), + ), + transition_function="linear", + is_endogenous=True, + correction=CorrectionSpec( + state_predictors=("skills",), + instruments=("income",), + targets=("skills",), + ), + ), + }, + observed_factors=("income",), + ) + + +def _cf_structural() -> MinimumDistanceResult: + """Structural mixture built from the closed-form control-function DGP.""" + # Primitive variances: theta0, Y0, eta_I, eps_C, extra. + prim_var = np.array([1.0, 1.0, 0.50, 0.30, 1.0]) + # Rows = slots; cols = primitives [theta0, Y0, eta_I, eps_C, extra]. + # Reduced form of theta1: loading (lam + psi*b_I) on theta0, psi*b_Y + # on Y0, (psi + kappa) on eta_I, and 1 on eps_C. + b_matrix = np.array( + [ + [1.0, 0.0, 0.0, 0.0, 0.0], # (0, skills) = theta0 + [_CF_B_I, _CF_B_Y, 1.0, 0.0, 0.0], # (0, investment) = I0 + [0.0, 1.0, 0.0, 0.0, 0.0], # (0, income) = Y0 + [ + _CF_LAM + _CF_PSI * _CF_B_I, + _CF_PSI * _CF_B_Y, + _CF_PSI + _CF_KAPPA, + 1.0, + 0.0, + ], # (1, skills) = theta1 + [0.0, 0.0, 0.0, 0.0, 1.0], # (1, investment) = extra + ] + ) + cov = b_matrix @ np.diag(prim_var) @ b_matrix.T + means = np.zeros((1, len(_CF_SLOTS))) + return _make_structural(means, cov[None, :, :], _CF_SLOTS) + + +def test_fit_investment_residual_recovers_first_stage(): + rng = np.random.default_rng(0) + n = 5000 + theta0 = rng.normal(size=n) + income = rng.normal(size=n) + eta_i = rng.normal(0, np.sqrt(0.50), size=n) + y_invest = _CF_B_I * theta0 + _CF_B_Y * income + eta_i + x_determinants = np.column_stack([theta0, income]) + + coefs, sd, residual = _fit_investment_residual( + y_invest, x_determinants, ["skills", "income"] + ) + + assert coefs["skills"] == _pytest_approx(_CF_B_I, abs_tol=0.03) + assert coefs["income"] == _pytest_approx(_CF_B_Y, abs_tol=0.03) + assert sd == _pytest_approx(np.sqrt(0.50), abs_tol=0.05) + corr = np.corrcoef(residual, eta_i)[0, 1] + assert corr == _pytest_approx(1.0, abs_tol=0.02) + + +def test_simulate_and_regress_control_function_recovers_psi_and_kappa(): + model = _cf_model() + processed = process_model(model) + structural = _cf_structural() + + result = simulate_and_regress( + structural, + processed, + model, + mixture_weights=np.array([1.0]), + n_draws=4000, + seed=0, + ) + + prod = result.production_params + psi = float(prod.loc[("transition", 0, "skills", "investment"), "value"]) # ty: ignore[invalid-argument-type] + lam = float(prod.loc[("transition", 0, "skills", "skills"), "value"]) # ty: ignore[invalid-argument-type] + kappa = float(prod.loc[("transition", 0, "skills", "cf"), "value"]) # ty: ignore[invalid-argument-type] + assert psi == _pytest_approx(_CF_PSI, abs_tol=0.08) + assert lam == _pytest_approx(_CF_LAM, abs_tol=0.08) + assert kappa == _pytest_approx(_CF_KAPPA, abs_tol=0.10) + + inv = result.investment_params + assert float( + inv.loc[("investment_eq", 0, "investment", "income"), "value"] # ty: ignore[invalid-argument-type] + ) == _pytest_approx(_CF_B_Y, abs_tol=0.08) + assert float( + inv.loc[("investment_eq", 0, "investment", "skills"), "value"] # ty: ignore[invalid-argument-type] + ) == _pytest_approx(_CF_B_I, abs_tol=0.08) + assert ("investment_sds", 0, "investment", "-") in inv.index + + # Gating: the investment factor's own transition gets no cf row. + assert ("transition", 0, "investment", "cf") not in prod.index + + +_CF_SES = 0.5 # true production coefficient on the non-instrument control `ses` + + +def _cf_model_with_control() -> ModelSpec: + """Corrected model with an observed instrument AND a non-instrument control.""" + return ModelSpec( + factors={ + "skills": FactorSpec( + measurements=(("y1", "y2"), ("y1", "y2")), + normalizations=Normalizations( + loadings=({"y1": 1}, {"y1": 1}), + intercepts=({"y1": 0}, {}), + ), + transition_function="linear", + ), + "investment": FactorSpec( + measurements=(("i1", "i2"), ("i1", "i2")), + normalizations=Normalizations( + loadings=({"i1": 1}, {"i1": 1}), + intercepts=({"i1": 0}, {}), + ), + transition_function="linear", + is_endogenous=True, + correction=CorrectionSpec( + state_predictors=("skills",), + instruments=("income",), + targets=("skills",), + ), + ), + }, + observed_factors=("income", "ses"), + ) + + +def _cf_control_structural() -> MinimumDistanceResult: + """CF DGP where skills1 also loads on the non-instrument control ses0.""" + slots = ((0, "skills"), (0, "investment"), (0, "income"), (0, "ses"), (1, "skills")) + # Primitives: [theta0, Y0, eta_I, ses0, eps_C]. + prim_var = np.array([1.0, 1.0, 0.50, 1.0, 0.30]) + b_matrix = np.array( + [ + [1.0, 0.0, 0.0, 0.0, 0.0], # (0, skills) = theta0 + [_CF_B_I, _CF_B_Y, 1.0, 0.0, 0.0], # (0, investment) = I0 + [0.0, 1.0, 0.0, 0.0, 0.0], # (0, income) = Y0 + [0.0, 0.0, 0.0, 1.0, 0.0], # (0, ses) = ses0 + [ + _CF_LAM + _CF_PSI * _CF_B_I, + _CF_PSI * _CF_B_Y, + _CF_PSI + _CF_KAPPA, + _CF_SES, + 1.0, + ], # (1, skills) = theta1, with a direct ses0 effect + ] + ) + cov = b_matrix @ np.diag(prim_var) @ b_matrix.T + means = np.zeros((1, len(slots))) + return _make_structural(means, cov[None, :, :], slots) + + +def test_simulate_and_regress_keeps_non_instrument_observed_controls(): + """A non-instrument observed factor stays a production control under a CF. + + Regression for audit F8: under an active control function the production + design dropped ALL observed factors (treating every one as an excluded + instrument), so a genuine observed control silently vanished from the + production equation (its column index was clamped under jax.vmap). Only + `CorrectionSpec.instruments` must be excluded; other observed factors remain + production inputs and their coefficients must be recovered. + """ + model = _cf_model_with_control() + processed = process_model(model) + structural = _cf_control_structural() + + result = simulate_and_regress( + structural, + processed, + model, + mixture_weights=np.array([1.0]), + n_draws=8000, + seed=0, + ) + + prod = result.production_params + # The non-instrument control `ses` is a production input and is recovered. + assert ("transition", 0, "skills", "ses") in prod.index + ses_coef = float(prod.loc[("transition", 0, "skills", "ses"), "value"]) # ty: ignore[invalid-argument-type] + assert ses_coef == _pytest_approx(_CF_SES, abs_tol=0.08) + # The excluded instrument `income` is NOT a production input. + assert ("transition", 0, "skills", "income") not in prod.index + + +def _obs_control_model() -> ModelSpec: + """One latent factor whose registered transition uses an observed control.""" + return ModelSpec( + factors={ + "skills": FactorSpec( + measurements=(("y1", "y2"), ("y1", "y2")), + normalizations=Normalizations( + loadings=({"y1": 1}, {"y1": 1}), + intercepts=({"y1": 0}, {}), + ), + transition_function=_skills_with_obs_control, + ), + }, + observed_factors=("obs_ctrl",), + ) + + +def test_simulate_and_regress_tolerates_transition_arg_absent_from_panel(): + """A registered transition may name a factor the simulated panel omits. + + bw's registered production functions reference observed control factors that + the AMN structural panel does not simulate. Resolving such a transition must + look its arguments up against the full factor order (not the per-period + design columns) so the lookup does not raise; the absent column is read past + the end of the design row and clamped by jax -- a throwaway seed the CHS MLE + re-fits. Regression for the `tuple.index(x): x not in tuple` crash. + """ + model = _obs_control_model() + processed = process_model(model) + # Panel has only the latent `skills` slots; `obs_ctrl` is not simulated. + slots = ((0, "skills"), (1, "skills")) + means = np.zeros((1, 2)) + covs = (np.eye(2) + 0.3 * (np.ones((2, 2)) - np.eye(2)))[None] + structural = _make_structural(means, covs, slots) + + result = simulate_and_regress( + structural, + processed, + model, + mixture_weights=np.array([1.0]), + n_draws=2000, + seed=0, + ) + + assert ("transition", 0, "skills", "self_coef") in result.production_params.index + + +def test_simulate_and_regress_naive_path_is_biased(): + model = _cf_model() + structural = _cf_structural() + naive_model = model.without_correction() + + naive = simulate_and_regress( + structural, + process_model(naive_model), + naive_model, + mixture_weights=np.array([1.0]), + n_draws=4000, + seed=0, + ) + corrected = simulate_and_regress( + structural, + process_model(model), + model, + mixture_weights=np.array([1.0]), + n_draws=4000, + seed=0, + ) + + naive_psi = float( + naive.production_params.loc[("transition", 0, "skills", "investment"), "value"] # ty: ignore[invalid-argument-type] + ) + corrected_psi = float( + corrected.production_params.loc[ # ty: ignore[invalid-argument-type] + ("transition", 0, "skills", "investment"), "value" + ] + ) + # The naive OLS on I_t is biased well above the true psi=0.60. + assert naive_psi > 0.90 + assert abs(naive_psi - _CF_PSI) > 0.25 + # The control-function estimate is close to the truth. + assert abs(corrected_psi - _CF_PSI) < 0.10 + + +def test_simulate_and_regress_raises_on_higher_order_kappa(): + # AMN implements only the linear cf term; a degree-2 (translog) CorrectionSpec + # basis must raise rather than silently estimate a linear correction. + model = _cf_model() + inv = model.factors["investment"] + assert inv.correction is not None + hi_correction = replace(inv.correction, kappa_degree=2) + model = model._replace( + factors=dict(model.factors) + | {"investment": replace(inv, correction=hi_correction)} + ) + processed = process_model(model) + structural = _cf_structural() + + with pytest.raises(NotImplementedError, match="linear control function"): + simulate_and_regress( + structural, + processed, + model, + mixture_weights=np.array([1.0]), + n_draws=200, + seed=0, + ) + + +def test_fit_generic_nls_keeps_generalized_ces_shares_positive() -> None: + """The generalized-CES NLS keeps share coordinates strictly positive. + + `log_ces_general` evaluates `tfp * log(sum_i gamma_i exp(sigma_i s_i))`, which is + non-finite once a share `gamma_i` turns non-positive. Optimising the shares in + log space keeps them positive across every unconstrained Levenberg-Marquardt + step, so a noiseless CES target is fit to near-zero residual with positive + fitted shares. + """ + rng = np.random.default_rng(20260624) + param_names = ("skills", "inv", "sigma_skills", "sigma_inv", "tfp") + true_params = jnp.asarray([0.6, 0.4, 0.5, 0.3, 1.0]) + states = rng.normal(size=(200, 2)) * 0.3 + target = np.asarray( + jax.vmap(log_ces_general, in_axes=(0, None))(jnp.asarray(states), true_params) + ) + + fitted, sd = _fit_generic_nls(log_ces_general, param_names, target, states) + + assert math.isfinite(sd) + assert sd < 1e-3 + assert fitted["skills"] > 0.0 + assert fitted["inv"] > 0.0 diff --git a/tests/test_amn_start_values.py b/tests/test_amn_start_values.py new file mode 100644 index 00000000..c4d477a4 --- /dev/null +++ b/tests/test_amn_start_values.py @@ -0,0 +1,432 @@ +"""Tests for `skillmodels.amn.start_values.get_spearman_start_params`. + +These tests exercise the Spearman + Bartlett-OLS start-value pipeline +(the legacy default, now opt-in via `start_params_strategy="spearman"`). +The new default `"amn"` runs the full Attanasio-Meghir-Nix estimator +upfront and is tested in `test_amn_estimate.py` and via +`test_maximization_inputs.py`. +""" + +import functools + +import numpy as np +import optimagic as om +import pandas as pd +import pytest + +from skillmodels.amn.start_values import ( + _amn_values_on_chs_index, + _apply_neutral_defaults, + _kmeans_labels, + get_spearman_start_params, + pool_equality_groups, +) +from skillmodels.chs.maximization_inputs import get_maximization_inputs +from skillmodels.chs.options import CHSEstimationOptions +from skillmodels.common.config import TEST_DATA_DIR +from skillmodels.common.constraints import select_by_loc +from skillmodels.common.model_spec import ( + CorrectionSpec, + FactorSpec, + ModelSpec, + Normalizations, +) +from skillmodels.common.params_index import get_params_index +from skillmodels.common.process_model import process_model +from skillmodels.common.utilities import reduce_n_periods +from skillmodels.test_data.model2 import MODEL2, MODEL2_CHS_OPTIONS + + +def _cf_model() -> ModelSpec: + """2-period skill model with an endogenous investment factor + instrument.""" + return ModelSpec( + factors={ + "skills": FactorSpec( + measurements=(("y1", "y2"), ("y1", "y2")), + normalizations=Normalizations( + loadings=({"y1": 1}, {"y1": 1}), + intercepts=({"y1": 0}, {}), + ), + transition_function="linear", + ), + "investment": FactorSpec( + measurements=(("i1", "i2"), ("i1", "i2")), + normalizations=Normalizations( + loadings=({"i1": 1}, {"i1": 1}), + intercepts=({"i1": 0}, {}), + ), + transition_function="linear", + is_endogenous=True, + correction=CorrectionSpec( + state_predictors=("skills",), + instruments=("income",), + targets=("skills",), + ), + ), + }, + observed_factors=("income",), + ) + + +def test_kmeans_labels_separates_bimodal_data() -> None: + rng = np.random.default_rng(0) + low = rng.normal(-4.0, 0.5, size=300) + high = rng.normal(6.0, 0.5, size=200) + features = np.concatenate([low, high]).reshape(-1, 1) + labels = _kmeans_labels(features, 2) + cluster_means = sorted(float(features[labels == k].mean()) for k in (0, 1)) + assert cluster_means[0] < -2.0 + assert cluster_means[1] > 4.0 + + +def test_kmeans_labels_is_deterministic() -> None: + rng = np.random.default_rng(1) + features = rng.normal(size=(200, 2)) + a = _kmeans_labels(features, 3) + b = _kmeans_labels(features, 3) + assert np.array_equal(a, b) + + +def test_amn_values_map_cf_to_kappa_and_calendar_to_aug_period(): + """AMN seeds (calendar-time, cf-under-transition) land on the CHS index. + + Regression for the silent index mismatch: CHS uses augmented periods and a + dedicated `kappa` category, while AMN emits in calendar time with the + control-function coefficient under `transition`/`cf`. The translator must + (a) route the AMN cf row to *every* CHS kappa aug_period that shares its + calendar period, and (b) place a calendar-1 skills loading at the skills + *state* aug_period (2), not the investment aug_period (1). + """ + processed = process_model(_cf_model()) + chs_index = get_params_index( + update_info=processed.update_info, + labels=processed.labels, + dimensions=processed.dimensions, + transition_info=processed.transition_info, + endogenous_factors_info=processed.endogenous_factors_info, + ) + names = ["category", "aug_period", "name1", "name2"] + amn = pd.DataFrame( + {"value": [0.8, 0.37, 0.55]}, + index=pd.MultiIndex.from_tuples( + [ + ("transition", 0, "skills", "cf"), # AMN kappa, calendar 0 + ("loadings", 1, "y1", "skills"), # calendar-1 skills loading + ("loadings", 0, "i2", "investment"), # calendar-0 investment loading + ], + names=names, + ), + ) + + seeded = _amn_values_on_chs_index( + amn, chs_index, processed.labels.aug_periods_to_periods + ) + + # cf -> kappa at both aug_periods sharing calendar 0; never onto a transition. + assert ("transition", 0, "skills", "cf") not in chs_index + assert seeded.loc[("kappa", 0, "skills", "cf")] == pytest.approx(0.8) + assert seeded.loc[("kappa", 1, "skills", "cf")] == pytest.approx(0.8) + # calendar-1 skills loading -> aug_period 2 (state), not 1 (investment). + assert seeded.loc[("loadings", 2, "y1", "skills")] == pytest.approx(0.37) + # calendar-0 investment loading -> aug_period 1. + assert seeded.loc[("loadings", 1, "i2", "investment")] == pytest.approx(0.55) + + +def test_apply_neutral_defaults_fills_correction_categories() -> None: + """Neutral defaults must seed `investment_eq` and `kappa`. + + The first-stage (`investment_eq`) and control-function (`kappa`) + coefficients are not produced by the moment / AMN overrides for every + model, so the neutral defaults must cover them; otherwise the seeded + start point keeps NaNs and `optimagic` rejects it. They seed to 0 — no + first-stage relationship and no correction initially. + """ + index = pd.MultiIndex.from_tuples( + [ + ("investment_eq", 2, "inv", "fac1"), + ("investment_eq", 2, "inv", "constant"), + ("kappa", 1, "fac1", "cf"), + ("transition", 0, "fac1", "fac1"), + ], + names=["category", "aug_period", "name1", "name2"], + ) + params = pd.DataFrame({"value": [np.nan] * len(index)}, index=index) + free = params["value"].isna() + + _apply_neutral_defaults(params, free, n_mixtures=1) + + assert not params["value"].isna().any() + assert params.loc[("investment_eq", 2, "inv", "fac1"), "value"] == 0.0 + assert params.loc[("kappa", 1, "fac1", "cf"), "value"] == 0.0 + + +def test_apply_neutral_defaults_seeds_higher_order_terms_small() -> None: + """Higher-order terms seed to a small 0.01, not the linear defaults. + + Translog interactions / squares (`"fac1 * fac2"`, `"fac1 ** 2"`) and + higher-order control-function terms (`"cf * fac1"`, `"cf ** 2"`) are not + produced by the linear AMN/Spearman seeds. They get a small start so the + optimiser explores away from zero without the higher-order monomials + dominating the seeded production function. + """ + index = pd.MultiIndex.from_tuples( + [ + ("transition", 0, "fac1", "fac1"), + ("transition", 0, "fac1", "fac1 * fac2"), + ("transition", 0, "fac1", "fac1 ** 2"), + ("kappa", 1, "fac1", "cf"), + ("kappa", 1, "fac1", "cf * fac1"), + ("kappa", 1, "fac1", "cf ** 2"), + ], + names=["category", "aug_period", "name1", "name2"], + ) + params = pd.DataFrame({"value": [np.nan] * len(index)}, index=index) + free = params["value"].isna() + + _apply_neutral_defaults(params, free, n_mixtures=1) + + # Linear terms keep their category defaults ... + assert params.loc[("transition", 0, "fac1", "fac1"), "value"] == 0.5 + assert params.loc[("kappa", 1, "fac1", "cf"), "value"] == 0.0 + # ... higher-order terms (a space in `name2`) seed small. + assert params.loc[("transition", 0, "fac1", "fac1 * fac2"), "value"] == 0.01 + assert params.loc[("transition", 0, "fac1", "fac1 ** 2"), "value"] == 0.01 + assert params.loc[("kappa", 1, "fac1", "cf * fac1"), "value"] == 0.01 + assert params.loc[("kappa", 1, "fac1", "cf ** 2"), "value"] == 0.01 + + +@pytest.fixture +def model2_short() -> ModelSpec: + spec = reduce_n_periods(MODEL2, new_n_periods=3) + assert isinstance(spec, ModelSpec) + return spec + + +@pytest.fixture +def model2_data() -> pd.DataFrame: + return pd.read_stata(TEST_DATA_DIR / "model2_simulated_data.dta").set_index( + ["caseid", "period"] + ) + + +def test_default_strategy_is_amn() -> None: + """`CHSEstimationOptions().start_params_strategy` defaults to "amn".""" + assert CHSEstimationOptions().start_params_strategy == "amn" + + +def test_template_filled_with_spearman_strategy( + model2_short: ModelSpec, model2_data: pd.DataFrame +) -> None: + """`start_params_strategy="spearman"` returns a fully-populated template.""" + inputs = get_maximization_inputs( + model2_short, + model2_data, + chs_options=CHSEstimationOptions(start_params_strategy="spearman"), + ) + template = inputs["params_template"] + assert not template["value"].isna().any() + + +def test_strategy_none_leaves_nan( + model2_short: ModelSpec, model2_data: pd.DataFrame +) -> None: + """`start_params_strategy="none"` reproduces the legacy NaN behaviour.""" + inputs = get_maximization_inputs( + model2_short, + model2_data, + chs_options=CHSEstimationOptions(start_params_strategy="none"), + ) + template = inputs["params_template"] + assert template["value"].isna().any() + + +def test_filled_template_yields_finite_loglike( + model2_short: ModelSpec, model2_data: pd.DataFrame +) -> None: + """The moment-seeded template produces a finite log-likelihood.""" + inputs = get_maximization_inputs( + model2_short, model2_data, chs_options=MODEL2_CHS_OPTIONS + ) + val = inputs["loglike"](inputs["params_template"]) + assert np.isfinite(val) + + +def test_loadings_seeded_from_data_not_constant( + model2_short: ModelSpec, model2_data: pd.DataFrame +) -> None: + """Loadings vary across measurements (Spearman seed, not flat 1.0).""" + inputs = get_maximization_inputs( + model2_short, model2_data, chs_options=MODEL2_CHS_OPTIONS + ) + template = inputs["params_template"] + loadings = template.loc["loadings", "value"] + free = ( + template.loc["loadings", "lower_bound"] + != template.loc["loadings", "upper_bound"] + ) + free_loadings = loadings[free].to_numpy() + assert (free_loadings != free_loadings[0]).any() + assert not np.allclose(free_loadings, 1.0) + + +def test_meas_sds_seeded_from_data_not_constant( + model2_short: ModelSpec, model2_data: pd.DataFrame +) -> None: + """Measurement SDs vary across indicators (residual SD seed, not 0.5).""" + inputs = get_maximization_inputs( + model2_short, model2_data, chs_options=MODEL2_CHS_OPTIONS + ) + template = inputs["params_template"] + meas_sds = template.loc["meas_sds", "value"].to_numpy() + assert (meas_sds != meas_sds[0]).any() + assert (meas_sds > 0).all() + + +def test_initial_cholcovs_diagonal_is_positive( + model2_short: ModelSpec, model2_data: pd.DataFrame +) -> None: + """Initial-cov diagonals are positive (sqrt(latent_var)).""" + inputs = get_maximization_inputs( + model2_short, model2_data, chs_options=MODEL2_CHS_OPTIONS + ) + template = inputs["params_template"] + cholcov = template.loc["initial_cholcovs", "value"] + diag_mask = pd.Series( + [name2.split("-")[0] == name2.split("-")[1] for *_, name2 in cholcov.index], + index=cholcov.index, + ) + assert (cholcov[diag_mask] > 0).all() + + +def test_fixed_params_pin_survives_moment_fill( + model2_short: ModelSpec, model2_data: pd.DataFrame +) -> None: + """Entries set by `fixed_params` keep their pinned value.""" + fixed_idx = pd.MultiIndex.from_tuples( + [("transition", 0, "fac1", "fac3"), ("transition", 1, "fac1", "fac3")], + names=["category", "period", "name1", "name2"], + ) + fixed_df = pd.DataFrame({"value": [0.0, 0.0]}, index=fixed_idx) + inputs = get_maximization_inputs( + model2_short, model2_data, chs_options=MODEL2_CHS_OPTIONS, fixed_params=fixed_df + ) + template = inputs["params_template"] + assert template.loc[("transition", 0, "fac1", "fac3"), "value"] == 0.0 + assert template.loc[("transition", 1, "fac1", "fac3"), "value"] == 0.0 + + +def test_explicit_strategy_argument_via_helper( + model2_short: ModelSpec, model2_data: pd.DataFrame +) -> None: + """The standalone helper produces the same fills as the wired-in spearman path.""" + from skillmodels.common.constraints import ( # noqa: PLC0415 + project_to_probability_constraints, + ) + + inputs_raw = get_maximization_inputs( + model2_short, + model2_data, + chs_options=CHSEstimationOptions(start_params_strategy="none"), + ) + template_raw = inputs_raw["params_template"] + filled = get_spearman_start_params(model2_short, model2_data, template_raw) + # The wired-in path renormalizes free entries of every + # ProbabilityConstraint to sum to one after the strategy step; + # apply the same projection here so the two paths can be compared. + filled = project_to_probability_constraints( + params_template=filled, constraints=inputs_raw["constraints"] + ) + + inputs_spearman = get_maximization_inputs( + model2_short, + model2_data, + chs_options=CHSEstimationOptions(start_params_strategy="spearman"), + ) + template_spearman = inputs_spearman["params_template"] + + pd.testing.assert_series_equal(filled["value"], template_spearman["value"]) + + +def test_helper_does_not_overwrite_user_set_values( + model2_short: ModelSpec, model2_data: pd.DataFrame +) -> None: + """If the caller already set a non-NaN value, the helper preserves it.""" + inputs = get_maximization_inputs( + model2_short, + model2_data, + chs_options=CHSEstimationOptions(start_params_strategy="none"), + ) + template = inputs["params_template"] + sentinel_loc = template.index[template["value"].isna()][0] + template.loc[sentinel_loc, "value"] = 999.0 + filled = get_spearman_start_params(model2_short, model2_data, template) + assert filled.loc[sentinel_loc, "value"] == 999.0 + + +def test_transition_coefficients_seeded_via_ols( + model2_short: ModelSpec, model2_data: pd.DataFrame +) -> None: + """Free transition rows get AMN-style OLS seeds, not constant 0.5.""" + inputs = get_maximization_inputs( + model2_short, model2_data, chs_options=MODEL2_CHS_OPTIONS + ) + template = inputs["params_template"] + free_trans = template.loc["transition"] + free_mask = free_trans["lower_bound"] != free_trans["upper_bound"] + free_values = free_trans.loc[free_mask, "value"] + assert (free_values != 0.5).any() + + +def test_shock_sds_seeded_via_residual_variance( + model2_short: ModelSpec, model2_data: pd.DataFrame +) -> None: + """Free shock_sds rows get residual-variance seeds, not flat 0.5.""" + inputs = get_maximization_inputs( + model2_short, model2_data, chs_options=MODEL2_CHS_OPTIONS + ) + template = inputs["params_template"] + free_sds = template.loc["shock_sds"] + free_mask = free_sds["lower_bound"] != free_sds["upper_bound"] + free_values = free_sds.loc[free_mask, "value"] + assert (free_values != 0.5).any() + + +def test_pool_equality_groups_averages_unpinned() -> None: + """Members of an `om.EqualityConstraint` group are averaged.""" + idx = pd.MultiIndex.from_tuples( + [ + ("meas_sds", 0, "z1", "-"), + ("meas_sds", 1, "z1", "-"), + ("meas_sds", 2, "z1", "-"), + ], + names=["category", "period", "name1", "name2"], + ) + params = pd.DataFrame({"value": [0.2, 0.4, 0.6]}, index=idx) + constraints: list[om.constraints.Constraint] = [ + om.EqualityConstraint( + selector=functools.partial(select_by_loc, loc=idx), + ), + ] + out = pool_equality_groups(params, constraints) + assert list(out["value"]) == pytest.approx([0.4, 0.4, 0.4]) + + +def test_pool_equality_groups_respects_pinned() -> None: + """If any group member is pinned, that value propagates to the rest.""" + idx = pd.MultiIndex.from_tuples( + [ + ("meas_sds", 0, "z1", "-"), + ("meas_sds", 1, "z1", "-"), + ("meas_sds", 2, "z1", "-"), + ], + names=["category", "period", "name1", "name2"], + ) + params = pd.DataFrame({"value": [0.2, 0.4, 0.6]}, index=idx) + pinned = pd.Series([False, True, False], index=idx) + constraints: list[om.constraints.Constraint] = [ + om.EqualityConstraint( + selector=functools.partial(select_by_loc, loc=idx), + ), + ] + out = pool_equality_groups(params, constraints, keep_pinned_values=pinned) + assert list(out["value"]) == pytest.approx([0.4, 0.4, 0.4]) diff --git a/tests/test_ces_recovery.py b/tests/test_ces_recovery.py new file mode 100644 index 00000000..da47941a --- /dev/null +++ b/tests/test_ces_recovery.py @@ -0,0 +1,122 @@ +"""Tests for Freyberger's restricted-CES primitive scale recovery (audit F2). + +AMN's restricted-CES Stage 3 fits the production function in *transformed* +(tilde) coordinates. The transformed CES (Freyberger eq prod_fn_ces_norm, psi=1) + + ln theta~_{t+1} = (lambda_{theta,t+1,1}/sigma_t) + * ln( g1 theta~_t^{sigma_t/lambda_{theta,t,1}} + + g2 I~_t^{sigma_t/lambda_{I,t,1}} ) + +is exactly the functional form of `log_ces_general` +(`tfp * log(sum_i gamma_i * state_i^{sigma_i})`) with + + tfp = lambda_{theta,t+1,1}/sigma_t (outside coefficient) + sigma_skills = sigma_t/lambda_{theta,t,1} (theta exponent) + sigma_inv = sigma_t/lambda_{I,t,1} (investment exponent). + +`recover_primitive_ces_scales` inverts that map: from the per-period +(tfp, theta_exp, inv_exp) and the single scale anchor lambda_{theta,0,1}=1 it +recovers the primitive sigma_t, lambda_{theta,t,1}, lambda_{I,t,1} recursively +(paper lines 1357-1366). +""" + +import jax.numpy as jnp +import numpy as np +import pytest + +from skillmodels.amn.ces_recovery import ( + CESTransformedCoeffs, + recover_primitive_ces_scales, +) +from skillmodels.common.transition_functions import log_ces_general + + +def _transformed_coeffs_from_primitives( + lambda_theta: list[float], # lambda_{theta,t,1} for t = 0..T (len T+1) + lambda_inv: list[float], # lambda_{I,t,1} for t = 0..T-1 (len T) + sigma: list[float], # sigma_t for t = 0..T-1 (len T) +) -> list[CESTransformedCoeffs]: + """Forward map: primitive scales -> per-period transformed-form coefficients.""" + coeffs = [] + for t in range(len(sigma)): + coeffs.append( + CESTransformedCoeffs( + outside=lambda_theta[t + 1] / sigma[t], + theta_exponent=sigma[t] / lambda_theta[t], + inv_exponent=sigma[t] / lambda_inv[t], + ) + ) + return coeffs + + +def test_recover_primitive_ces_scales_inverts_known_primitives() -> None: + # A known primitive CES with non-trivial, period-varying scales. + lambda_theta = [1.0, 0.82, 0.9] # lambda_{theta,0,1}=1 is the anchor + lambda_inv = [1.0, 1.1] + sigma = [-0.5, -0.4] + coeffs = _transformed_coeffs_from_primitives(lambda_theta, lambda_inv, sigma) + + recovered = recover_primitive_ces_scales(coeffs, lambda_theta_0=1.0) + + assert [r.sigma for r in recovered] == pytest.approx(sigma) + assert [r.lambda_theta for r in recovered] == pytest.approx(lambda_theta[:-1]) + assert [r.lambda_inv for r in recovered] == pytest.approx(lambda_inv) + assert recovered[-1].lambda_theta_next == pytest.approx(lambda_theta[-1]) + + +def test_recover_raises_on_zero_anchor() -> None: + coeffs = [ + CESTransformedCoeffs(outside=-2.0, theta_exponent=-0.5, inv_exponent=-0.5) + ] + with pytest.raises(ValueError, match=r"nonzero|finite"): + recover_primitive_ces_scales(coeffs, lambda_theta_0=0.0) + + +def test_recover_raises_on_zero_inv_exponent() -> None: + coeffs = [CESTransformedCoeffs(outside=-2.0, theta_exponent=-0.5, inv_exponent=0.0)] + with pytest.raises(ValueError, match=r"nonzero|finite"): + recover_primitive_ces_scales(coeffs, lambda_theta_0=1.0) + + +def test_recover_raises_on_nonfinite_coeff() -> None: + coeffs = [ + CESTransformedCoeffs( + outside=float("inf"), theta_exponent=-0.5, inv_exponent=-0.5 + ) + ] + with pytest.raises(ValueError, match=r"nonzero|finite"): + recover_primitive_ces_scales(coeffs, lambda_theta_0=1.0) + + +def test_recover_raises_on_overflowing_derived_scale() -> None: + # Finite nonzero inputs whose products overflow to inf must raise, not + # silently return infinite primitive scales (Pro F5). + coeffs = [CESTransformedCoeffs(outside=2.0, theta_exponent=2.0, inv_exponent=1.0)] + with pytest.raises(ValueError, match=r"nonzero|finite"): + recover_primitive_ces_scales(coeffs, lambda_theta_0=1e308) + + +def test_log_ces_general_represents_transformed_ces() -> None: + # The audit counterexample: lambda_theta=2, lambda_inv=1, lambda_next=1, + # sigma=-0.5. The single-rho form cannot represent it (best-fit max abs + # error ~0.544); log_ces_general with the mapped params represents it + # exactly. + lam_theta, lam_inv, lam_next, sig = 2.0, 1.0, 1.0, -0.5 + g1, g2 = 0.65, 0.35 + tfp = lam_next / sig + s_theta = sig / lam_theta + s_inv = sig / lam_inv + + rng = np.random.default_rng(42) + states = rng.normal(size=(50, 2)) # [ln theta~, ln I~] + + # Direct transformed-CES target. + target = tfp * np.log( + g1 * np.exp(states[:, 0] * s_theta) + g2 * np.exp(states[:, 1] * s_inv) + ) + # log_ces_general with the mapped params, evaluated row-wise. + params = jnp.asarray([g1, g2, s_theta, s_inv, tfp]) + got = np.array([float(log_ces_general(jnp.asarray(row), params)) for row in states]) + + # Exact up to JAX float precision (x64 not enabled in this unit test). + np.testing.assert_allclose(got, target, rtol=1e-6, atol=1e-6) diff --git a/tests/test_cf_recovery.py b/tests/test_cf_recovery.py new file mode 100644 index 00000000..62254ad8 --- /dev/null +++ b/tests/test_cf_recovery.py @@ -0,0 +1,249 @@ +"""End-to-end recovery test for the CHS control-function correction. + +Simulate a panel from a known endogenous DGP with PERIOD-SPECIFIC kappa_t, then +estimate and confirm the control function recovers the known kappa_t, the +first-stage coefficients, and the corrected production-shock SD. This is the +proof that the whole CHS control-function machinery (DAG graft, investment_eq / +kappa params, carry-forward kappa zeroing, forced unscented path) works. +""" + +import jax.numpy as jnp +import numpy as np +import optimagic as om +import pytest + +from skillmodels import CorrectionSpec, FactorSpec, ModelSpec, Normalizations +from skillmodels.chs.maximization_inputs import get_maximization_inputs +from skillmodels.chs.options import CHSEstimationOptions +from skillmodels.common.params_index import get_params_index +from skillmodels.common.parse_params import create_parsing_info, parse_params +from skillmodels.common.process_data import process_data +from skillmodels.common.process_model import process_model +from skillmodels.common.simulate_data import _simulate_dataset + +N_OBS = 8000 +SEED = 20240615 +TRUE_FIRST_STAGE = {"fac1": 0.5, "fac2": 0.3, "z1": 0.7, "constant": 0.1} +# Period-specific kappa lives on the FREE odd aug_periods (1 -> period 0, +# 3 -> period 1). The even aug_periods are pinned to 0 by carry-forward zeroing. +TRUE_KAPPA = {1: 0.6, 3: -0.4} +TRUE_SHOCK_SD = 0.5 +TRUE_MEAS_SD = 0.3 + + +def _build_model() -> ModelSpec: + state_norm = Normalizations( + loadings=({"y1": 1}, {"y1": 1}, {"y1": 1}), intercepts=({}, {}, {}) + ) + fac2_norm = Normalizations( + loadings=({"w1": 1}, {"w1": 1}, {"w1": 1}), intercepts=({}, {}, {}) + ) + inv_norm = Normalizations( + loadings=({"yi1": 1}, {"yi1": 1}, {}), intercepts=({}, {}, {}) + ) + factors = { + "fac1": FactorSpec( + measurements=(("y1", "y2", "y3"),) * 3, + normalizations=state_norm, + transition_function="linear", + ), + "fac2": FactorSpec( + measurements=(("w1", "w2", "w3"),) * 3, + normalizations=fac2_norm, + transition_function="linear", + ), + "inv": FactorSpec( + # Endogenous factor must NOT be measured in the last period. + measurements=(("yi1", "yi2", "yi3"), ("yi1", "yi2", "yi3"), ()), + normalizations=inv_norm, + is_endogenous=True, + transition_function="linear", + correction=CorrectionSpec( + state_predictors=("fac1", "fac2"), + instruments=("z1",), + targets=("fac1", "fac2"), + ), + ), + } + return ModelSpec(factors=factors, observed_factors=("z1",)) + + +_MEAS_COLS = ["y1", "y2", "y3", "w1", "w2", "w3", "yi1", "yi2", "yi3"] + + +def _z1_panel(rng: np.random.Generator): + import pandas as pd # noqa: PLC0415 + + index = pd.MultiIndex.from_product( + [np.arange(N_OBS), [0, 1, 2]], names=["caseid", "period"] + ) + panel = pd.DataFrame(index=index) + panel["z1"] = rng.normal(size=len(index)) + for col in _MEAS_COLS: + panel[col] = np.nan + return panel + + +def _fill_true_params(template, all_factors): + """Fill every free template entry with its true DGP value.""" + p = template.copy() + free = p["value"].isna() + cat = p.index.get_level_values("category") + name1 = p.index.get_level_values("name1") + name2 = p.index.get_level_values("name2") + aug_period = p.index.get_level_values("aug_period") + + p.loc[free & (cat == "initial_states"), "value"] = 0.0 + p.loc[free & (cat == "mixture_weights"), "value"] = 1.0 + p.loc[free & (cat == "loadings"), "value"] = 1.0 + p.loc[free & (cat == "meas_sds"), "value"] = TRUE_MEAS_SD + p.loc[free & (cat == "shock_sds"), "value"] = TRUE_SHOCK_SD + p.loc[free & (cat == "controls"), "value"] = 0.0 + + # initial cholcovs: identity (diagonal 1, off-diagonal 0). + diag = np.array([str(n).split("-")[0] == str(n).split("-")[-1] for n in name2]) + p.loc[free & (cat == "initial_cholcovs") & diag, "value"] = 1.0 + p.loc[free & (cat == "initial_cholcovs") & ~diag, "value"] = 0.0 + + # transition: self-persistence 0.7, constant 0, other cross terms 0.1. + is_trans = free & (cat == "transition") + p.loc[is_trans, "value"] = 0.1 + p.loc[is_trans & (name2 == name1), "value"] = 0.7 + p.loc[is_trans & (name2 == "constant"), "value"] = 0.0 + + # first-stage investment equation. + for predictor, value in TRUE_FIRST_STAGE.items(): + p.loc[free & (cat == "investment_eq") & (name2 == predictor), "value"] = value + + # period-specific kappa on the free odd aug_periods. + for ap, value in TRUE_KAPPA.items(): + p.loc[free & (cat == "kappa") & (aug_period == ap), "value"] = value + + assert not p["value"].isna().any(), "some params left unset" + return p + + +@pytest.mark.end_to_end +@pytest.mark.long_running +def test_control_function_recovers_period_specific_kappa() -> None: + + model = _build_model() + pm = process_model(model) + all_factors = pm.labels.all_factors + + cf = pm.endogenous_factors_info.control_function + assert cf is not None + assert cf.investment_factor == "inv" + assert cf.targets == ("fac1", "fac2") + + # --- known params on the template --- + rng = np.random.default_rng(SEED) + z1_panel = _z1_panel(rng) + template = get_maximization_inputs( + model, + z1_panel, + chs_options=CHSEstimationOptions(start_params_strategy="none"), + )["params_template"] + true_params = _fill_true_params(template, all_factors) + + # carry-forward kappa zeroing must have pinned the even aug_periods to 0. + kappa_even = true_params.xs("kappa", level="category").reset_index() + pinned = kappa_even[kappa_even["aug_period"].isin([0, 2])] + assert (pinned["value"] == 0.0).all() + + # --- simulate measurements from the known params --- + pidx = get_params_index( + update_info=pm.update_info, + labels=pm.labels, + dimensions=pm.dimensions, + transition_info=pm.transition_info, + endogenous_factors_info=pm.endogenous_factors_info, + ) + parsing = create_parsing_info( + params_index=pidx, + update_info=pm.update_info, + labels=pm.labels, + anchoring=pm.anchoring, + has_endogenous_factors=True, + ) + pds = process_data( + df=z1_panel, + has_endogenous_factors=True, + labels=pm.labels, + update_info=pm.update_info, + anchoring_info=pm.anchoring, + purpose="simulation", + ) + states, covs, log_weights, parsed = parse_params( + jnp.array(true_params.reindex(pidx)["value"].to_numpy()), + parsing, + pm.dimensions, + pm.labels, + n_obs=N_OBS, + ) + obs_meas, _ = _simulate_dataset( + latent_states=states, + covs=covs, + log_weights=log_weights, + parsed_params=parsed, + labels=pm.labels, + dimensions=pm.dimensions, + n_obs=N_OBS, + has_endogenous_factors=True, + update_info=pm.update_info, + control_data=pds["controls"], + observed_factors=pds["observed_factors"], + policies=None, + transition_info=pm.transition_info, + rng=np.random.default_rng(SEED + 1), + ) + + # --- assemble estimable panel --- + obs_meas = obs_meas.copy() + obs_meas["period"] = obs_meas["aug_period"].map(pm.labels.aug_periods_to_periods) + meas_cols = [c for c in _MEAS_COLS if c in obs_meas.columns] + collapsed = obs_meas.groupby(["id", "period"])[meas_cols].first().reset_index() + z1_long = z1_panel.reset_index()[["caseid", "period", "z1"]].rename( + columns={"caseid": "id"} + ) + est_data = collapsed.merge(z1_long, on=["id", "period"]).set_index(["id", "period"]) + + # --- estimate --- + mi = get_maximization_inputs( + model, + est_data, + chs_options=CHSEstimationOptions(start_params_strategy="none"), + ) + start = mi["params_template"].copy() + free = start["value"].isna() + start.loc[~free, "value"] = true_params.loc[~free, "value"] + noise = np.random.default_rng(SEED + 2).normal(scale=0.05, size=int(free.sum())) + start.loc[free, "value"] = true_params.loc[free, "value"].to_numpy() + noise + + res = om.minimize( + fun=lambda q: -mi["loglike"](q), + params=start[["value"]], + algorithm="scipy_lbfgsb", + bounds=om.Bounds(lower=start["lower_bound"], upper=start["upper_bound"]), + constraints=mi["constraints"], + fun_and_jac=lambda q: tuple( + -np.asarray(v) for v in mi["loglike_and_gradient"](q) + ), + ) + assert res.success + est = res.params["value"] + + # --- assert recovery --- + for ap, true_kappa in TRUE_KAPPA.items(): + for target in ("fac1", "fac2"): + got = est.loc[("kappa", ap, target, "cf")] + assert got == pytest.approx(true_kappa, abs=0.1) + # even aug_periods stay pinned at 0. + for ap in (0, 2): + for target in ("fac1", "fac2"): + assert est.loc[("kappa", ap, target, "cf")] == pytest.approx(0.0, abs=1e-8) + # first-stage betas. + for ap in (0, 1, 2, 3): + for predictor, value in TRUE_FIRST_STAGE.items(): + got = est.loc[("investment_eq", ap, "inv", predictor)] + assert got == pytest.approx(value, abs=0.1) diff --git a/tests/test_check_model.py b/tests/test_check_model.py index 7f1a36bf..dcecb087 100644 --- a/tests/test_check_model.py +++ b/tests/test_check_model.py @@ -2,14 +2,34 @@ from types import SimpleNamespace -from skillmodels.check_model import ( +import pytest + +from skillmodels.common.check_model import ( _check_anchoring, _check_loadings_are_not_normalized_to_zero, - _check_measurements, _check_normalized_variables_are_present, check_stagemap, ) -from skillmodels.model_spec import FactorSpec, ModelSpec, Normalizations +from skillmodels.common.model_spec import FactorSpec, ModelSpec, Normalizations +from skillmodels.common.process_model import process_model +from skillmodels.test_data.simplest_augmented_model import SIMPLEST_AUGMENTED_MODEL + + +def test_check_model_rejects_two_endogenous_factors_sharing_measurement() -> None: + # A second endogenous factor reusing fac2's "inv" measurement — the kind of + # duplicate-measurement collision the old guard silently missed. + base = SIMPLEST_AUGMENTED_MODEL + inv_b = FactorSpec( + measurements=(("inv",), ("inv",)), + normalizations=Normalizations( + loadings=({"inv": 1}, {"inv": 1}), intercepts=({}, {}) + ), + is_endogenous=True, + transition_function="linear", + ) + model = base._replace(factors=dict(base.factors) | {"fac2b": inv_b}) + with pytest.raises(ValueError, match="overlap"): + process_model(model) def test_invalid_stagemap_length() -> None: @@ -30,7 +50,7 @@ def test_invalid_anchoring_non_bool() -> None: free_constant=False, free_loadings=False, ) - result = _check_anchoring(anchoring) # ty: ignore[invalid-argument-type] + result = _check_anchoring(anchoring) assert any("bool" in msg for msg in result) @@ -42,7 +62,7 @@ def test_invalid_anchoring_non_mapping_outcomes() -> None: free_constant=False, free_loadings=False, ) - result = _check_anchoring(anchoring) # ty: ignore[invalid-argument-type] + result = _check_anchoring(anchoring) assert any("Mapping" in msg for msg in result) @@ -54,7 +74,7 @@ def test_invalid_anchoring_outcome_type() -> None: free_constant=False, free_loadings=False, ) - result = _check_anchoring(anchoring) # ty: ignore[invalid-argument-type] + result = _check_anchoring(anchoring) assert any("variable" in msg.lower() for msg in result) @@ -66,34 +86,31 @@ def test_invalid_anchoring_free_controls_type() -> None: free_constant=False, free_loadings=False, ) - result = _check_anchoring(anchoring) # ty: ignore[invalid-argument-type] + result = _check_anchoring(anchoring) assert any("free_controls" in msg for msg in result) def test_invalid_measurements_not_tuples() -> None: - spec = ModelSpec( - factors={ - "f1": FactorSpec( - measurements=(["y1", "y2"],), # ty: ignore[invalid-argument-type] - ), - }, - ) - result = _check_measurements(model_spec=spec, factors=("f1",)) - assert any("tuples" in msg for msg in result) + """Bad measurements shape is caught at the FactorSpec beartype perimeter. + + Pre-beartype, the spec built and the model-check aggregator + surfaced a soft error message. Now the construction itself + raises `ModelSpecInitializationError`. The soft-check arm of + `_check_measurements` is dead code (kept only for non-type + issues that beartype can't see). + """ + from skillmodels.exceptions import ModelSpecInitializationError # noqa: PLC0415 + + with pytest.raises(ModelSpecInitializationError, match="measurements"): + FactorSpec(measurements=(["y1", "y2"],)) # ty: ignore[invalid-argument-type] def test_invalid_measurement_type() -> None: - spec = ModelSpec( - factors={ - "f1": FactorSpec( - measurements=((["nested_list"],),), # ty: ignore[invalid-argument-type] - ), - }, - ) - result = _check_measurements(model_spec=spec, factors=("f1",)) - assert any( - "column names" in msg.lower() or "tuples" in msg.lower() for msg in result - ) + """Bad measurement element type fails at `FactorSpec.__init__` (beartype).""" + from skillmodels.exceptions import ModelSpecInitializationError # noqa: PLC0415 + + with pytest.raises(ModelSpecInitializationError, match="measurements"): + FactorSpec(measurements=((["nested_list"],),)) # ty: ignore[invalid-argument-type] def test_normalized_variable_not_in_measurements() -> None: @@ -124,7 +141,7 @@ def test_invalid_anchoring_free_constant_type() -> None: free_constant="yes", free_loadings=False, ) - result = _check_anchoring(anchoring) # ty: ignore[invalid-argument-type] + result = _check_anchoring(anchoring) assert any("free_constant" in msg for msg in result) @@ -136,7 +153,7 @@ def test_invalid_anchoring_free_loadings_type() -> None: free_constant=False, free_loadings="yes", ) - result = _check_anchoring(anchoring) # ty: ignore[invalid-argument-type] + result = _check_anchoring(anchoring) assert any("free_loadings" in msg for msg in result) diff --git a/tests/test_chs_estimate.py b/tests/test_chs_estimate.py new file mode 100644 index 00000000..4061eaf3 --- /dev/null +++ b/tests/test_chs_estimate.py @@ -0,0 +1,274 @@ +"""End-to-end smoke test for `skillmodels.chs.estimate.estimate_chs`.""" + +import functools +from pathlib import Path + +import numpy as np +import optimagic as om +import pandas as pd +import pytest + +from skillmodels.chs.estimate import estimate_chs +from skillmodels.chs.options import CHSEstimationOptions +from skillmodels.chs.types import CHSEstimationResult +from skillmodels.common.config import TEST_DATA_DIR +from skillmodels.common.fixed_constraint import FixedConstraintWithValue +from skillmodels.common.selector import select_by_loc +from skillmodels.test_data.model2 import MODEL2 + +REGRESSION_VAULT = Path(__file__).parent / "regression_vault" + + +@pytest.fixture +def model2_data(): + data = pd.read_stata(TEST_DATA_DIR / "model2_simulated_data.dta") + return data.set_index(["caseid", "period"]) + + +@pytest.fixture +def anchoring_start_params(): + start_params = pd.read_csv(REGRESSION_VAULT / "one_stage_anchoring.csv") + return start_params.set_index(["category", "period", "name1", "name2"]) + + +def test_estimate_chs_rejects_unidentified_model_by_default(model2_data): + """The identification gate fires before estimation on an unanchored model. + + MODEL2 normalizes its period-0 loadings but leaves the measurement + intercepts free and runs a single mixture component, so its initial latent + mean is a free parameter with no location anchor — a common shift of the + latent mean against the intercepts leaves the likelihood unchanged. With the + default `require_initial_anchors=True`, `estimate_chs` refuses to run it. + """ + with pytest.raises(ValueError, match="not anchored"): + estimate_chs( + MODEL2, + model2_data, + CHSEstimationOptions(start_params_strategy="none"), + ) + + +def test_estimate_chs_returns_conforming_result(model2_data, anchoring_start_params): + """Converge from the known optimum to a conforming `CHSEstimationResult`. + + Starting at the regression-vault optimum keeps the run cheap: the + optimiser terminates almost immediately. `start_params_strategy="none"` + skips the (slow) AMN/Spearman seeding since full start values are + supplied. MODEL2 follows the CHS convention of a free initial latent mean + (seeded to 0) rather than an intercept normalization, so it is + intentionally location-under-identified and the identification gate is + disabled via `require_initial_anchors=False`. + """ + result = estimate_chs( + MODEL2, + model2_data, + CHSEstimationOptions(start_params_strategy="none"), + start_params=anchoring_start_params, + require_initial_anchors=False, + ) + + assert isinstance(result, CHSEstimationResult) + assert result.success + assert np.isfinite(result.loglikelihood) + assert result.md_criterion is None + assert result.model_spec is MODEL2 + assert "value" in result.params.columns + + +def test_estimate_chs_provides_ml_inference(model2_data, anchoring_start_params): + """`estimate_chs` drives `estimate_ml`, so the result carries inference. + + The result exposes the estimagic `LikelihoodResult`, from which standard + errors (and covariances, summaries) are available — the reason apps that + need inference can adopt `estimate_chs` instead of hand-rolling + `estimate_ml` on top of `get_maximization_inputs`. + + MODEL2 is intentionally location-under-identified (free initial mean, + CHS convention), so the identification gate is disabled here. + """ + result = estimate_chs( + MODEL2, + model2_data, + CHSEstimationOptions(start_params_strategy="none"), + start_params=anchoring_start_params, + require_initial_anchors=False, + ) + + assert result.likelihood_result is not None + standard_errors = result.likelihood_result.se() + assert standard_errors is not None + + +def test_estimate_chs_enforces_user_fixed_constraint_value( + model2_data, anchoring_start_params +): + """A user `FixedConstraintWithValue` fixes the param at its requested value. + + `om.FixedConstraint` pins a parameter at its *start* value, so the wrapper's + `.value` only takes effect if `estimate_chs` writes it into the start vector. + User `constraints=` are merged after `get_maximization_inputs` (which only + enforces the internal fixed constraints), so without an explicit enforce the + parameter was silently fixed at the seeded start value, not the requested + value. Regression for audit finding F9. + + MODEL2 is intentionally location-under-identified (free initial mean, + CHS convention), so the identification gate is disabled here. + """ + loc = ("controls", 0, "y1", "x1") + start_value = float(anchoring_start_params.loc[loc, "value"]) + target = start_value - 2.0 # clearly different from the seeded start value + + result = estimate_chs( + MODEL2, + model2_data, + CHSEstimationOptions(start_params_strategy="none"), + start_params=anchoring_start_params, + constraints=[FixedConstraintWithValue(loc=loc, value=target)], + require_initial_anchors=False, + ) + + assert result.params.loc[loc, "value"] == pytest.approx(target) + + +def test_estimate_chs_forwards_error_handling( + model2_data, anchoring_start_params, monkeypatch +): + """`error_handling` reaches optimagic so failed evaluations can be penalised.""" + captured = {} + + def fake_estimate_ml(**kwargs): + captured.update(kwargs["optimize_options"]) + raise StopIteration + + monkeypatch.setattr("skillmodels.chs.estimate.estimate_ml", fake_estimate_ml) + with pytest.raises(StopIteration): + estimate_chs( + MODEL2, + model2_data, + CHSEstimationOptions( + start_params_strategy="none", error_handling="continue" + ), + start_params=anchoring_start_params, + require_initial_anchors=False, + ) + assert captured["error_handling"] == "continue" + + +def test_estimate_chs_applies_lower_bounds_and_clips_start( + model2_data, anchoring_start_params, monkeypatch +): + """`lower_bounds` tightens the template bounds; the start moves onto them.""" + captured = {} + + def fake_estimate_ml(**kwargs): + captured.update(kwargs) + raise StopIteration + + loc = anchoring_start_params.query("category == 'meas_sds'").index[:1] + start = anchoring_start_params.copy() + start.loc[loc, "value"] = 0.05 + lower_bounds = pd.Series(0.1, index=loc) + + monkeypatch.setattr("skillmodels.chs.estimate.estimate_ml", fake_estimate_ml) + with pytest.raises(StopIteration): + estimate_chs( + MODEL2, + model2_data, + CHSEstimationOptions(start_params_strategy="none"), + start_params=start, + lower_bounds=lower_bounds, + require_initial_anchors=False, + ) + assert captured["bounds"].lower.loc[loc].tolist() == [0.1] + assert captured["params"].loc[loc, "value"].tolist() == [0.1] + other = captured["bounds"].lower.drop(loc) + assert other[np.isfinite(other)].max() < 0.1 + + +def test_estimate_chs_lower_bounds_can_remove_a_bound( + model2_data, anchoring_start_params, monkeypatch +): + """A `-inf` entry in `lower_bounds` replaces the template's bound.""" + captured = {} + + def fake_estimate_ml(**kwargs): + captured.update(kwargs) + raise StopIteration + + loc = anchoring_start_params.query("category == 'meas_sds'").index[:1] + monkeypatch.setattr("skillmodels.chs.estimate.estimate_ml", fake_estimate_ml) + with pytest.raises(StopIteration): + estimate_chs( + MODEL2, + model2_data, + CHSEstimationOptions(start_params_strategy="none"), + start_params=anchoring_start_params, + lower_bounds=pd.Series(-np.inf, index=loc), + require_initial_anchors=False, + ) + assert captured["bounds"].lower.loc[loc].tolist() == [-np.inf] + + +def test_estimate_chs_applies_upper_bounds_and_clips_start( + model2_data, anchoring_start_params, monkeypatch +): + """`upper_bounds` replaces the template bounds; the start moves onto them.""" + captured = {} + + def fake_estimate_ml(**kwargs): + captured.update(kwargs) + raise StopIteration + + loc = pd.MultiIndex.from_tuples( + [("controls", 0, "y1", "x1")], names=anchoring_start_params.index.names + ) + start = anchoring_start_params.copy() + start.loc[loc, "value"] = 0.5 + monkeypatch.setattr("skillmodels.chs.estimate.estimate_ml", fake_estimate_ml) + with pytest.raises(StopIteration): + estimate_chs( + MODEL2, + model2_data, + CHSEstimationOptions(start_params_strategy="none"), + start_params=start, + upper_bounds=pd.Series(0.0, index=loc), + require_initial_anchors=False, + ) + assert captured["bounds"].upper.loc[loc].tolist() == [0.0] + assert captured["params"].loc[loc, "value"].tolist() == [0.0] + + +def test_estimate_chs_moves_start_onto_linear_equalities( + model2_data, anchoring_start_params, monkeypatch +): + """Start values satisfy user `LinearConstraint` equalities (a linear trend).""" + captured = {} + + def fake_estimate_ml(**kwargs): + captured.update(kwargs) + raise StopIteration + + sds = anchoring_start_params.query("category == 'meas_sds' & name1 == 'y1'").index + start = anchoring_start_params.copy() + start.loc[sds, "value"] = np.linspace(0.5, 1.5, len(sds)) ** 2 + constraints: list[om.constraints.Constraint] = [ + om.LinearConstraint( + selector=functools.partial(select_by_loc, loc=list(sds[t : t + 3])), + weights=np.array([1.0, -2.0, 1.0]), + value=0.0, + ) + for t in range(len(sds) - 2) + ] + monkeypatch.setattr("skillmodels.chs.estimate.estimate_ml", fake_estimate_ml) + with pytest.raises(StopIteration): + estimate_chs( + MODEL2, + model2_data, + CHSEstimationOptions(start_params_strategy="none"), + start_params=start, + constraints=constraints, + lower_bounds=pd.Series(-np.inf, index=sds), + require_initial_anchors=False, + ) + values = captured["params"].loc[sds, "value"].to_numpy() + np.testing.assert_allclose(np.diff(values, n=2), 0.0, atol=1e-12) diff --git a/tests/test_chs_limited_measurement_rejection.py b/tests/test_chs_limited_measurement_rejection.py new file mode 100644 index 00000000..37ca86de --- /dev/null +++ b/tests/test_chs_limited_measurement_rejection.py @@ -0,0 +1,71 @@ +"""CHS must reject non-Gaussian measurements rather than treat them as continuous. + +The CHS likelihood runs a Gaussian Kalman update for every measurement, so a probit +or Tobit measure would be silently estimated as a continuous Gaussian one. +""" + +import numpy as np +import pandas as pd +import pytest + +from skillmodels.chs.maximization_inputs import get_maximization_inputs +from skillmodels.chs.options import CHSEstimationOptions +from skillmodels.common.measurement_models import ( + ProbitMeasurement, + TobitMeasurement, +) +from skillmodels.common.model_spec import ( + FactorSpec, + ModelSpec, + Normalizations, +) + + +def _model(measurement_models) -> ModelSpec: + return ModelSpec( + factors={ + "skills": FactorSpec( + measurements=(("y1", "y2", "y3"),) * 2, + normalizations=Normalizations( + loadings=({"y1": 1},) * 2, + intercepts=({"y1": 0},) * 2, + ), + transition_function="linear", + ), + }, + measurement_models=measurement_models, + ) + + +def _tiny_data() -> pd.DataFrame: + rng = np.random.default_rng(0) + rows = [ + { + "caseid": caseid, + "period": period, + **dict(zip(("y1", "y2", "y3"), rng.normal(size=3), strict=True)), + } + for caseid in range(20) + for period in (0, 1) + ] + return pd.DataFrame(rows).set_index(["caseid", "period"]) + + +@pytest.mark.parametrize("strategy", ["amn", "none"]) +@pytest.mark.parametrize( + "models", + [ + {"y2": ProbitMeasurement()}, + {"y3": TobitMeasurement(lower=0.0)}, + ], +) +def test_get_maximization_inputs_rejects_non_gaussian_measurements( + models, strategy +) -> None: + """Rejected whatever the start-value strategy, not only via AMN seeding.""" + with pytest.raises(NotImplementedError, match="CHS supports only Gaussian"): + get_maximization_inputs( + model_spec=_model(models), + data=_tiny_data(), + chs_options=CHSEstimationOptions(start_params_strategy=strategy), + ) diff --git a/tests/test_clipping.py b/tests/test_clipping.py index 1afd17e3..ae50d788 100644 --- a/tests/test_clipping.py +++ b/tests/test_clipping.py @@ -3,7 +3,7 @@ import jax.numpy as jnp import numpy as np -from skillmodels.clipping import soft_clipping +from skillmodels.chs.clipping import soft_clipping def test_one_sided_soft_maximum() -> None: diff --git a/tests/test_constraints.py b/tests/test_constraints.py index fede7622..1076ca4a 100644 --- a/tests/test_constraints.py +++ b/tests/test_constraints.py @@ -1,5 +1,6 @@ """Tests for constraints.""" +import functools from types import MappingProxyType from typing import Any @@ -9,7 +10,7 @@ import pytest from pandas.testing import assert_frame_equal -from skillmodels.constraints import ( +from skillmodels.common.constraints import ( FixedConstraintWithValue, _get_anchoring_constraints, _get_constant_factors_constraints, @@ -21,10 +22,331 @@ _get_transition_constraints, add_bounds, get_constraints, + project_start_to_linear_equalities, + reconcile_start_to_equality, +) +from skillmodels.common.process_model import process_model +from skillmodels.common.selector import select_by_loc +from skillmodels.common.types import ( + Anchoring, + EndogenousFactorsInfo, + Labels, + MeasurementType, + Normalizations, ) -from skillmodels.process_model import process_model from skillmodels.test_data.simplest_augmented_model import SIMPLEST_AUGMENTED_MODEL -from skillmodels.types import Anchoring, Labels, Normalizations + + +def test_reconcile_start_to_equality_pools_pairwise_groups(): + """Pairwise-equality groups (e.g. time-invariant controls) are pooled too. + + hc ties a measurement's control / loading / sd across periods via + `om.PairwiseEqualityConstraint`. A per-period seed (AMN/Spearman) fills each + member independently and breaks it, so the reconciler must average each + element-wise group, not only plain `om.EqualityConstraint`s. Regression for + the `InvalidParamsError` that AMN-seeded time-invariant controls triggered. + """ + names = ["category", "period", "name1", "name2"] + index = pd.MultiIndex.from_tuples( + [("controls", p, "m1", "constant") for p in (0, 1, 2)], names=names + ) + params = pd.DataFrame({"value": [1.0, 2.0, 3.0]}, index=index) + locs = [ + pd.MultiIndex.from_tuples([("controls", p, "m1", "constant")], names=names) + for p in (0, 1, 2) + ] + constraint = om.PairwiseEqualityConstraint( + selectors=[functools.partial(select_by_loc, loc=loc) for loc in locs] + ) + + out = reconcile_start_to_equality(params, [constraint]) + + np.testing.assert_allclose(out["value"].to_numpy(), [2.0, 2.0, 2.0]) + + +def test_reconcile_start_to_equality_propagates_fixed_member_value(): + """A fixed member's value propagates to its equality group, not the mean. + + When a pairwise-equality group contains a `FixedConstraintWithValue` member, + the shared start value must be that fixed value, so that enforcing the fix and + then reconciling do not fight each other; averaging would move the fixed + coordinate off its target. Regression for audit finding F10. + """ + names = ["category", "period", "name1", "name2"] + index = pd.MultiIndex.from_tuples( + [("loadings", p, "m1", "fac1") for p in (0, 1, 2)], names=names + ) + params = pd.DataFrame({"value": [1.0, 2.0, 9.0]}, index=index) + locs = [ + pd.MultiIndex.from_tuples([("loadings", p, "m1", "fac1")], names=names) + for p in (0, 1, 2) + ] + pairwise = om.PairwiseEqualityConstraint( + selectors=[functools.partial(select_by_loc, loc=loc) for loc in locs] + ) + fixed = FixedConstraintWithValue(loc=("loadings", 2, "m1", "fac1"), value=9.0) + + out = reconcile_start_to_equality(params, [pairwise, fixed]) + + np.testing.assert_allclose(out["value"].to_numpy(), [9.0, 9.0, 9.0]) + + +def test_reconcile_start_to_equality_raises_on_conflicting_fixed_members(): + """Two fixed members in one equality group with different values is infeasible.""" + names = ["category", "period", "name1", "name2"] + index = pd.MultiIndex.from_tuples( + [("loadings", p, "m1", "fac1") for p in (0, 1)], names=names + ) + params = pd.DataFrame({"value": [1.0, 2.0]}, index=index) + locs = [ + pd.MultiIndex.from_tuples([("loadings", p, "m1", "fac1")], names=names) + for p in (0, 1) + ] + pairwise = om.PairwiseEqualityConstraint( + selectors=[functools.partial(select_by_loc, loc=loc) for loc in locs] + ) + fixed = [ + FixedConstraintWithValue(loc=("loadings", 0, "m1", "fac1"), value=3.0), + FixedConstraintWithValue(loc=("loadings", 1, "m1", "fac1"), value=4.0), + ] + + with pytest.raises(ValueError, match="Conflicting"): + reconcile_start_to_equality(params, [pairwise, *fixed]) + + +def _corr_model_processed(): + """Process a correction model: an endogenous investment + an instrument.""" + from dataclasses import replace # noqa: PLC0415 + + from skillmodels.common.model_spec import CorrectionSpec # noqa: PLC0415 + from skillmodels.test_data.model2 import MODEL2 # noqa: PLC0415 + + fac3 = MODEL2.factors["fac3"] + corr = CorrectionSpec(instruments=("inv_z",)) + new_factors = dict(MODEL2.factors) | { + "fac3": replace(fac3, is_endogenous=True, correction=corr) + } + model = MODEL2._replace(factors=new_factors)._replace(stagemap=None) + model = model._replace(observed_factors=("inv_z",)) + return process_model(model) + + +def test_get_constraints_pins_kappa_to_zero_on_carry_forward_periods() -> None: + processed = _corr_model_processed() + constraints = get_constraints( + update_info=processed.update_info, + labels=processed.labels, + dimensions=processed.dimensions, + anchoring_info=processed.anchoring, + normalizations=processed.normalizations, + endogenous_factors_info=processed.endogenous_factors_info, + bounds_distance=1e-8, + ) + kappa_fixed = [ + c + for c in constraints + if isinstance(c, FixedConstraintWithValue) + and isinstance(c.loc, tuple) + and c.loc[0] == "kappa" + ] + assert kappa_fixed, "kappa must be pinned to 0 on carry-forward periods" + # All such constraints pin kappa to exactly 0. + assert all(c.value == 0.0 for c in kappa_fixed) + # They fall only on the state factors' carry-forward (STATES) aug periods, + # never on the production (ENDOGENOUS) aug periods where kappa is free. + meas_types = processed.endogenous_factors_info.aug_periods_to_aug_period_meas_types + for c in kappa_fixed: + assert isinstance(c.loc, tuple) + _category, aug_period, target, _term = c.loc + assert target in ("fac1", "fac2") + assert meas_types[aug_period] == MeasurementType.STATES + + +def test_constant_factor_shock_constraints_only_target_existing_rows() -> None: + # A constant-transition state factor combined with an endogenous factor must + # not emit shock-fix constraints at aug periods where the factor does not + # transition. With endogenous factors the transition index stops at + # aug_periods[:-2], so a naive aug_periods[:-1] loop emits one orphan + # ("shock_sds", last_aug, factor, "-") loc that trips the optimagic selector. + from dataclasses import replace # noqa: PLC0415 + + from skillmodels.common.model_spec import CorrectionSpec # noqa: PLC0415 + from skillmodels.common.params_index import get_params_index # noqa: PLC0415 + from skillmodels.test_data.model2 import MODEL2 # noqa: PLC0415 + + fac1 = MODEL2.factors["fac1"] + fac3 = MODEL2.factors["fac3"] + new_factors = dict(MODEL2.factors) | { + "fac1": replace(fac1, transition_function="constant"), + "fac3": replace( + fac3, is_endogenous=True, correction=CorrectionSpec(instruments=("inv_z",)) + ), + } + model = ( + MODEL2._replace(factors=new_factors) + ._replace(stagemap=None) + ._replace(observed_factors=("inv_z",)) + ) + processed = process_model(model) + index = get_params_index( + update_info=processed.update_info, + labels=processed.labels, + dimensions=processed.dimensions, + transition_info=processed.transition_info, + endogenous_factors_info=processed.endogenous_factors_info, + ) + constraints = get_constraints( + update_info=processed.update_info, + labels=processed.labels, + dimensions=processed.dimensions, + anchoring_info=processed.anchoring, + normalizations=processed.normalizations, + endogenous_factors_info=processed.endogenous_factors_info, + bounds_distance=1e-8, + ) + shock_fixes = [ + c + for c in constraints + if isinstance(c, FixedConstraintWithValue) + and isinstance(c.loc, tuple) + and c.loc[0] == "shock_sds" + ] + assert shock_fixes, "the constant factor must have its shocks pinned to 0" + for c in shock_fixes: + assert c.loc in index, f"orphan shock constraint {c.loc} not in params index" + + +def test_transition_simplex_constraints_only_target_existing_rows() -> None: + # A log_ces (CES) production factor combined with an endogenous factor must not + # emit a simplex (probability) constraint at the terminal augmented period where + # the factor does not transition. With endogenous factors the transition index + # stops at aug_periods[:-2], so a naive aug_periods[:-1] loop in + # _get_transition_constraints emits an orphan ProbabilityConstraint whose loc is + # absent from the params index, tripping the optimagic selector at maximize time. + from dataclasses import replace # noqa: PLC0415 + + from skillmodels.common.model_spec import CorrectionSpec # noqa: PLC0415 + from skillmodels.common.params_index import get_params_index # noqa: PLC0415 + from skillmodels.test_data.model2 import MODEL2 # noqa: PLC0415 + + fac3 = MODEL2.factors["fac3"] + new_factors = dict(MODEL2.factors) | { + "fac3": replace( + fac3, is_endogenous=True, correction=CorrectionSpec(instruments=("inv_z",)) + ), + } + model = ( + MODEL2._replace(factors=new_factors) + ._replace(stagemap=None) + ._replace(observed_factors=("inv_z",)) + ) + processed = process_model(model) + index = get_params_index( + update_info=processed.update_info, + labels=processed.labels, + dimensions=processed.dimensions, + transition_info=processed.transition_info, + endogenous_factors_info=processed.endogenous_factors_info, + ) + constraints = get_constraints( + update_info=processed.update_info, + labels=processed.labels, + dimensions=processed.dimensions, + anchoring_info=processed.anchoring, + normalizations=processed.normalizations, + endogenous_factors_info=processed.endogenous_factors_info, + bounds_distance=1e-8, + ) + simplex_locs = [] + for c in constraints: + if not isinstance(c, om.ProbabilityConstraint): + continue + selector = c.selector + if not isinstance(selector, functools.partial): + continue + simplex_locs += [ + tup + for tup in selector.keywords["loc"] + if isinstance(tup, tuple) and tup[0] == "transition" + ] + assert simplex_locs, "the log_ces factor must have its gammas on a simplex" + for loc in simplex_locs: + assert loc in index, ( + f"orphan transition simplex constraint {loc} not in params index" + ) + + +def test_get_constraints_pins_instrument_out_of_production() -> None: + # Built-in production transitions enumerate a free coefficient for every + # observed factor, including the excluded instrument; that coefficient must be + # pinned to 0 on the production (ENDOGENOUS) aug periods so the instrument + # cannot leak into production. + processed = _corr_model_processed() + constraints = get_constraints( + update_info=processed.update_info, + labels=processed.labels, + dimensions=processed.dimensions, + anchoring_info=processed.anchoring, + normalizations=processed.normalizations, + endogenous_factors_info=processed.endogenous_factors_info, + bounds_distance=1e-8, + ) + meas_types = processed.endogenous_factors_info.aug_periods_to_aug_period_meas_types + inst_pins = [ + c + for c in constraints + if isinstance(c, FixedConstraintWithValue) + and isinstance(c.loc, tuple) + and c.loc[0] == "transition" + and "inv_z" in c.loc[3] + and meas_types[c.loc[1]] == MeasurementType.ENDOGENOUS_FACTORS + ] + assert inst_pins, "instrument coeffs must be pinned to 0 on production periods" + assert all(c.value == 0.0 for c in inst_pins) + for c in inst_pins: + assert isinstance(c.loc, tuple) + _category, _aug_period, target, _name2 = c.loc + assert target in ("fac1", "fac2") + + +def test_get_constraints_skips_custom_target_transition() -> None: + # A custom (registered) production transition on a correction target has no + # built-in `params_` enumerator; the instrument-exclusion guard must + # skip it (custom-production leakage is validated separately by + # `check_model`) rather than raise AttributeError. + from dataclasses import replace # noqa: PLC0415 + + from skillmodels.common.decorators import register_params # noqa: PLC0415 + from skillmodels.common.model_spec import CorrectionSpec # noqa: PLC0415 + from skillmodels.test_data.model2 import MODEL2 # noqa: PLC0415 + + @register_params(params=["constant", "fac1", "fac2"]) + def custom_prod(fac1, fac2, params): + return params["constant"] + params["fac1"] * fac1 + params["fac2"] * fac2 + + corr = CorrectionSpec(instruments=("inv_z",)) + new_factors = dict(MODEL2.factors) | { + "fac1": replace(MODEL2.factors["fac1"], transition_function=custom_prod), + "fac3": replace(MODEL2.factors["fac3"], is_endogenous=True, correction=corr), + } + model = ( + MODEL2._replace(factors=new_factors) + ._replace(stagemap=None) + ._replace(observed_factors=("inv_z",)) + ) + processed = process_model(model) + + # Must not raise `AttributeError: ... has no attribute 'params_custom_prod'`. + constraints = get_constraints( + update_info=processed.update_info, + labels=processed.labels, + dimensions=processed.dimensions, + anchoring_info=processed.anchoring, + normalizations=processed.normalizations, + endogenous_factors_info=processed.endogenous_factors_info, + bounds_distance=1e-8, + ) + assert constraints def _to_dict(c: om.constraints.Constraint) -> dict[str, Any]: @@ -189,7 +511,13 @@ def test_constant_factor_constraints() -> None: {"loc": ("shock_sds", 1, "fac2", "-"), "type": "fixed", "value": 0.0}, ] - calculated = _get_constant_factors_constraints(labels) + no_endog = EndogenousFactorsInfo( + has_endogenous_factors=False, + aug_periods_to_aug_period_meas_types=MappingProxyType({}), + aug_periods_from_period=lambda p: [p], + factor_info=MappingProxyType({}), + ) + calculated = _get_constant_factors_constraints(labels, no_endog) as_dicts = [_to_dict(c) for c in calculated] assert_list_equal_except_for_order(as_dicts, expected) @@ -244,7 +572,13 @@ def test_trans_coeff_constraints() -> None: "type": "probability", }, ] - calculated = _get_transition_constraints(labels) + no_endogenous = EndogenousFactorsInfo( + has_endogenous_factors=False, + aug_periods_to_aug_period_meas_types=MappingProxyType({}), + aug_periods_from_period=lambda period: [period], + factor_info=MappingProxyType({}), + ) + calculated = _get_transition_constraints(labels, no_endogenous) as_dicts = [_to_dict(c) for c in calculated] assert_list_equal_except_for_order(as_dicts, expected) @@ -402,6 +736,7 @@ def test_get_constraints_with_endogenous_factors( anchoring_info=simplest_augmented_model.anchoring, normalizations=simplest_augmented_model.normalizations, endogenous_factors_info=simplest_augmented_model.endogenous_factors_info, + bounds_distance=1e-8, ) # Should contain augmented-period constraints assert any( @@ -418,6 +753,7 @@ def test_get_constraints_returns_om_objects(simplest_augmented_model) -> None: anchoring_info=simplest_augmented_model.anchoring, normalizations=simplest_augmented_model.normalizations, endogenous_factors_info=simplest_augmented_model.endogenous_factors_info, + bounds_distance=1e-8, ) assert len(constraints) > 0 for c in constraints: @@ -428,26 +764,50 @@ def test_get_constraints_for_augmented_periods(simplest_augmented_model) -> None calculated = _get_constraints_for_augmented_periods( labels=simplest_augmented_model.labels, endogenous_factors_info=simplest_augmented_model.endogenous_factors_info, + bounds_distance=1e-8, ) as_dicts = [_to_dict(c) for c in calculated] + # Only the non-final aug-period of each meas-type should produce + # identity constraints: `get_transition_index_tuples` truncates + # transitions at `aug_periods[:-2]` when endogenous factors are + # present, so emitting fixed constraints at the last STATES- or + # ENDO-typed aug-period would target locs that don't exist in the + # params index. Aug 2 (last STATES-typed) and aug 3 (last + # ENDO-typed) are therefore intentionally absent from the expected + # list. expected = [ {"loc": ("transition", 0, "fac1", "fac1"), "type": "fixed", "value": 1.0}, {"loc": ("transition", 0, "fac1", "fac2"), "type": "fixed", "value": 0.0}, {"loc": ("transition", 0, "fac1", "of"), "type": "fixed", "value": 0.0}, {"loc": ("transition", 0, "fac1", "constant"), "type": "fixed", "value": 0.0}, {"loc": ("shock_sds", 0, "fac1", "-"), "type": "fixed", "value": 0.00000001}, - {"loc": ("transition", 2, "fac1", "fac1"), "type": "fixed", "value": 1.0}, - {"loc": ("transition", 2, "fac1", "fac2"), "type": "fixed", "value": 0.0}, - {"loc": ("transition", 2, "fac1", "of"), "type": "fixed", "value": 0.0}, - {"loc": ("transition", 2, "fac1", "constant"), "type": "fixed", "value": 0.0}, {"loc": ("transition", 1, "fac2", "fac1"), "type": "fixed", "value": 0.0}, {"loc": ("transition", 1, "fac2", "fac2"), "type": "fixed", "value": 1.0}, {"loc": ("transition", 1, "fac2", "of"), "type": "fixed", "value": 0.0}, {"loc": ("transition", 1, "fac2", "constant"), "type": "fixed", "value": 0.0}, {"loc": ("shock_sds", 1, "fac2", "-"), "type": "fixed", "value": 0.00000001}, - {"loc": ("transition", 3, "fac2", "fac1"), "type": "fixed", "value": 0.0}, - {"loc": ("transition", 3, "fac2", "fac2"), "type": "fixed", "value": 1.0}, - {"loc": ("transition", 3, "fac2", "of"), "type": "fixed", "value": 0.0}, - {"loc": ("transition", 3, "fac2", "constant"), "type": "fixed", "value": 0.0}, ] assert_list_equal_except_for_order(as_dicts, expected) + + +def test_project_start_to_linear_equalities_fits_a_line() -> None: + """Second-difference equalities make the start the least-squares line.""" + index = pd.MultiIndex.from_tuples( + [("meas_sds", t, "alive", "-") for t in range(5)] + [("loadings", 0, "y", "f")], + names=["category", "aug_period", "name1", "name2"], + ) + values = np.array([0.2, 0.25, 0.2, 0.35, 0.5, 7.0]) + params = pd.DataFrame({"value": values}, index=index) + sds = list(index[:5]) + constraints = [ + om.LinearConstraint( + selector=functools.partial(select_by_loc, loc=sds[t : t + 3]), + weights=np.array([1.0, -2.0, 1.0]), + value=0.0, + ) + for t in range(3) + ] + slope, intercept = np.polyfit(np.arange(5), values[:5], deg=1) + expected = np.append(intercept + slope * np.arange(5), 7.0) + projected = project_start_to_linear_equalities(params, constraints) + np.testing.assert_allclose(projected["value"].to_numpy(), expected, atol=1e-12) diff --git a/tests/test_control_function.py b/tests/test_control_function.py new file mode 100644 index 00000000..f7d9dbcd --- /dev/null +++ b/tests/test_control_function.py @@ -0,0 +1,210 @@ +"""Tests for the control-function (cf) DAG-node construction.""" + +from dataclasses import replace + +import jax.numpy as jnp +import numpy as np +import pytest +from numpy.testing import assert_allclose + +from skillmodels.common.control_function import ( + build_cf_node, + build_kappa_addition_node, + build_kappa_term_evaluators, + build_prediction_node, + compute_investment_residual_sds, + generate_kappa_terms, +) +from skillmodels.common.model_spec import CorrectionSpec +from skillmodels.common.params_index import get_params_index +from skillmodels.common.parse_params import create_parsing_info, parse_params +from skillmodels.common.process_model import process_model +from skillmodels.test_data.model2 import MODEL2 + + +def _corr_model_with_instrument(): + """MODEL2 with fac3 endogenous, an observed instrument, and a correction.""" + fac3 = MODEL2.factors["fac3"] + corr = CorrectionSpec(instruments=("inv_z",)) + new_fac3 = replace(fac3, is_endogenous=True, correction=corr) + new_factors = dict(MODEL2.factors) | {"fac3": new_fac3} + model = MODEL2._replace(factors=new_factors)._replace(stagemap=None) + model = model._replace(observed_factors=("inv_z",)) + return process_model(model) + + +def _period0_trans_coeffs(processed): + index = get_params_index( + update_info=processed.update_info, + labels=processed.labels, + dimensions=processed.dimensions, + transition_info=processed.transition_info, + endogenous_factors_info=processed.endogenous_factors_info, + ) + parsing_info = create_parsing_info( + params_index=index, + update_info=processed.update_info, + labels=processed.labels, + anchoring=processed.anchoring, + has_endogenous_factors=True, + ) + params_vec = jnp.arange(len(index)).astype(float) + _, _, _, parsed = parse_params( + params_vec, parsing_info, processed.dimensions, processed.labels, n_obs=5 + ) + return {key: value[0] for key, value in parsed.transition.items()} + + +def test_transition_adds_kappa_times_cf_to_target_output() -> None: + """The wired transition adds kappa*cf to a target factor's base output. + + Invariant test independent of the base production form: zeroing kappa + recovers the base, and the difference equals kappa * cf, where cf is formed + contemporaneously from the INPUT investment state and the first-stage + prediction of it. + """ + processed = _corr_model_with_instrument() + all_factors = processed.labels.all_factors # ('fac1','fac2','fac3','inv_z') + trans = _period0_trans_coeffs(processed) + + states = jnp.array([1.0, 2.0, 3.0, 4.0]) # one anchored sigma-point row + target = "fac2" + individual = processed.transition_info.individual_functions[target] + + out_full = individual(trans, states[None, :]) + trans_zero_kappa = { + **trans, + "__kappa_fac2__": jnp.zeros_like(trans["__kappa_fac2__"]), + } + out_base = individual(trans_zero_kappa, states[None, :]) + + # Reconstruct cf = ln_inv(fac3) - first-stage prediction. + betas = trans["__first_stage_fac3__"] # order: fac1, fac2, inv_z, constant + predictor_positions = [all_factors.index(f) for f in ("fac1", "fac2", "inv_z")] + x = jnp.concatenate([states[jnp.array(predictor_positions)], jnp.array([1.0])]) + prediction = jnp.dot(x, betas) + cf = states[all_factors.index("fac3")] - prediction + kappa = trans["__kappa_fac2__"][0] # single 'cf' coefficient + + assert_allclose(float(out_full[0] - out_base[0]), float(kappa * cf), rtol=1e-6) + # Sanity: kappa is non-zero here, so the correction actually moved the output. + assert abs(float(kappa * cf)) > 1e-6 + + +def test_prediction_node_is_contemporaneous_linear_combination() -> None: + # all_factors order: [health_mom, health_kid, ln_inv, z1]; predict ln_inv from + # the state factors (positions 0, 1) and the instrument z1 (position 3). + prediction = build_prediction_node( + beta_key="__first_stage_ln_inv__", predictor_positions=(0, 1, 3) + ) + states = jnp.array([2.0, 3.0, 99.0, 5.0]) # ln_inv value (99) must be ignored + params = {"__first_stage_ln_inv__": jnp.array([1.0, 0.5, 2.0, 0.1])} + # 1.0*2 + 0.5*3 + 2.0*5 + 0.1(constant) = 2 + 1.5 + 10 + 0.1 + assert_allclose(float(prediction(states, params)), 13.6) + + +def test_cf_node_is_investment_minus_prediction() -> None: + cf = build_cf_node(inv_pos=2) + states = jnp.array([2.0, 3.0, 7.0, 5.0]) + out = cf(states, jnp.array(4.0)) + assert_allclose(float(out), 3.0) # ln_inv 7 - pred 4 + + +def test_kappa_term_evaluators_cover_cf_square_and_interaction() -> None: + evals = build_kappa_term_evaluators( + kappa_terms=("cf", "cf ** 2", "cf * health_mom"), + factor_positions={"health_mom": 0, "health_kid": 1}, + ) + states = jnp.array([2.0, 3.0, 7.0]) + cf_val = jnp.array(4.0) + assert_allclose(float(evals[0](cf_val, states)), 4.0) + assert_allclose(float(evals[1](cf_val, states)), 16.0) + assert_allclose(float(evals[2](cf_val, states)), 8.0) # cf * health_mom = 4*2 + + +def test_kappa_term_evaluators_handle_higher_order_monomials() -> None: + evals = build_kappa_term_evaluators( + kappa_terms=("cf ** 2 * health_mom * health_kid", "cf * health_mom ** 2"), + factor_positions={"health_mom": 0, "health_kid": 1}, + ) + states = jnp.array([2.0, 3.0]) + cf_val = jnp.array(4.0) + # cf**2 * mom * kid = 16 * 2 * 3 = 96 + assert_allclose(float(evals[0](cf_val, states)), 96.0) + # cf * mom**2 = 4 * 4 = 16 + assert_allclose(float(evals[1](cf_val, states)), 16.0) + + +def test_kappa_term_evaluators_reject_term_without_cf() -> None: + with pytest.raises(ValueError, match="cf"): + build_kappa_term_evaluators( + kappa_terms=("health_mom",), factor_positions={"health_mom": 0} + ) + + +def test_generate_kappa_terms_reproduces_translog_set_at_degree_two() -> None: + terms = generate_kappa_terms(("health_mom", "health_kid"), max_degree=2) + assert set(terms) == { + "cf", + "cf * health_mom", + "cf * health_kid", + "cf ** 2", + } + + +def test_generate_kappa_terms_degree_one_is_just_cf() -> None: + assert generate_kappa_terms(("health_mom", "health_kid"), max_degree=1) == ("cf",) + + +def test_generate_kappa_terms_includes_higher_order_and_squares() -> None: + terms = set(generate_kappa_terms(("a", "b"), max_degree=4)) + # the user's example, plus a state square, must be present at degree 4 + assert "cf ** 2 * a * b" in terms + assert "cf * a ** 2" in terms + # every term has cf power >= 1 and total degree <= 4 + assert all(t.startswith("cf") for t in terms) + + +def test_kappa_addition_node_adds_kappa_times_cf_to_base_output() -> None: + # Kappa lives in its own key; the base node's output is passed in unchanged. + evals = build_kappa_term_evaluators( + kappa_terms=("cf", "cf ** 2"), factor_positions={} + ) + add_kappa = build_kappa_addition_node( + kappa_key="__kappa_health_mom__", kappa_evaluators=evals + ) + states = jnp.array([2.0, 3.0]) + params = {"__kappa_health_mom__": jnp.array([0.2, 0.3])} + base_value = jnp.array(5.5) + cf_val = jnp.array(4.0) + # base unchanged + kappa = 5.5 + 0.2*4 + 0.3*16 + expected = 5.5 + 0.2 * 4.0 + 0.3 * 16.0 + out = add_kappa(base_value, params, cf_val, states) + assert_allclose(float(out), expected) + + +def test_investment_residual_sds_recovers_known_noise_sd() -> None: + rng = np.random.default_rng(7) + n_obs, n_periods, n_pred = 20_000, 3, 2 + betas = jnp.array([[1.0, -0.5, 0.3], [0.8, 0.2, 1.0], [0.5, 0.5, -0.4]]) + predictors = jnp.asarray(rng.normal(size=(n_obs, n_periods, n_pred))) + ones = jnp.ones((n_obs, n_periods, 1)) + design = jnp.concatenate([predictors, ones], axis=-1) + mean = jnp.einsum("opk,pk->op", design, betas) + true_sds = jnp.array([0.5, 1.0, 1.5]) + noise = jnp.asarray(rng.normal(size=(n_obs, n_periods))) * true_sds + investment = mean + noise + + sds = compute_investment_residual_sds(investment, predictors, betas) + assert sds.shape == (n_periods,) + assert_allclose(np.asarray(sds), np.asarray(true_sds), rtol=0.05) + + +def test_kappa_addition_node_is_identity_when_kappa_is_zero() -> None: + evals = build_kappa_term_evaluators(kappa_terms=("cf",), factor_positions={}) + add_kappa = build_kappa_addition_node( + kappa_key="__kappa_health_mom__", kappa_evaluators=evals + ) + params = {"__kappa_health_mom__": jnp.array([0.0])} + out = add_kappa(jnp.array(5.5), params, jnp.array(4.0), jnp.array([2.0, 3.0])) + assert_allclose(float(out), 5.5) diff --git a/tests/test_correlation_heatmap.py b/tests/test_correlation_heatmap.py index 114dc9bc..67f5a028 100644 --- a/tests/test_correlation_heatmap.py +++ b/tests/test_correlation_heatmap.py @@ -9,7 +9,7 @@ import pytest from pandas.testing import assert_frame_equal as afe -from skillmodels.correlation_heatmap import ( +from skillmodels.common.correlation_heatmap import ( _get_mask, _get_measurement_data_for_multiple_periods, _get_measurement_data_for_single_period, @@ -21,7 +21,7 @@ get_scores_corr, plot_correlation_heatmap, ) -from skillmodels.types import Labels +from skillmodels.common.types import Labels REGRESSION_VAULT = Path(__file__).parent / "regression_vault" @@ -275,12 +275,12 @@ def test_process_factors() -> None: observed_factor = "g" factors = ["b", "d", "g"] all_factors = None - assert tuple("abcd") == _process_factors(model, all_factors)[0] # ty: ignore[invalid-argument-type] - assert tuple("efg") == _process_factors(model, all_factors)[1] # ty: ignore[invalid-argument-type] - assert (latent_factor,) == _process_factors(model, latent_factor)[0] # ty: ignore[invalid-argument-type] - assert (observed_factor,) == _process_factors(model, observed_factor)[1] # ty: ignore[invalid-argument-type] - assert tuple(factors[:-1]) == _process_factors(model, factors)[0] # ty: ignore[invalid-argument-type] - assert (factors[-1],) == _process_factors(model, factors)[1] # ty: ignore[invalid-argument-type] + assert tuple("abcd") == _process_factors(model, all_factors)[0] + assert tuple("efg") == _process_factors(model, all_factors)[1] + assert (latent_factor,) == _process_factors(model, latent_factor)[0] + assert (observed_factor,) == _process_factors(model, observed_factor)[1] + assert tuple(factors[:-1]) == _process_factors(model, factors)[0] + assert (factors[-1],) == _process_factors(model, factors)[1] def test_get_mask_lower_triangle_only() -> None: @@ -458,3 +458,60 @@ def test_get_scores_corr_single_period( periods=0, ) assert isinstance(result, pd.DataFrame) + + +def test_get_measurement_data_with_single_period_lists_a_shared_measurement_once() -> ( + None +): + """A measurement that loads on two factors appears as one column.""" + update_info = pd.DataFrame( + { + "f1": [True, True, False], + "f2": [False, True, True], + "purpose": "measurement", + }, + index=pd.MultiIndex.from_product( + [[0], ["y0", "y1", "y2"]], names=["stage", "variable"] + ), + ) + data = pd.DataFrame({"stage": [0, 0], "y0": [1, 2], "y1": [3, 4], "y2": [5, 6]}) + result = _get_measurement_data_for_single_period( + data, update_info, 0, latent_factors=["f1", "f2"], observed_factors=[] + ) + assert list(result.columns) == ["y0", "y1", "y2"] + + +def test_get_measurement_data_with_multiple_periods_lists_shared_measurement_once() -> ( + None +): + """A measurement that loads on two factors appears once per period.""" + update_info = pd.DataFrame( + { + "f1": [True, True, False] * 2, + "f2": [False, True, True] * 2, + "purpose": "measurement", + }, + index=pd.MultiIndex.from_product( + [[0, 1], ["y0", "y1", "y2"]], names=["stage", "variable"] + ), + ) + data = pd.DataFrame( + { + "stage": [0, 0, 1, 1], + "y0": [1, 2, 3, 4], + "y1": [3, 4, 5, 6], + "y2": [5, 6, 7, 8], + }, + index=[0, 1, 0, 1], + ) + result = _get_measurement_data_for_multiple_periods( + data, update_info, [0, 1], latent_factors=["f1", "f2"], observed_factors=[] + ) + assert list(result.columns) == [ + "y0, 0", + "y1, 0", + "y2, 0", + "y0, 1", + "y1, 1", + "y2, 1", + ] diff --git a/tests/test_decorators.py b/tests/test_decorators.py index 44dd7645..165d2618 100644 --- a/tests/test_decorators.py +++ b/tests/test_decorators.py @@ -3,7 +3,11 @@ import jax.numpy as jnp import pytest -from skillmodels.decorators import extract_params, jax_array_output, register_params +from skillmodels.common.decorators import ( + extract_params, + jax_array_output, + register_params, +) def test_extract_params_decorator_only_key() -> None: diff --git a/tests/test_diagnostic_plots.py b/tests/test_diagnostic_plots.py index c823aa39..d14f59c5 100644 --- a/tests/test_diagnostic_plots.py +++ b/tests/test_diagnostic_plots.py @@ -6,11 +6,12 @@ import plotly.graph_objects as go import pytest -from skillmodels.diagnostic_plots import ( +from skillmodels.chs.maximization_inputs import get_maximization_inputs +from skillmodels.common.diagnostic_plots import ( plot_likelihood_contributions, plot_residual_boxplots, ) -from skillmodels.maximization_inputs import get_maximization_inputs +from skillmodels.test_data.model2 import MODEL2_CHS_OPTIONS REGRESSION_VAULT = Path(__file__).parent / "regression_vault" @@ -20,7 +21,9 @@ def model2_diag_params(model2, model2_data): """Prepare params that match the expected index for diagnostic plots.""" vault_params = pd.read_csv(REGRESSION_VAULT / "one_stage_anchoring.csv") vault_params = vault_params.set_index(["category", "period", "name1", "name2"]) - max_inputs = get_maximization_inputs(model_spec=model2, data=model2_data) + max_inputs = get_maximization_inputs( + model_spec=model2, data=model2_data, chs_options=MODEL2_CHS_OPTIONS + ) params = max_inputs["params_template"].copy() # Fill in values from vault params where indices match common_idx = params.index.intersection(vault_params.index) @@ -29,14 +32,20 @@ def model2_diag_params(model2, model2_data): return params +@pytest.fixture +def model2_debug(model2, model2_data, model2_diag_params): + """Run the CHS debug loglike once to feed the plot helpers.""" + max_inputs = get_maximization_inputs( + model_spec=model2, data=model2_data, chs_options=MODEL2_CHS_OPTIONS + ) + return max_inputs["debug_loglike"](model2_diag_params) + + @pytest.mark.integration -def test_plot_residual_boxplots_single_period( - model2, model2_data, model2_diag_params -) -> None: +def test_plot_residual_boxplots_single_period(model2, model2_debug) -> None: fig = plot_residual_boxplots( model_spec=model2, - data=model2_data, - params=model2_diag_params, + residuals=model2_debug["residuals"], period=0, ) assert isinstance(fig, go.Figure) @@ -44,13 +53,10 @@ def test_plot_residual_boxplots_single_period( @pytest.mark.integration -def test_plot_residual_boxplots_all_periods( - model2, model2_data, model2_diag_params -) -> None: +def test_plot_residual_boxplots_all_periods(model2, model2_debug) -> None: result = plot_residual_boxplots( model_spec=model2, - data=model2_data, - params=model2_diag_params, + residuals=model2_debug["residuals"], period=None, ) assert isinstance(result, dict) @@ -59,13 +65,10 @@ def test_plot_residual_boxplots_all_periods( @pytest.mark.integration -def test_plot_residual_boxplots_no_reference_line( - model2, model2_data, model2_diag_params -) -> None: +def test_plot_residual_boxplots_no_reference_line(model2, model2_debug) -> None: fig = plot_residual_boxplots( model_spec=model2, - data=model2_data, - params=model2_diag_params, + residuals=model2_debug["residuals"], period=0, show_reference_line=False, ) @@ -73,13 +76,10 @@ def test_plot_residual_boxplots_no_reference_line( @pytest.mark.integration -def test_plot_residual_boxplots_layout_kwargs( - model2, model2_data, model2_diag_params -) -> None: +def test_plot_residual_boxplots_layout_kwargs(model2, model2_debug) -> None: fig = plot_residual_boxplots( model_spec=model2, - data=model2_data, - params=model2_diag_params, + residuals=model2_debug["residuals"], period=0, layout_kwargs={"title": "Custom Title"}, ) @@ -88,13 +88,10 @@ def test_plot_residual_boxplots_layout_kwargs( @pytest.mark.integration -def test_plot_likelihood_contributions_single_period( - model2, model2_data, model2_diag_params -) -> None: +def test_plot_likelihood_contributions_single_period(model2, model2_debug) -> None: fig = plot_likelihood_contributions( model_spec=model2, - data=model2_data, - params=model2_diag_params, + contributions=model2_debug["all_contributions"], period=0, ) assert isinstance(fig, go.Figure) @@ -102,13 +99,10 @@ def test_plot_likelihood_contributions_single_period( @pytest.mark.integration -def test_plot_likelihood_contributions_all_periods( - model2, model2_data, model2_diag_params -) -> None: +def test_plot_likelihood_contributions_all_periods(model2, model2_debug) -> None: result = plot_likelihood_contributions( model_spec=model2, - data=model2_data, - params=model2_diag_params, + contributions=model2_debug["all_contributions"], period=None, ) assert isinstance(result, dict) @@ -117,13 +111,10 @@ def test_plot_likelihood_contributions_all_periods( @pytest.mark.integration -def test_plot_likelihood_contributions_layout_kwargs( - model2, model2_data, model2_diag_params -) -> None: +def test_plot_likelihood_contributions_layout_kwargs(model2, model2_debug) -> None: fig = plot_likelihood_contributions( model_spec=model2, - data=model2_data, - params=model2_diag_params, + contributions=model2_debug["all_contributions"], period=0, layout_kwargs={"title": "Custom LL Title"}, ) diff --git a/tests/test_docs_no_stale_api.py b/tests/test_docs_no_stale_api.py new file mode 100644 index 00000000..8faef6e2 --- /dev/null +++ b/tests/test_docs_no_stale_api.py @@ -0,0 +1,74 @@ +"""Regression guard: documentation must not teach stale or false API/behavior. + +Each assertion encodes a fixed Pro-review finding (F1-F9): a phrase the docs must +no longer contain, or a corrected phrase/field they must now contain. The audience is a +user copying the docs; a stale claim makes them build the wrong model or call a missing +API. Keep these checks textual and cheap so they run in any environment. +""" + +from pathlib import Path + +DOCS = Path(__file__).resolve().parent.parent / "docs" + + +def _read(rel: str) -> str: + return (DOCS / rel).read_text(encoding="utf-8") + + +def test_model_specs_uses_correction_not_is_correction() -> None: + text = _read("how_to_guides/model_specs.md") + assert "is_correction" not in text + assert "correction" in text + + +def test_names_and_concepts_uses_current_option_names() -> None: + text = _read("explanations/names_and_concepts.md") + assert "n_mixture_components" not in text + assert "initialization_strategy" not in text + assert "investment_endogeneity" not in text + assert "start_params_strategy" in text + + +def test_amn_guide_does_not_claim_chs_is_one_component() -> None: + text = _read("how_to_guides/how_to_estimate_amn.md") + assert "one mixture component" not in text + assert "n_mixtures" in text + + +def test_af_guide_does_not_overclaim_constraint_support() -> None: + text = _read("how_to_guides/how_to_estimate_af.md") + assert "All optimagic constraint kinds are supported" not in text + assert "select_by_loc" in text + + +def test_compare_guide_does_not_claim_identical_point_estimates() -> None: + text = _read("how_to_guides/how_to_compare_estimators.md") + assert "same point estimate" not in text + + +def test_transition_functions_does_not_say_amn_lacks_custom_transitions() -> None: + text = _read("reference_guides/transition_functions.md") + assert "not yet with AMN" not in text + + +def test_tutorial_activates_the_af_model_it_describes() -> None: + text = _read("getting_started/tutorial.ipynb") + assert "af_state_role" in text + assert "has_initial_distribution=False" in text + assert "is_endogenous=True" in text + + +def test_estimator_prerequisites_reference_page_exists() -> None: + text = _read("reference_guides/estimator_prerequisites.md") + assert "prerequisite" in text.lower() + # A table comparing the three estimators. + for estimator in ("CHS", "AF", "AMN"): + assert estimator in text + # AF non-Gaussian support is initial-period only — must be stated, not blanket. + assert "initial" in text.lower() + + +def test_amn_guide_documents_missing_data_and_fixed_param_prerequisites() -> None: + text = _read("how_to_guides/how_to_estimate_amn.md") + assert "mixture_em_method" in text + assert "allow_never_observed_measurements" in text diff --git a/tests/test_estimation_protocols.py b/tests/test_estimation_protocols.py new file mode 100644 index 00000000..8faec749 --- /dev/null +++ b/tests/test_estimation_protocols.py @@ -0,0 +1,98 @@ +"""Conformance tests for the cross-estimator structural Protocols. + +Guards that the three concrete result / options dataclasses keep +satisfying `CommonEstimationResult` / `CommonEstimationOptions` (so +harmonised post-estimation code can rely on the shared surface) and that +the exactly-one-objective invariant holds for the likelihood estimators. +""" + +import dataclasses + +import pandas as pd +import pytest + +from skillmodels.af.types import AFEstimationOptions, AFEstimationResult +from skillmodels.amn.types import AMNEstimationOptions, AMNEstimationResult +from skillmodels.chs.options import CHSEstimationOptions +from skillmodels.chs.types import CHSEstimationResult +from skillmodels.common.estimation import ( + CommonEstimationOptions, + CommonEstimationResult, +) +from skillmodels.common.model_spec import FactorSpec, ModelSpec, Normalizations + +RESULT_CLASSES = [AFEstimationResult, AMNEstimationResult, CHSEstimationResult] +OPTION_CLASSES = [AFEstimationOptions, AMNEstimationOptions, CHSEstimationOptions] + +REQUIRED_RESULT_FIELDS = frozenset( + {"model_spec", "params", "success", "loglikelihood", "md_criterion"} +) +REQUIRED_OPTION_FIELDS = frozenset({"optimizer_algorithm", "optimizer_options"}) + + +def _tiny_model() -> ModelSpec: + return ModelSpec( + factors={ + "skills": FactorSpec( + measurements=(("y1", "y2", "y3"),), + normalizations=Normalizations( + loadings=({"y1": 1},), + intercepts=({},), + ), + transition_function="linear", + ), + }, + ) + + +@pytest.mark.parametrize("cls", RESULT_CLASSES) +def test_result_class_declares_common_result_fields(cls): + names = {f.name for f in dataclasses.fields(cls)} + assert names >= REQUIRED_RESULT_FIELDS + + +@pytest.mark.parametrize("cls", OPTION_CLASSES) +def test_options_class_declares_common_option_fields(cls): + names = {f.name for f in dataclasses.fields(cls)} + assert names >= REQUIRED_OPTION_FIELDS + + +@pytest.mark.parametrize( + "options", [AFEstimationOptions(), AMNEstimationOptions(), CHSEstimationOptions()] +) +def test_options_instances_satisfy_common_options_protocol(options): + assert isinstance(options, CommonEstimationOptions) + + +def _make_chs_result() -> CHSEstimationResult: + params = pd.DataFrame({"value": [0.5]}) + return CHSEstimationResult( + model_spec=_tiny_model(), + params=params, + success=True, + loglikelihood=-123.0, + optimize_result=None, + ) + + +def _make_af_result() -> AFEstimationResult: + params = pd.DataFrame({"value": [0.5]}) + return AFEstimationResult( + period_results=(), + params=params, + model_spec=_tiny_model(), + conditional_distributions=(), + success=True, + loglikelihood=-456.0, + ) + + +def test_chs_and_af_results_satisfy_common_result_protocol(): + for result in (_make_chs_result(), _make_af_result()): + assert isinstance(result, CommonEstimationResult) + + +def test_exactly_one_objective_is_non_none_for_likelihood_results(): + for result in (_make_chs_result(), _make_af_result()): + assert result.loglikelihood is not None + assert result.md_criterion is None diff --git a/tests/test_factor_spec_af_state_role.py b/tests/test_factor_spec_af_state_role.py new file mode 100644 index 00000000..d1597ce7 --- /dev/null +++ b/tests/test_factor_spec_af_state_role.py @@ -0,0 +1,71 @@ +"""Tests for the explicit `af_state_role` metadata on `FactorSpec`. + +A time-invariant factor (e.g. MC/MN) whose period-0 measurement density must be +re-applied as an AF importance factor at every step is declared explicitly via +`af_state_role="static_persistent"`, rather than inferred from an identity transition +(which may be supplied through `fixed_params` and is therefore not reliably detectable). +Factors default to `"dynamic"`, so existing specs are unchanged. +""" + +import pytest + +from skillmodels.common.model_spec import FactorSpec, ModelSpec, Normalizations + + +def test_factor_spec_defaults_to_dynamic_af_state_role() -> None: + spec = FactorSpec(measurements=(("m",), ("m",)), transition_function="linear") + assert spec.af_state_role == "dynamic" + + +def test_factor_spec_accepts_static_persistent_role() -> None: + spec = FactorSpec( + measurements=(("mc_1",), ()), + transition_function="linear", + af_state_role="static_persistent", + ) + assert spec.af_state_role == "static_persistent" + + +def test_factor_spec_rejects_unknown_af_state_role() -> None: + with pytest.raises((ValueError, TypeError)): + FactorSpec( + measurements=(("m",),), + transition_function="linear", + # Intentionally invalid: exercises beartype's runtime rejection. + af_state_role="bogus", # ty: ignore[invalid-argument-type] + ) + + +def test_from_dict_parses_af_state_role() -> None: + model = ModelSpec.from_dict( + { + "factors": { + "MC": { + "measurements": [["mc_1"], []], + "normalizations": { + "loadings": [{"mc_1": 1}, {}], + "intercepts": [{"mc_1": 0}, {}], + }, + "transition_function": "linear", + "af_state_role": "static_persistent", + }, + }, + } + ) + assert model.factors["MC"].af_state_role == "static_persistent" + + +def test_from_dict_defaults_af_state_role_to_dynamic() -> None: + model = ModelSpec( + factors={ + "skills": FactorSpec( + measurements=(("test_score",), ("test_score",)), + normalizations=Normalizations( + loadings=({"test_score": 1},) * 2, + intercepts=({"test_score": 0},) * 2, + ), + transition_function="linear", + ), + }, + ) + assert model.factors["skills"].af_state_role == "dynamic" diff --git a/tests/test_filtered_states.py b/tests/test_filtered_states.py index 787e9764..58369711 100644 --- a/tests/test_filtered_states.py +++ b/tests/test_filtered_states.py @@ -6,10 +6,16 @@ import pandas as pd import pytest -from skillmodels.config import TEST_DATA_DIR -from skillmodels.filtered_states import get_filtered_states -from skillmodels.maximization_inputs import get_maximization_inputs -from skillmodels.test_data.model2 import MODEL2 +import skillmodels.chs.maximization_inputs as mi +from skillmodels.chs.maximization_inputs import get_maximization_inputs +from skillmodels.chs.options import CHSEstimationOptions +from skillmodels.chs.types import CHSEstimationResult +from skillmodels.common.config import TEST_DATA_DIR +from skillmodels.common.individual_states import ( + get_individual_states, + get_individual_states_from_params, +) +from skillmodels.test_data.model2 import MODEL2, MODEL2_CHS_OPTIONS REGRESSION_VAULT = Path(__file__).parent / "regression_vault" @@ -25,14 +31,21 @@ def model2_data(): return data.set_index(["caseid", "period"]) -def test_get_filtered_states(model2, model2_data) -> None: +def test_get_individual_states_from_params(model2, model2_data) -> None: params = pd.read_csv(REGRESSION_VAULT / "one_stage_anchoring.csv") params = params.set_index(["category", "period", "name1", "name2"]) - max_inputs = get_maximization_inputs(model2, model2_data) + max_inputs = get_maximization_inputs( + model2, model2_data, chs_options=MODEL2_CHS_OPTIONS + ) params = params.loc[max_inputs["params_template"].index] - calculated = get_filtered_states(model_spec=model2, data=model2_data, params=params) + calculated = get_individual_states_from_params( + model_spec=model2, + data=model2_data, + params=params, + chs_options=MODEL2_CHS_OPTIONS, + ) factors = ["fac1", "fac2", "fac3"] expected_ratios = [1.187757, 1, 1] @@ -41,3 +54,66 @@ def test_get_filtered_states(model2, model2_data) -> None: unanch_ranges = calculated["unanchored_states"]["state_ranges"][factor] ratio = (anch_ranges / unanch_ranges).to_numpy() assert np.allclose(ratio, expected_ratio) + + +@pytest.fixture +def model2_params(model2, model2_data): + params = pd.read_csv(REGRESSION_VAULT / "one_stage_anchoring.csv") + params = params.set_index(["category", "period", "name1", "name2"]) + template = get_maximization_inputs( + model2, + model2_data, + chs_options=CHSEstimationOptions(start_params_strategy="none"), + )["params_template"] + return params.loc[template.index] + + +def _fail(*args, **kwargs): + raise AssertionError("start values must not be seeded") + + +def test_individual_states_from_params_never_seed_start_values( + model2, model2_data, model2_params, monkeypatch +) -> None: + """Filtering at given params skips AMN / Spearman start-value seeding.""" + monkeypatch.setattr(mi, "_estimate_amn_for_chs_seeding", _fail) + monkeypatch.setattr(mi, "get_spearman_start_params", _fail) + states = get_individual_states_from_params( + model_spec=model2, + data=model2_data, + params=model2_params, + chs_options=CHSEstimationOptions(start_params_strategy="amn"), + )["unanchored_states"]["states"] + assert len(states) == len(model2_data) + + +def test_individual_states_from_params_use_the_sigma_point_scale( + model2, model2_data, model2_params +) -> None: + """The filter runs with the likelihood settings of the given options.""" + + def _states(scale): + return get_individual_states_from_params( + model_spec=model2, + data=model2_data, + params=model2_params, + chs_options=CHSEstimationOptions( + start_params_strategy="none", sigma_points_scale=scale + ), + )["unanchored_states"]["states"]["fac1"].to_numpy() + + assert not np.allclose(_states(2.0), _states(0.5)) + + +def test_get_individual_states_requires_chs_options_for_chs_result( + model2, model2_data, model2_params +) -> None: + result = CHSEstimationResult( + model_spec=model2, + params=model2_params, + success=True, + loglikelihood=0.0, + optimize_result=None, + ) + with pytest.raises(TypeError, match="chs_options"): + get_individual_states(data=model2_data, result=result) diff --git a/tests/test_identification.py b/tests/test_identification.py new file mode 100644 index 00000000..209f20b7 --- /dev/null +++ b/tests/test_identification.py @@ -0,0 +1,390 @@ +"""Tests for the reusable transition-aware identification anchor check (audit F6). + +`check_initial_anchors` is the estimator-agnostic core of the AF period-0 anchor +diagnostic: given a ModelSpec plus any fixed_params / constraints, it returns a +list of human-readable problems with the initial-period affine anchoring. Every +factor with an initial distribution needs both a loading (scale) and an intercept +(location) anchor at period 0; the CES simplex does NOT supply the initial +location anchor (Pro F1). It is exposed for CHS/common tooling but is deliberately +NOT wired into the default process_model path (no pipeline-wide gating). +""" + +import functools +from collections.abc import Mapping + +import optimagic as om +import pandas as pd +import pytest + +from skillmodels.common.constraints import select_by_loc +from skillmodels.common.identification import ( + check_initial_anchors, + fail_if_initial_state_unanchored, + find_excess_initial_restrictions, +) +from skillmodels.common.model_spec import ( + FactorSpec, + ModelSpec, + Normalizations, +) + + +def _model( + *, + skills_loadings: tuple[Mapping[str, float], ...], + skills_intercepts: tuple[Mapping[str, float], ...], + skills_transition: str = "translog", +) -> ModelSpec: + return ModelSpec( + factors={ + "skills": FactorSpec( + measurements=(("y1", "y2", "y3"),) * 2, + normalizations=Normalizations( + loadings=skills_loadings, + intercepts=skills_intercepts, + ), + transition_function=skills_transition, + ), + "investment": FactorSpec( + measurements=(("z1", "z2", "z3"),) * 2, + normalizations=Normalizations( + loadings=({"z1": 1},) * 2, + intercepts=({"z1": 0},) * 2, + ), + transition_function="linear", + is_endogenous=True, + ), + }, + ) + + +def test_check_identification_clean_translog_returns_no_problems() -> None: + model = _model( + skills_loadings=({"y1": 1},) * 2, + skills_intercepts=({"y1": 0},) * 2, + ) + assert check_initial_anchors(model) == [] + + +def test_check_identification_flags_missing_period0_loading() -> None: + model = _model( + skills_loadings=({}, {"y1": 1}), + skills_intercepts=({"y1": 0},) * 2, + ) + problems = check_initial_anchors(model) + assert any("period 0" in p for p in problems) + + +def test_check_identification_log_ces_requires_initial_intercept_anchor() -> None: + # The CES simplex replaces only the CROSS-PERIOD location alternative, not + # the absolute initial anchor mu_theta,0,1=0 (Pro F1: f(x+c,i+c)=f(x,i)+c + # leaves a common-shift orbit). So plain log_ces still needs a period-0 + # intercept anchor. + model = _model( + skills_loadings=({"y1": 1},) * 2, + skills_intercepts=({}, {}), + skills_transition="log_ces", + ) + problems = check_initial_anchors(model) + assert any("period 0" in p and "location" in p for p in problems) + + +def test_check_identification_equality_of_free_loadings_does_not_anchor() -> None: + # An equality among free loadings reduces dimension but leaves their common + # scale free (Pro F3): it is NOT an anchor unless connected to a fixed or + # normalized member. period-0 skills loading is empty and the group ties two + # otherwise-free loadings, so the scale stays unanchored -> a problem. + model = _model( + skills_loadings=({}, {}), + skills_intercepts=({"y1": 0},) * 2, + ) + group = pd.MultiIndex.from_tuples( + [ + ("loadings", 0, "y1", "skills"), + ("loadings", 1, "y1", "skills"), + ], + names=["category", "period", "name1", "name2"], + ) + constraints: list[om.constraints.Constraint] = [ + om.EqualityConstraint(selector=functools.partial(select_by_loc, loc=group)) + ] + problems = check_initial_anchors(model, constraints=constraints) + assert any("period 0" in p and "scale" in p for p in problems) + + +def test_check_identification_zero_loading_pin_is_not_a_scale_anchor() -> None: + # A loading fixed to 0 is invariant to every rescaling of the factor and + # cannot pin its scale (Pro F1). It must NOT count as a scale anchor. + model = _model( + skills_loadings=({}, {"y1": 1}), + skills_intercepts=({"y1": 0},) * 2, + ) + fixed = pd.DataFrame( + {"value": [0.0]}, + index=pd.MultiIndex.from_tuples( + [("loadings", 0, "y1", "skills")], + names=["category", "period", "name1", "name2"], + ), + ) + problems = check_initial_anchors(model, fixed_params=fixed) + assert any("period 0" in p and "scale" in p for p in problems) + + +def test_check_identification_nonfinite_loading_pin_is_not_an_anchor() -> None: + model = _model( + skills_loadings=({}, {"y1": 1}), + skills_intercepts=({"y1": 0},) * 2, + ) + fixed = pd.DataFrame( + {"value": [float("inf")]}, + index=pd.MultiIndex.from_tuples( + [("loadings", 0, "y1", "skills")], + names=["category", "period", "name1", "name2"], + ), + ) + problems = check_initial_anchors(model, fixed_params=fixed) + assert any("period 0" in p and "scale" in p for p in problems) + + +def test_check_identification_equality_anchor_is_transitive() -> None: + # A=normalized, A=B, B=C across two constraints: the anchor must propagate + # transitively to C (Pro F2). Here the only period-0 loading anchor is + # reachable only through a two-hop equality chain. + model = _model( + skills_loadings=({}, {"y1": 1}), + skills_intercepts=({"y1": 0},) * 2, + ) + g1 = pd.MultiIndex.from_tuples( + [("loadings", 1, "y1", "skills"), ("loadings", 1, "y2", "skills")], + names=["category", "period", "name1", "name2"], + ) + g2 = pd.MultiIndex.from_tuples( + [("loadings", 1, "y2", "skills"), ("loadings", 0, "y1", "skills")], + names=["category", "period", "name1", "name2"], + ) + constraints: list[om.constraints.Constraint] = [ + om.EqualityConstraint(selector=functools.partial(select_by_loc, loc=g1)), + om.EqualityConstraint(selector=functools.partial(select_by_loc, loc=g2)), + ] + assert check_initial_anchors(model, constraints=constraints) == [] + + +def test_check_identification_honours_fixed_params_anchor() -> None: + model = _model( + skills_loadings=({}, {"y1": 1}), + skills_intercepts=({"y1": 0},) * 2, + ) + fixed = pd.DataFrame( + {"value": [1.0]}, + index=pd.MultiIndex.from_tuples( + [("loadings", 0, "y1", "skills")], + names=["category", "period", "name1", "name2"], + ), + ) + assert check_initial_anchors(model, fixed_params=fixed) == [] + + +def test_require_initial_anchors_raises_when_location_unanchored() -> None: + """A factor with a scale anchor but no period-0 location anchor is rejected.""" + model = _model( + skills_loadings=({"y1": 1},) * 2, + skills_intercepts=({}, {}), + ) + with pytest.raises(ValueError, match="not anchored"): + fail_if_initial_state_unanchored(model) + + +def test_require_initial_anchors_passes_a_fully_anchored_model() -> None: + """A model with both period-0 scale and location anchors passes silently.""" + model = _model( + skills_loadings=({"y1": 1},) * 2, + skills_intercepts=({"y1": 0},) * 2, + ) + fail_if_initial_state_unanchored(model) + + +_INDEX_NAMES = ["category", "period", "name1", "name2"] + + +def _fixed(rows: list[tuple[tuple[object, ...], float]]) -> pd.DataFrame: + return pd.DataFrame( + {"value": [value for _, value in rows]}, + index=pd.MultiIndex.from_tuples([key for key, _ in rows], names=_INDEX_NAMES), + ) + + +def _equality(*keys: tuple[object, ...]) -> om.constraints.Constraint: + loc = pd.MultiIndex.from_tuples(list(keys), names=_INDEX_NAMES) + return om.EqualityConstraint(selector=functools.partial(select_by_loc, loc=loc)) + + +def test_check_identification_accepts_fixed_initial_mean_as_location_anchor() -> None: + """A fixed period-0 component mean removes the location orbit (CHS convention). + + `skills` normalizes its period-0 loading but leaves the measurement intercept + free; pinning one initial-component latent mean supplies the location anchor, so + the model is fully anchored. + """ + model = _model( + skills_loadings=({"y1": 1.0},) * 2, + skills_intercepts=({}, {}), + ) + fixed = _fixed([(("initial_states", 0, "mixture_0", "skills"), 0.0)]) + assert check_initial_anchors(model, fixed_params=fixed) == [] + + +def test_check_identification_flags_factor_with_no_normalizations() -> None: + """A factor whose `normalizations is None` with no other anchor is rejected. + + An absent `Normalizations` object is not "out of scope": the initial affine + orbit is still unpinned, so the gate must report the missing scale/location + anchors rather than silently skip the factor. + """ + model = ModelSpec( + factors={ + "skills": FactorSpec( + measurements=(("y1", "y2", "y3"),) * 2, + normalizations=None, + transition_function="translog", + ), + "investment": FactorSpec( + measurements=(("z1", "z2", "z3"),) * 2, + normalizations=Normalizations( + loadings=({"z1": 1.0},) * 2, + intercepts=({"z1": 0.0},) * 2, + ), + transition_function="linear", + is_endogenous=True, + ), + }, + ) + problems = check_initial_anchors(model) + assert any("skills" in problem for problem in problems) + + +def test_check_identification_rejects_zero_loading_tied_to_intercept() -> None: + """A loading equated to a zero intercept does not pin scale. + + `skills` has a period-0 intercept normalization (location) but no period-0 + loading normalization (scale). Tying that loading equal to the zero intercept + leaves it fixed at zero, which is invariant under rescaling, so the factor is + still scale-under-identified. + """ + model = _model( + skills_loadings=({}, {"y1": 1.0}), + skills_intercepts=({"y1": 0.0}, {"y1": 0.0}), + ) + constraints = [ + _equality( + ("controls", 0, "y1", "constant"), + ("loadings", 0, "y1", "skills"), + ) + ] + problems = check_initial_anchors(model, constraints=constraints) + assert any("scale anchor" in problem for problem in problems) + + +def test_find_excess_initial_restrictions_flags_second_scale_and_location_pin() -> None: + """A second loading pin and an extra initial-mean pin are testable restrictions. + + The factor pins two period-0 loadings (`y1`, `y2`) and both a measurement + intercept and an initial-component mean, so each one-dimensional orbit direction + is pinned twice; the surplus pins are testable, not normalizations. + """ + model = _model( + skills_loadings=({"y1": 1.0, "y2": 1.0}, {"y1": 1.0}), + skills_intercepts=({"y1": 0.0}, {"y1": 0.0}), + ) + fixed = _fixed([(("initial_states", 0, "mixture_0", "skills"), 0.0)]) + excess = find_excess_initial_restrictions(model, fixed_params=fixed) + assert any("scale" in item and "testable" in item for item in excess) + assert any("location" in item and "testable" in item for item in excess) + + +def test_find_excess_initial_restrictions_clean_model_is_empty() -> None: + """One scale pin and one location pin per factor are normalizations, not excess.""" + model = _model( + skills_loadings=({"y1": 1.0}, {"y1": 1.0}), + skills_intercepts=({"y1": 0.0}, {"y1": 0.0}), + ) + assert find_excess_initial_restrictions(model) == [] + + +def test_find_excess_initial_restrictions_ignores_equality_tied_pins() -> None: + """Two loadings tied equal are one restriction, so they are not flagged.""" + model = _model( + skills_loadings=({"y1": 1.0, "y2": 1.0}, {"y1": 1.0}), + skills_intercepts=({"y1": 0.0}, {"y1": 0.0}), + ) + constraints = [ + _equality( + ("loadings", 0, "y1", "skills"), + ("loadings", 0, "y2", "skills"), + ) + ] + excess = find_excess_initial_restrictions(model, constraints=constraints) + assert not any("scale" in item for item in excess) + + +def _ces_two_factor_model( + *, + investment_loadings: tuple[Mapping[str, float], ...], + investment_intercepts: tuple[Mapping[str, float], ...], +) -> ModelSpec: + """A restricted-CES `skills` output plus a latent `investment` input. + + Both factors carry an initial distribution, so investment is a CES input + that has its own period-0 measurement system. + """ + return ModelSpec( + factors={ + "skills": FactorSpec( + measurements=(("y1", "y2", "y3"),) * 2, + normalizations=Normalizations( + loadings=({"y1": 1.0},) * 2, + intercepts=({"y1": 0.0},) * 2, + ), + transition_function="log_ces", + ), + "investment": FactorSpec( + measurements=(("z1", "z2", "z3"),) * 2, + normalizations=Normalizations( + loadings=investment_loadings, + intercepts=investment_intercepts, + ), + transition_function="linear", + ), + }, + ) + + +def test_find_excess_flags_second_scale_anchor_in_restricted_ces_system() -> None: + """A second scale anchor across a restricted-CES system is a testable restriction. + + `skills` (restricted CES) anchors its own period-0 scale; `investment` is a + CES input that also carries an initial distribution and redundantly anchors a + second scale. The CES restrictions identify investment's scale from skills' + single anchor, so the extra anchor constrains an identified feature. + """ + model = _ces_two_factor_model( + investment_loadings=({"z1": 1.0},) * 2, + investment_intercepts=({"z1": 0.0},) * 2, + ) + excess = find_excess_initial_restrictions(model) + assert any( + "CES" in item and "scale" in item and "testable" in item for item in excess + ) + + +def test_find_excess_allows_single_scale_anchor_in_restricted_ces_system() -> None: + """One scale anchor for the whole restricted-CES system is not excess. + + Only `skills` anchors the shared CES scale; investment's scale is identified + through the CES restrictions, so there is no excess scale restriction. + """ + model = _ces_two_factor_model( + investment_loadings=({}, {}), + investment_intercepts=({"z1": 0.0}, {"z1": 0.0}), + ) + excess = find_excess_initial_restrictions(model) + assert not any("scale" in item for item in excess) diff --git a/tests/test_kalman_filters.py b/tests/test_kalman_filters.py index 9099696d..2774b8e4 100644 --- a/tests/test_kalman_filters.py +++ b/tests/test_kalman_filters.py @@ -10,7 +10,7 @@ from filterpy.kalman import JulierSigmaPoints, KalmanFilter from numpy.testing import assert_array_almost_equal as aaae -from skillmodels.kalman_filters import ( +from skillmodels.chs.kalman_filters import ( _calculate_sigma_points, calculate_sigma_scaling_factor_and_weights, kalman_predict, @@ -18,7 +18,7 @@ linear_kalman_predict, transform_sigma_points, ) -from skillmodels.kalman_filters_debug import kalman_update as kalman_update_debug +from skillmodels.chs.kalman_filters_debug import kalman_update as kalman_update_debug jax.config.update("jax_enable_x64", True) @@ -570,3 +570,49 @@ def test_sigma_points_multiple_mixtures() -> None: (n_sigma, n_observed), ) aaae(observed_slice, expected) + + +@pytest.mark.parametrize("update_func", UPDATE_FUNCS) +def test_kalman_update_resets_negligible_mixture_component(update_func) -> None: + """A component with underflowing weight takes the dominant component's state. + + Otherwise a nonlinear transition can blow its (irrelevant) state up to inf over + later periods, and the gradient through its zero weight becomes 0 * inf = NaN. + """ + n_states = 2 + states = jnp.array([[[1e100, -1e100], [0.3, -0.2]]]) + chols = jnp.broadcast_to(jnp.eye(n_states), (1, 2, n_states, n_states)) + log_weights = jnp.array([[-1e6, 0.0]]) + kwargs = { + "loadings": jnp.array([1.0, 0.5]), + "control_params": jnp.ones(1), + "meas_sd": 1.0, + "controls": jnp.ones((1, 1)), + } + + def two_updates(s: jax.Array) -> jax.Array: + s1, c1, w1, ll1 = update_func( + states=s, + upper_chols=chols, + measurements=jnp.array([0.4]), + log_mixture_weights=log_weights, + **kwargs, + )[:4] + _, _, _, ll2 = update_func( + states=s1**4, + upper_chols=c1, + measurements=jnp.array([0.1]), + log_mixture_weights=w1, + **kwargs, + )[:4] + return (ll1 + ll2).sum() + + new_states = update_func( + states=states, + upper_chols=chols, + measurements=jnp.array([0.4]), + log_mixture_weights=log_weights, + **kwargs, + )[0] + aaae(new_states[0, 0], new_states[0, 1]) + assert jnp.isfinite(jax.grad(two_updates)(states)).all() diff --git a/tests/test_likelihood_regression.py b/tests/test_likelihood_regression.py index cfe7a621..5a2da600 100644 --- a/tests/test_likelihood_regression.py +++ b/tests/test_likelihood_regression.py @@ -11,12 +11,12 @@ import pytest from numpy.testing import assert_array_almost_equal as aaae -from skillmodels.config import TEST_DATA_DIR -from skillmodels.decorators import register_params -from skillmodels.maximization_inputs import get_maximization_inputs -from skillmodels.model_spec import ModelSpec, Normalizations -from skillmodels.test_data.model2 import MODEL2 -from skillmodels.utilities import reduce_n_periods +from skillmodels.chs.maximization_inputs import get_maximization_inputs +from skillmodels.common.config import TEST_DATA_DIR +from skillmodels.common.decorators import register_params +from skillmodels.common.model_spec import ModelSpec, Normalizations +from skillmodels.common.utilities import reduce_n_periods +from skillmodels.test_data.model2 import MODEL2, MODEL2_CHS_OPTIONS jax.config.update("jax_enable_x64", True) @@ -86,7 +86,7 @@ def test_likelihood_values_have_not_changed( ["category", "period", "name1", "name2"], ) - inputs = get_maximization_inputs(model, model2_data) + inputs = get_maximization_inputs(model, model2_data, chs_options=MODEL2_CHS_OPTIONS) params = params.loc[inputs["params_template"].index] @@ -99,8 +99,14 @@ def test_likelihood_values_have_not_changed( def test_splitting_does_not_change_gradient(model2, model2_data) -> None: - inputs = get_maximization_inputs(model2, model2_data) - inputs_split = get_maximization_inputs(model2, model2_data, 13) + inputs = get_maximization_inputs( + model2, model2_data, chs_options=MODEL2_CHS_OPTIONS + ) + inputs_split = get_maximization_inputs( + model2, + model2_data, + chs_options=replace(MODEL2_CHS_OPTIONS, split_dataset=13), + ) params = inputs["params_template"] params["value"] = 0.1 @@ -111,6 +117,18 @@ def test_splitting_does_not_change_gradient(model2, model2_data) -> None: aaae(gradient, gradient_split) +def test_loglike_and_gradient_raises_on_non_finite_value(model2, model2_data) -> None: + """A non-finite value must raise, so optimagic can penalise and reject the step.""" + inputs = get_maximization_inputs( + model2, model2_data, chs_options=MODEL2_CHS_OPTIONS + ) + params = inputs["params_template"] + params["value"] = 0.1 + params.loc[params.index[0], "value"] = np.nan + with pytest.raises(FloatingPointError, match="non-finite"): + inputs["loglike_and_gradient"](params) + + @pytest.mark.parametrize( ("model_name", "fun_key"), product(MODEL_NAMES, ["loglikeobs"]) ) @@ -123,7 +141,7 @@ def test_likelihood_contributions_have_not_changed( ["category", "period", "name1", "name2"], ) - inputs = get_maximization_inputs(model, model2_data) + inputs = get_maximization_inputs(model, model2_data, chs_options=MODEL2_CHS_OPTIONS) params = params.loc[inputs["params_template"].index] @@ -190,7 +208,9 @@ def test_likelihood_contributions_large_nobs( stacked_data = pd.concat(to_concat) - inputs = get_maximization_inputs(model, stacked_data) + inputs = get_maximization_inputs( + model, stacked_data, chs_options=MODEL2_CHS_OPTIONS + ) params = params.loc[inputs["params_template"].index] @@ -223,7 +243,9 @@ def test_likelihood_runs_with_empty_periods(model2, model2_data) -> None: anchoring=None, ) - func_dict = get_maximization_inputs(model, model2_data) + func_dict = get_maximization_inputs( + model, model2_data, chs_options=MODEL2_CHS_OPTIONS + ) params = func_dict["params_template"] params["value"] = 0.1 @@ -235,7 +257,9 @@ def test_likelihood_runs_with_empty_periods(model2, model2_data) -> None: def test_likelihood_runs_with_too_long_data(model2, model2_data) -> None: reduced = reduce_n_periods(model2, 2) assert isinstance(reduced, ModelSpec) - func_dict = get_maximization_inputs(reduced, model2_data) + func_dict = get_maximization_inputs( + reduced, model2_data, chs_options=MODEL2_CHS_OPTIONS + ) params = func_dict["params_template"] params["value"] = 0.1 @@ -248,7 +272,9 @@ def test_likelihood_runs_with_observed_factors(model2, model2_data) -> None: model = model2.with_added_observed_factors("ob1", "ob2") model2_data["ob1"] = np.arange(len(model2_data)) model2_data["ob2"] = np.ones(len(model2_data)) - func_dict = get_maximization_inputs(model, model2_data) + func_dict = get_maximization_inputs( + model, model2_data, chs_options=MODEL2_CHS_OPTIONS + ) params = func_dict["params_template"] params["value"] = 0.1 diff --git a/tests/test_maximization_inputs.py b/tests/test_maximization_inputs.py index eb807d48..d7c143ea 100644 --- a/tests/test_maximization_inputs.py +++ b/tests/test_maximization_inputs.py @@ -2,10 +2,68 @@ import jax.numpy as jnp import numpy as np +import optimagic as om import pandas as pd import pytest -from skillmodels.maximization_inputs import _get_jnp_params_vec, _to_numpy +from skillmodels.chs.maximization_inputs import ( + _fail_if_start_params_incomplete, + _get_jnp_params_vec, + _to_numpy, + get_maximization_inputs, +) +from skillmodels.chs.options import CHSEstimationOptions +from skillmodels.common.config import TEST_DATA_DIR +from skillmodels.common.constraints import FixedConstraintWithValue +from skillmodels.common.utilities import reduce_n_periods +from skillmodels.test_data.model2 import MODEL2, MODEL2_CHS_OPTIONS + + +def test_fail_if_start_params_incomplete_flags_non_finite_rows() -> None: + """A seeded start point with a missing/non-finite value fails early + clearly.""" + names = ["category", "period", "name1", "name2"] + idx = pd.MultiIndex.from_tuples( + [("loadings", 0, "y1", "skills"), ("meas_sds", 0, "y1", "-")], names=names + ) + + complete = pd.DataFrame({"value": [1.0, 0.5]}, index=idx) + _fail_if_start_params_incomplete(complete) # all finite -> no raise + + incomplete = pd.DataFrame({"value": [1.0, np.nan]}, index=idx) + with pytest.raises(ValueError, match="without a finite value"): + _fail_if_start_params_incomplete(incomplete) + + +@pytest.mark.long_running +def test_amn_start_params_satisfy_equality_constraints() -> None: + """AMN-seeded start values must satisfy the stage-equality constraints. + + AMN estimates parameters per aug_period, but the stage + `PairwiseEqualityConstraint`s tie transition / shock params across the + aug_periods of a stage. The AMN seed must re-pool those groups; otherwise + `optimagic` rejects the start point with `InvalidParamsError`. + """ + data = pd.read_stata(TEST_DATA_DIR / "model2_simulated_data.dta").set_index( + ["caseid", "period"] + ) + mi = get_maximization_inputs( + model_spec=MODEL2, + data=data, + chs_options=CHSEstimationOptions(start_params_strategy="amn"), + ) + template = mi["params_template"] + # optimagic validates start-point feasibility at setup and raises + # InvalidParamsError on a violated equality constraint. A trivial one-step + # maximize reaches that check without running the Kalman likelihood. + res = om.maximize( + fun=lambda p: float(p["value"].sum()), + params=template[["value"]], + algorithm="scipy_lbfgsb", + bounds=om.Bounds(lower=template["lower_bound"], upper=template["upper_bound"]), + constraints=mi["constraints"], + algo_options={"stopping_maxiter": 1}, + ) + assert res is not None def test_to_numpy_with_dict() -> None: @@ -56,3 +114,135 @@ def test_get_jnp_params_vec_additional_entries_raises() -> None: ) with pytest.raises(ValueError, match="additional entries"): _get_jnp_params_vec(params, target_index) + + +@pytest.fixture +def model2_short(): + return reduce_n_periods(MODEL2, new_n_periods=3) + + +@pytest.fixture +def model2_data(): + return pd.read_stata(TEST_DATA_DIR / "model2_simulated_data.dta").set_index( + ["caseid", "period"] + ) + + +def test_get_maximization_inputs_with_fixed_params_pins_cross_factor_gamma( + model2_short, model2_data +) -> None: + """Fix gamma_fac3 in log_ces at 0 via fixed_params; verify CHS pipeline. + + Before probability + fixed-param support in optimagic, combining a + `ProbabilityConstraint` with a `FixedConstraint` on one of its selected + entries raised `InvalidConstraintError`. Now the fold machinery removes + the fixed entry from the selector; CHS should build a valid problem + whose params_template and constraint list reflect the pin and whose + log-likelihood evaluates to a finite number. + """ + fixed_idx = pd.MultiIndex.from_tuples( + [ + ("transition", 0, "fac1", "fac3"), + ("transition", 1, "fac1", "fac3"), + ], + names=["category", "period", "name1", "name2"], + ) + fixed_df = pd.DataFrame({"value": [0.0, 0.0]}, index=fixed_idx) + + inputs = get_maximization_inputs( + model2_short, model2_data, chs_options=MODEL2_CHS_OPTIONS, fixed_params=fixed_df + ) + + template = inputs["params_template"] + assert template.loc[("transition", 0, "fac1", "fac3"), "value"] == 0.0 + assert template.loc[("transition", 1, "fac1", "fac3"), "value"] == 0.0 + user_fixed = [ + c + for c in inputs["constraints"] + if isinstance(c, FixedConstraintWithValue) and c.loc in set(fixed_idx) + ] + assert len(user_fixed) == 2 + + # optimagic should accept the combined problem with our fold helper. + params = template.copy() + # Fill free entries with reasonable starting values compatible with the + # simplex constraint: split the remaining 1.0 between fac1 and fac2. + for t in (0, 1): + params.loc[("transition", t, "fac1", "fac1"), "value"] = 0.5 + params.loc[("transition", t, "fac1", "fac2"), "value"] = 0.5 + params["value"] = params["value"].fillna(0.1) + + om.check_constraints( + params=params[["value"]], + constraints=inputs["constraints"], + ) + + loglike_val = inputs["loglike"](params) + assert np.isfinite(loglike_val) + + +def test_get_maximization_inputs_with_fixed_params_non_zero( + model2_short, model2_data +) -> None: + """Fix a gamma at a non-zero value; remaining simplex sums to 1 - c.""" + fixed_idx = pd.MultiIndex.from_tuples( + [("transition", 0, "fac1", "fac3")], + names=["category", "period", "name1", "name2"], + ) + fixed_df = pd.DataFrame({"value": [0.2]}, index=fixed_idx) + + inputs = get_maximization_inputs( + model2_short, model2_data, chs_options=MODEL2_CHS_OPTIONS, fixed_params=fixed_df + ) + + template = inputs["params_template"] + assert template.loc[("transition", 0, "fac1", "fac3"), "value"] == 0.2 + params = template.copy() + params.loc[("transition", 0, "fac1", "fac1"), "value"] = 0.4 + params.loc[("transition", 0, "fac1", "fac2"), "value"] = 0.4 + params.loc[("transition", 1, "fac1", "fac1"), "value"] = 0.4 + params.loc[("transition", 1, "fac1", "fac2"), "value"] = 0.4 + params.loc[("transition", 1, "fac1", "fac3"), "value"] = 0.2 + params["value"] = params["value"].fillna(0.1) + + om.check_constraints( + params=params[["value"]], + constraints=inputs["constraints"], + ) + + loglike_val = inputs["loglike"](params) + assert np.isfinite(loglike_val) + + +def test_get_maximization_inputs_accepts_fixed_params_keyed_by_period( + model2_short, model2_data +) -> None: + """`fixed_params` keyed by `period` (the public name) must pin the entry. + + `params_index` uses `aug_period` internally; `MultiIndex.intersection` + silently returns an empty set when level names differ across the + operands, so without name alignment the user's pin would vanish. + Regression for that silent-drop bug. + """ + fixed_idx = pd.MultiIndex.from_tuples( + [("transition", 0, "fac1", "fac3")], + names=["category", "period", "name1", "name2"], # public-facing name + ) + fixed_df = pd.DataFrame({"value": [0.2]}, index=fixed_idx) + + inputs = get_maximization_inputs( + model2_short, model2_data, chs_options=MODEL2_CHS_OPTIONS, fixed_params=fixed_df + ) + + template = inputs["params_template"] + assert template.loc[("transition", 0, "fac1", "fac3"), "value"] == pytest.approx( + 0.2 + ) + fixed_constraints = [ + c + for c in inputs["constraints"] + if isinstance(c, FixedConstraintWithValue) + and c.loc == ("transition", 0, "fac1", "fac3") + ] + assert len(fixed_constraints) == 1 + assert fixed_constraints[0].value == pytest.approx(0.2) diff --git a/tests/test_measurement_loglik.py b/tests/test_measurement_loglik.py new file mode 100644 index 00000000..580fa334 --- /dev/null +++ b/tests/test_measurement_loglik.py @@ -0,0 +1,138 @@ +"""Tests for the shared measurement-family log-likelihood kernel. + +`measurement_loglik` returns one log density/probability contribution per +measurement, dispatching on a `MeasurementFamily` code: + +- Gaussian: `log N(y; eta, sigma)`. +- Probit: `log Phi((2y-1) eta)` for `y in {0, 1}` (standard-normal latent error). +- Tobit: censored normal -- the interior normal density, or the tail mass + `Phi((L-eta)/sigma)` / `Phi((eta-U)/sigma)` at a censoring bound. + +The kernel is the single source of truth shared by AF estimation, CHS, simulation +and posterior-state reweighting, so it is validated against SciPy closed forms and +its JAX gradient against finite differences. +""" + +import jax +import jax.numpy as jnp +import numpy as np +import pytest +from scipy.stats import norm + +from skillmodels.common.measurement_models import ( + MeasurementFamily, + measurement_loglik, +) + +jax.config.update("jax_enable_x64", True) + +_INF = float("inf") + + +def _ll(y, eta, sigma, family, lower=-_INF, upper=_INF): + return float( + measurement_loglik( + jnp.asarray(float(y)), + jnp.asarray(float(eta)), + jnp.asarray(float(sigma)), + jnp.asarray(int(family)), + jnp.asarray(float(lower)), + jnp.asarray(float(upper)), + ) + ) + + +@pytest.mark.parametrize("eta", [-2.0, 0.0, 1.5]) +@pytest.mark.parametrize("y", [-1.0, 0.7, 3.0]) +def test_gaussian_kernel_matches_scipy(y: float, eta: float) -> None: + sigma = 0.8 + got = _ll(y, eta, sigma, MeasurementFamily.GAUSSIAN) + assert got == pytest.approx(norm.logpdf(y, loc=eta, scale=sigma)) + + +@pytest.mark.parametrize("eta", [-3.0, -0.5, 0.0, 0.5, 3.0]) +@pytest.mark.parametrize("y", [0.0, 1.0]) +def test_probit_kernel_matches_scipy(y: float, eta: float) -> None: + got = _ll(y, eta, 1.0, MeasurementFamily.PROBIT) + expected = norm.logcdf((2.0 * y - 1.0) * eta) + assert got == pytest.approx(expected) + + +@pytest.mark.parametrize("eta", [-40.0, 40.0]) +@pytest.mark.parametrize("y", [0.0, 1.0]) +def test_probit_kernel_finite_in_tails(y: float, eta: float) -> None: + got = _ll(y, eta, 1.0, MeasurementFamily.PROBIT) + assert np.isfinite(got) + assert got == pytest.approx(norm.logcdf((2.0 * y - 1.0) * eta), abs=1e-6) + + +def test_tobit_interior_matches_scipy() -> None: + y, eta, sigma = 2.3, 1.0, 0.9 + got = _ll(y, eta, sigma, MeasurementFamily.TOBIT, lower=0.0) + expected = norm.logpdf(y, loc=eta, scale=sigma) + assert got == pytest.approx(expected) + + +def test_tobit_left_censored_matches_scipy() -> None: + lower, eta, sigma = 0.0, 1.0, 0.9 + got = _ll(lower, eta, sigma, MeasurementFamily.TOBIT, lower=lower) + expected = norm.logcdf((lower - eta) / sigma) + assert got == pytest.approx(expected) + + +def test_tobit_right_censored_matches_scipy() -> None: + upper, eta, sigma = 5.0, 4.0, 1.1 + got = _ll(upper, eta, sigma, MeasurementFamily.TOBIT, lower=0.0, upper=upper) + expected = norm.logcdf((eta - upper) / sigma) + assert got == pytest.approx(expected) + + +def test_tobit_one_sided_lower_does_not_censor_at_plus_inf() -> None: + # With no upper bound, a large interior value uses the normal density, never + # the (absent) upper tail mass. + y, eta, sigma = 100.0, 1.0, 0.9 + got = _ll(y, eta, sigma, MeasurementFamily.TOBIT, lower=0.0, upper=_INF) + assert got == pytest.approx(norm.logpdf(y, loc=eta, scale=sigma)) + + +def test_probit_loading_gradient_matches_finite_difference() -> None: + # eta = c + lambda * theta; differentiate the probit contribution wrt lambda. + y, theta, sigma = 1.0, 0.6, 1.0 + + def ll_of_lambda(lam: jax.Array) -> jax.Array: + eta = 0.2 + lam * theta + return measurement_loglik( + jnp.asarray(y), + eta, + jnp.asarray(sigma), + jnp.asarray(int(MeasurementFamily.PROBIT)), + jnp.asarray(-_INF), + jnp.asarray(_INF), + ) + + lam0 = jnp.asarray(0.8) + grad = float(jax.grad(ll_of_lambda)(lam0)) + h = 1e-6 + fd = (float(ll_of_lambda(lam0 + h)) - float(ll_of_lambda(lam0 - h))) / (2 * h) + assert grad == pytest.approx(fd, rel=1e-5, abs=1e-7) + + +def test_tobit_scale_gradient_matches_finite_difference() -> None: + # Differentiate a left-censored Tobit contribution wrt sigma. + lower, eta = 0.0, 1.0 + + def ll_of_sigma(sig: jax.Array) -> jax.Array: + return measurement_loglik( + jnp.asarray(lower), + jnp.asarray(eta), + sig, + jnp.asarray(int(MeasurementFamily.TOBIT)), + jnp.asarray(lower), + jnp.asarray(_INF), + ) + + sig0 = jnp.asarray(0.9) + grad = float(jax.grad(ll_of_sigma)(sig0)) + h = 1e-6 + fd = (float(ll_of_sigma(sig0 + h)) - float(ll_of_sigma(sig0 - h))) / (2 * h) + assert grad == pytest.approx(fd, rel=1e-5, abs=1e-7) diff --git a/tests/test_measurement_models.py b/tests/test_measurement_models.py new file mode 100644 index 00000000..cb89c9d7 --- /dev/null +++ b/tests/test_measurement_models.py @@ -0,0 +1,171 @@ +"""Tests for the public measurement-family interface on `ModelSpec`. + +A measurement variable's observation model (Gaussian / probit / Tobit) is a +property of the variable, not of the factor it loads on, so it is configured via +`ModelSpec.measurement_models` (a `name -> MeasurementModel` mapping). A variable +omitted from the mapping is Gaussian, so existing specs are unchanged. The marker +classes resolve to the internal `MeasurementFamily` code + censoring bounds that the +shared likelihood kernel consumes. +""" + +import math + +import numpy as np +import pytest + +from skillmodels.common.measurement_models import ( + GaussianMeasurement, + MeasurementFamily, + ProbitMeasurement, + TobitMeasurement, + measurement_family_arrays, + resolve_measurement_family, +) +from skillmodels.common.model_spec import ( + FactorSpec, + ModelSpec, + Normalizations, +) + + +def _model(measurement_models=None) -> ModelSpec: + return ModelSpec( + factors={ + "skills": FactorSpec( + measurements=(("test_score", "passed_grade"),) * 2, + normalizations=Normalizations( + loadings=({"test_score": 1},) * 2, + intercepts=({"test_score": 0},) * 2, + ), + transition_function="translog", + ), + }, + measurement_models=measurement_models, + ) + + +def test_omitted_measurement_models_defaults_to_gaussian() -> None: + model = _model() + assert model.measurement_model("test_score") == GaussianMeasurement() + assert model.measurement_model("passed_grade") == GaussianMeasurement() + + +def test_listed_measurement_models_are_returned() -> None: + model = _model({"passed_grade": ProbitMeasurement()}) + assert model.measurement_model("passed_grade") == ProbitMeasurement() + # An unlisted measure is still Gaussian. + assert model.measurement_model("test_score") == GaussianMeasurement() + + +def test_measurement_models_mapping_is_immutable() -> None: + model = _model({"passed_grade": ProbitMeasurement()}) + with pytest.raises(TypeError): + # Intentional illegal mutation: the mapping must be read-only. + model.measurement_models["test_score"] = ProbitMeasurement() # ty: ignore[invalid-assignment] + + +def test_unknown_measurement_name_is_rejected() -> None: + with pytest.raises(ValueError, match="not a measurement"): + _model({"not_a_real_measure": ProbitMeasurement()}) + + +def test_resolve_gaussian_family() -> None: + family, lower, upper = resolve_measurement_family(GaussianMeasurement()) + assert family is MeasurementFamily.GAUSSIAN + assert lower == -math.inf + assert upper == math.inf + + +def test_resolve_probit_family() -> None: + family, lower, upper = resolve_measurement_family(ProbitMeasurement()) + assert family is MeasurementFamily.PROBIT + assert lower == -math.inf + assert upper == math.inf + + +def test_resolve_one_sided_tobit_family() -> None: + family, lower, upper = resolve_measurement_family(TobitMeasurement(lower=0.0)) + assert family is MeasurementFamily.TOBIT + assert lower == 0.0 + assert upper == math.inf + + +def test_resolve_double_censored_tobit_family() -> None: + family, lower, upper = resolve_measurement_family( + TobitMeasurement(lower=0.0, upper=10.0) + ) + assert family is MeasurementFamily.TOBIT + assert (lower, upper) == (0.0, 10.0) + + +def test_tobit_rejects_no_bounds() -> None: + with pytest.raises(ValueError, match="at least one"): + TobitMeasurement(lower=None, upper=None) + + +def test_tobit_rejects_inverted_bounds() -> None: + with pytest.raises(ValueError, match=r"lower.*upper"): + TobitMeasurement(lower=5.0, upper=1.0) + + +def test_from_dict_parses_measurement_models() -> None: + model = ModelSpec.from_dict( + { + "factors": { + "skills": { + "measurements": [ + ["test_score", "passed_grade"], + ["test_score", "passed_grade"], + ], + "normalizations": { + "loadings": [{"test_score": 1}, {"test_score": 1}], + "intercepts": [{"test_score": 0}, {"test_score": 0}], + }, + "transition_function": "translog", + }, + }, + "measurement_models": { + "passed_grade": {"family": "probit"}, + "test_score": {"family": "tobit", "lower": 0.0}, + }, + } + ) + assert model.measurement_model("passed_grade") == ProbitMeasurement() + assert model.measurement_model("test_score") == TobitMeasurement(lower=0.0) + + +def test_from_dict_without_measurement_models_is_all_gaussian() -> None: + model = ModelSpec.from_dict( + { + "factors": { + "skills": { + "measurements": [["test_score"], ["test_score"]], + "normalizations": { + "loadings": [{"test_score": 1}, {"test_score": 1}], + "intercepts": [{"test_score": 0}, {"test_score": 0}], + }, + "transition_function": "translog", + }, + }, + } + ) + assert model.measurement_model("test_score") == GaussianMeasurement() + + +def test_measurement_family_arrays_aligns_and_defaults_gaussian() -> None: + models = { + "passed_grade": ProbitMeasurement(), + "amount": TobitMeasurement(lower=0.0, upper=5.0), + } + names = ["test_score", "passed_grade", "amount"] + codes, lowers, uppers = measurement_family_arrays(models, names) + np.testing.assert_array_equal( + codes, + [ + int(MeasurementFamily.GAUSSIAN), + int(MeasurementFamily.PROBIT), + int(MeasurementFamily.TOBIT), + ], + ) + assert lowers.tolist() == [-math.inf, -math.inf, 0.0] + assert uppers.tolist() == [math.inf, math.inf, 5.0] diff --git a/tests/test_missing_observed_factors.py b/tests/test_missing_observed_factors.py new file mode 100644 index 00000000..2751823a --- /dev/null +++ b/tests/test_missing_observed_factors.py @@ -0,0 +1,529 @@ +"""Tests for integrating out missing observed factors in the CHS Kalman filter. + +Where an observed factor `x` is missing for a person-period, it is treated as +`x ~ N(m, v)`, independent of the latent states, with `(m, v)` taken from data +columns named in `ModelSpec.missing_observed_factor_moments`. +""" + +import jax +import jax.numpy as jnp +import numpy as np +import pandas as pd +import pytest +from numpy.testing import assert_allclose + +from skillmodels.chs.kalman_filters import ( + calculate_sigma_scaling_factor_and_weights, + kalman_predict, + linear_kalman_predict, +) +from skillmodels.chs.maximization_inputs import get_maximization_inputs +from skillmodels.chs.options import CHSEstimationOptions +from skillmodels.common.model_spec import FactorSpec, ModelSpec + +jax.config.update("jax_enable_x64", True) + +LATENT = ("fac1", "fac2") +OBSERVED = ("ob1", "ob2") +N_PERIODS = 3 +N_PERSONS = 6 +MOMENTS = {"ob1": ("ob1_mean", "ob1_var"), "ob2": ("ob2_mean", "ob2_var")} +OPTIONS = CHSEstimationOptions(start_params_strategy="none") + +# (person, period) cells where each observed factor is missing. Person 3 misses +# both in period 1 (cross-equation covariance), person 5 misses ob1 only in the +# last period (never used by a transition), person 4 misses nothing. +MISSING_CELLS = { + "ob1": ((0, 0), (1, 0), (1, 1), (3, 1), (5, 2)), + "ob2": ((1, 0), (2, 1), (3, 1)), +} + +# Log-likelihood of `_model(n_mixtures=2, transition=...)` on `_data()` without +# missings at `_params(..., nonlinear=0.05)`: reference values pinning the +# complete-data filter, which supports observed factors without fill moments. +BASELINE_LOGLIKE = { + "linear": -198.6803696097199, + "translog": -206.7069287270014, +} + + +def _model( + n_mixtures: int = 1, + transition: str = "linear", + moments: dict | None = None, +) -> ModelSpec: + factors = { + f: FactorSpec( + measurements=((f"{f}_m1", f"{f}_m2"),) * N_PERIODS, + transition_function=transition, + ) + for f in LATENT + } + return ModelSpec( + factors=factors, + observed_factors=OBSERVED, + n_mixtures=n_mixtures, + missing_observed_factor_moments=moments, + ) + + +def _round(arr: np.ndarray) -> np.ndarray: + """Round to a float32-representable grid so dtype casts are exact.""" + return np.round(arr * 64) / 64 + + +def _data(*, with_missings: bool = True) -> pd.DataFrame: + rng = np.random.default_rng(1234) + idx = pd.MultiIndex.from_product( + [range(N_PERSONS), range(N_PERIODS)], names=["id", "period"] + ) + n_rows = len(idx) + meas = [f"{f}_m{j}" for f in LATENT for j in (1, 2)] + df = pd.DataFrame(_round(rng.normal(size=(n_rows, 4))), index=idx, columns=meas) + df.loc[(2, 1), "fac1_m1"] = np.nan + for ob, (mean_col, var_col) in MOMENTS.items(): + df[ob] = _round(rng.normal(size=n_rows)) + df[mean_col] = _round(rng.normal(scale=0.5, size=n_rows)) + df[var_col] = _round(rng.uniform(0.3, 1.2, size=n_rows)) + if with_missings: + for ob, cells in MISSING_CELLS.items(): + for cell in cells: + df.loc[cell, ob] = np.nan + return df + + +def _params(template: pd.DataFrame, nonlinear: float = 0.0) -> pd.DataFrame: + """Fill a CHS params template with fixed, well-conditioned values.""" + params = template.copy() + lin = { + "fac1": {"fac1": 0.7, "fac2": 0.2, "ob1": 0.9, "ob2": -0.6, "constant": 0.1}, + "fac2": {"fac1": -0.3, "fac2": 0.6, "ob1": 0.5, "ob2": 0.8, "constant": -0.2}, + } + values = [] + for category, period, name1, name2 in params.index: + if category == "controls": + val = 0.1 + elif category == "loadings": + val = 1.0 if name1.endswith("m1") else 0.8 + elif category == "meas_sds": + val = 0.5 + elif category == "shock_sds": + val = 0.4 + 0.1 * period + elif category == "initial_states": + val = 0.0 if name1 == "mixture_0" else 1.0 + val += 0.3 if name2 == "fac2" else 0.0 + elif category == "mixture_weights": + val = 0.4 if name1 == "mixture_0" else 0.6 + elif category == "initial_cholcovs": + a, b = name2.split("-") + val = (1.0 if name1 == "mixture_0" else 0.7) if a == b else 0.3 + elif category == "transition": + val = nonlinear if "*" in name2 else lin[name1][name2] * (1 + 0.1 * period) + else: + raise ValueError(category) + values.append(val) + params["value"] = values + return params + + +def _loglikeobs(model: ModelSpec, data: pd.DataFrame, nonlinear: float = 0.0): + inputs = get_maximization_inputs(model, data, chs_options=OPTIONS) + params = _params(inputs["params_template"], nonlinear=nonlinear) + return inputs["loglikeobs"](params) + + +def _monte_carlo_likelihood( + n_mixtures: int, n_draws: int, seed: int +) -> tuple[np.ndarray, np.ndarray]: + """Average the per-person likelihood over draws of the missing cells. + + Each draw fills every missing observed-factor cell with `N(m, v)` and runs the + ordinary filter (all observed factors present). The draws are stacked as + replicas of the panel so one likelihood evaluation covers all of them. + + Returns: + Per-person Monte-Carlo likelihood and its standard error. + + """ + rng = np.random.default_rng(seed) + base = _data().reset_index() + rep = pd.concat([base] * n_draws, ignore_index=True) + replica = np.repeat(np.arange(n_draws), len(base)) + rep["id"] = np.tile(base["id"].to_numpy(), n_draws) + N_PERSONS * replica + for ob, (mean_col, var_col) in MOMENTS.items(): + values = rep[ob].to_numpy(copy=True) + miss = np.isnan(values) + mean = rep[mean_col].to_numpy()[miss] + sd = np.sqrt(rep[var_col].to_numpy()[miss]) + values[miss] = rng.normal(mean, sd) + rep[ob] = values + rep = rep.set_index(["id", "period"]) + loglikes = _loglikeobs(_model(n_mixtures), rep).reshape(n_draws, N_PERSONS) + likes = np.exp(loglikes) + return likes.mean(axis=0), likes.std(axis=0, ddof=1) / np.sqrt(n_draws) + + +@pytest.fixture(scope="module", params=[1, 2], ids=["1mix", "2mix"]) +def mc_reference(request): + n_mixtures = request.param + mc_like, mc_se = _monte_carlo_likelihood(n_mixtures, n_draws=40_000, seed=7) + return n_mixtures, mc_like, mc_se + + +def test_linear_filter_likelihood_matches_monte_carlo_integral(mc_reference) -> None: + """The exact marginal likelihood equals the MC average of per-draw likelihoods.""" + n_mixtures, mc_like, mc_se = mc_reference + model = _model(n_mixtures, moments=MOMENTS) + exact = np.exp(_loglikeobs(model, _data())) + assert np.all(np.abs(exact - mc_like) <= 4 * mc_se + 1e-12 * mc_like) + + +def test_monte_carlo_reference_rejects_mean_imputation(mc_reference) -> None: + """Plugging in `m` without its variance is far outside the MC error band. + + This shows the MC comparison has power to detect a missing variance term. + """ + n_mixtures, mc_like, mc_se = mc_reference + data = _data() + for ob, (mean_col, _) in MOMENTS.items(): + data[ob] = data[ob].fillna(data[mean_col]) + naive = np.exp(_loglikeobs(_model(n_mixtures), data)) + affected = mc_se > 0 + assert np.all(np.abs(naive - mc_like)[affected] > 10 * mc_se[affected]) + + +@pytest.mark.parametrize("n_mixtures", [1, 2]) +def test_unscented_path_matches_linear_path_for_linear_translog(n_mixtures) -> None: + """A translog with all squares/interactions at 0 reproduces the linear filter.""" + data = _data() + linear = _loglikeobs(_model(n_mixtures, "linear", MOMENTS), data) + unscented = _loglikeobs(_model(n_mixtures, "translog", MOMENTS), data) + assert_allclose(unscented, linear, rtol=1e-10, atol=1e-10) + + +@pytest.mark.parametrize("transition", ["linear", "translog"]) +def test_declared_moments_without_missings_leave_loglike_unchanged( + transition, +) -> None: + """Declaring moments for fully observed factors does not change the filter.""" + data = _data(with_missings=False) + plain = _loglikeobs(_model(2, transition), data, nonlinear=0.05) + declared = _loglikeobs(_model(2, transition, MOMENTS), data, nonlinear=0.05) + assert np.array_equal(plain, declared) + + +@pytest.mark.parametrize("transition", ["linear", "translog"]) +def test_loglike_without_missings_matches_baseline(transition) -> None: + """Models with complete observed factors keep their pre-feature likelihood.""" + data = _data(with_missings=False) + loglike = _loglikeobs(_model(2, transition), data, nonlinear=0.05).sum() + assert_allclose(loglike, BASELINE_LOGLIKE[transition], rtol=1e-12) + + +def _endogenous_model(moments: dict | None) -> ModelSpec: + """Endogenous investment `inv` and state `s` share the observed inputs.""" + return ModelSpec( + factors={ + "s": FactorSpec( + measurements=(("y",), ("y",)), transition_function="linear" + ), + "inv": FactorSpec( + measurements=(("i",), ()), + is_endogenous=True, + transition_function="linear", + ), + }, + observed_factors=("x", "z"), + missing_observed_factor_moments=moments, + ) + + +def _endogenous_data(variance: float | None = None) -> pd.DataFrame: + idx = pd.MultiIndex.from_product([[0, 1], [0, 1]], names=["id", "period"]) + data = pd.DataFrame( + {"y": [-1.0, 0.0, 1.0, 2.0], "i": np.nan, "x": 0.0, "z": 0.0}, index=idx + ) + data[["m", "v"]] = 0.0 + if variance is not None: + data.loc[(0, 0), ["x", "v"]] = [np.nan, variance] + return data + + +def _endogenous_loglike(model: ModelSpec, data: pd.DataFrame) -> float: + inputs = get_maximization_inputs(model, data, chs_options=OPTIONS) + params = inputs["params_template"].copy() + params["value"] = np.where( + params.index.get_level_values("category").isin( + ["meas_sds", "shock_sds", "loadings"] + ), + 0.5, + 0.1, + ) + for idx in params.query("category == 'initial_cholcovs'").index: + row, col = idx[3].split("-") + params.loc[idx, "value"] = float(row == col) + return float(inputs["loglike"](params)) + + +@pytest.mark.parametrize( + "moments", + [ + {"x": ("m", "v"), "z": ("m", "v")}, + {"x": ("z", "v"), "z": ("m", "v")}, + ], + ids=["shared_pair", "moment_is_observed_factor"], +) +def test_moment_columns_shared_or_aliased_leave_loglike_unchanged(moments) -> None: + """Moment columns may be shared across factors or alias a selected column.""" + data = _endogenous_data() + plain = _endogenous_loglike(_endogenous_model(None), data) + declared = _endogenous_loglike(_endogenous_model(moments), data) + assert_allclose(declared, plain, rtol=0, atol=1e-12) + + +def test_endogenous_model_rejects_uncertain_missing_input() -> None: + """Both half-steps would need the input's joint posterior, which is not carried.""" + model = _endogenous_model({"x": ("m", "v")}) + with pytest.raises(NotImplementedError, match="joint missing-observed-factor"): + get_maximization_inputs(model, _endogenous_data(1.0), chs_options=OPTIONS) + + +def test_endogenous_model_plugs_in_zero_variance_fill() -> None: + """A zero-variance fill acts like observing the fill mean.""" + model = _endogenous_model({"x": ("m", "v")}) + filled = _endogenous_loglike(model, _endogenous_data(0.0)) + plugged_in = _endogenous_loglike(model, _endogenous_data()) + assert_allclose(filled, plugged_in, rtol=0, atol=1e-12) + + +def test_moments_where_factor_is_observed_are_ignored() -> None: + """Fill moments only matter in cells where the observed factor is missing.""" + data = _data() + garbled = data.copy() + for ob, (mean_col, var_col) in MOMENTS.items(): + observed = garbled[ob].notna() + garbled.loc[observed, mean_col] = np.nan + garbled.loc[observed, var_col] = -1.0 + model = _model(1, moments=MOMENTS) + assert np.array_equal(_loglikeobs(model, data), _loglikeobs(model, garbled)) + + +@pytest.mark.parametrize("bad_col", ["ob1_mean", "ob1_var"]) +def test_missing_factor_without_moments_raises(bad_col) -> None: + data = _data() + data.loc[(1, 1), bad_col] = np.nan + with pytest.raises(ValueError, match=r"ob1[\s\S]*fill moments") as excinfo: + get_maximization_inputs(_model(1, moments=MOMENTS), data, chs_options=OPTIONS) + assert "1" in str(excinfo.value) + + +def test_negative_fill_variance_raises() -> None: + data = _data() + data.loc[(1, 1), "ob1_var"] = -0.5 + with pytest.raises(ValueError, match=r"ob1[\s\S]*negative fill variance"): + get_maximization_inputs(_model(1, moments=MOMENTS), data, chs_options=OPTIONS) + + +def test_missing_moment_column_raises() -> None: + data = _data().drop(columns=["ob2_var"]) + with pytest.raises(ValueError, match=r"ob2_var[\s\S]*Variable is missing"): + get_maximization_inputs(_model(1, moments=MOMENTS), data, chs_options=OPTIONS) + + +def test_missing_factor_without_declared_moments_raises() -> None: + moments = {"ob1": MOMENTS["ob1"]} + with pytest.raises(ValueError, match=r"ob2[\s\S]*Variable has missings"): + get_maximization_inputs( + _model(1, moments=moments), _data(), chs_options=OPTIONS + ) + + +def test_model_spec_rejects_moments_for_unknown_observed_factor() -> None: + with pytest.raises(ValueError, match="not_an_observed_factor"): + _model(1, moments={"not_an_observed_factor": ("a", "b")}) + + +def test_model_spec_from_dict_reads_moments() -> None: + spec = ModelSpec.from_dict( + { + "factors": {"fac1": {"measurements": [["y1"], ["y1"]]}}, + "observed_factors": ["ob1"], + "missing_observed_factor_moments": {"ob1": ["ob1_mean", "ob1_var"]}, + } + ) + assert dict(spec.missing_observed_factor_moments) == { + "ob1": ("ob1_mean", "ob1_var") + } + + +def _predict_inputs(): + """Inputs for one predict step: 3 persons, 2 mixtures, 2 latent, 2 observed. + + Person 0 misses ob1, person 1 misses both, person 2 misses none. + """ + rng = np.random.default_rng(0) + n_obs, n_mix, n_lat = 3, 2, 2 + states = rng.normal(size=(n_obs, n_mix, n_lat)) + covs = np.empty((n_obs, n_mix, n_lat, n_lat)) + chols = np.empty_like(covs) + for i in range(n_obs): + for k in range(n_mix): + a = rng.normal(size=(n_lat, n_lat)) + covs[i, k] = a @ a.T + np.eye(n_lat) + chols[i, k] = np.linalg.cholesky(covs[i, k]).T + # Means are already substituted where the factor is missing. + observed = rng.normal(size=(n_obs, 2)) + # float32-representable variances with irrational roots. + obs_vars = np.array([[0.75, 0.0], [0.375, 1.25], [0.0, 0.0]]) + f_obs = np.array([[0.9, -0.6], [0.5, 0.8]]) + f_lat = np.array([[0.7, 0.2], [-0.3, 0.6]]) + const = np.array([0.1, -0.2]) + shock_sds = np.array([0.4, 0.3]) + scaling = np.array([[1.5, 0.8, 1.0, 1.0], [1.2, 0.9, 1.0, 1.0]]) + constants = np.array([[0.3, -0.1, 0.0, 0.0], [0.2, 0.4, 0.0, 0.0]]) + return { + "states": states, + "covs": covs, + "chols": chols, + "observed": observed, + "obs_vars": obs_vars, + "f_lat": f_lat, + "f_obs": f_obs, + "const": const, + "shock_sds": shock_sds, + "scaling": scaling, + "constants": constants, + } + + +def _analytic_prediction(inp): + """Predicted mean and covariance with `x ~ N(m, diag(v))` integrated out.""" + s_in, s_out = inp["scaling"][0, :2], inp["scaling"][1, :2] + c_in, c_out = inp["constants"][0, :2], inp["constants"][1, :2] + n_obs, n_mix, _ = inp["states"].shape + means = np.empty_like(inp["states"]) + covs = np.empty_like(inp["covs"]) + for i in range(n_obs): + for k in range(n_mix): + anchored = inp["states"][i, k] * s_in + c_in + pred = inp["f_lat"] @ anchored + inp["f_obs"] @ inp["observed"][i] + means[i, k] = (pred + inp["const"] - c_out) / s_out + g_mat = np.diag(1 / s_out) @ inp["f_lat"] @ np.diag(s_in) + b_mat = np.diag(1 / s_out) @ inp["f_obs"] + covs[i, k] = ( + g_mat @ inp["covs"][i, k] @ g_mat.T + + np.diag((inp["shock_sds"] / s_out) ** 2) + + b_mat @ np.diag(inp["obs_vars"][i]) @ b_mat.T + ) + return means, covs + + +def _linear_trans_coeffs(inp): + return { + f: jnp.array([*inp["f_lat"][j], *inp["f_obs"][j], inp["const"][j]]) + for j, f in enumerate(LATENT) + } + + +@pytest.mark.parametrize("variance_dtype", [jnp.float64, jnp.float32]) +def test_linear_predict_integrates_out_missing_observed_factors( + variance_dtype, +) -> None: + inp = _predict_inputs() + exp_means, exp_covs = _analytic_prediction(inp) + means, chols = linear_kalman_predict( + None, + jnp.array(inp["states"]), + jnp.array(inp["chols"]), + 1.0, + jnp.ones(1), + _linear_trans_coeffs(inp), + jnp.array(inp["shock_sds"]), + jnp.array(inp["scaling"]), + jnp.array(inp["constants"]), + jnp.array(inp["observed"]), + observed_factor_vars=jnp.array(inp["obs_vars"], dtype=variance_dtype), + latent_factors=LATENT, + constant_factor_indices=frozenset(), + n_all_factors=4, + missing_observed_indices=(0, 1), + ) + covs = np.einsum("nkja,nkjb->nkab", chols, chols) + assert_allclose(means, exp_means, rtol=1e-12) + assert_allclose(covs, exp_covs, rtol=1e-12) + + +def _linear_transition(params, states): + return jnp.column_stack([states @ params[f][:-1] + params[f][-1] for f in LATENT]) + + +@pytest.mark.parametrize("variance_dtype", [jnp.float64, jnp.float32]) +def test_unscented_predict_integrates_out_missing_observed_factors( + variance_dtype, +) -> None: + inp = _predict_inputs() + exp_means, exp_covs = _analytic_prediction(inp) + scaling_factor, weights = calculate_sigma_scaling_factor_and_weights(4, 2) + # The unscented predict adds shocks in the unanchored output scale. + shock_sds = inp["shock_sds"] / inp["scaling"][1, :2] + means, chols = kalman_predict( + _linear_transition, + jnp.array(inp["states"]), + jnp.array(inp["chols"]), + scaling_factor, + weights, + _linear_trans_coeffs(inp), + jnp.array(shock_sds), + jnp.array(inp["scaling"]), + jnp.array(inp["constants"]), + jnp.array(inp["observed"]), + observed_factor_vars=jnp.array(inp["obs_vars"], dtype=variance_dtype), + missing_observed_indices=(0, 1), + ) + covs = np.einsum("nkja,nkjb->nkab", chols, chols) + assert_allclose(means, exp_means, rtol=1e-10) + assert_allclose(covs, exp_covs, rtol=1e-10) + + +def _nonlinear_transition(params, states): + lat = states[:, :2] + out = _linear_transition(params, states) + return out + 0.2 * lat**2 - 0.1 * lat[:, ::-1] * states[:, 2:3] + + +def test_unscented_predict_augmented_by_observed_cells_equals_larger_kappa() -> None: + """With zero fill variance, the augmented sigma points act like `kappa + n_aug`. + + The latent marginal of the augmented sigma-point set is the plain set built + with `kappa` raised by the number of augmented dimensions. + """ + inp = _predict_inputs() + common = ( + _nonlinear_transition, + jnp.array(inp["states"]), + jnp.array(inp["chols"]), + ) + rest = ( + _linear_trans_coeffs(inp), + jnp.array(inp["shock_sds"]), + jnp.array(inp["scaling"]), + jnp.array(inp["constants"]), + jnp.array(inp["observed"]), + ) + aug_scaling, aug_weights = calculate_sigma_scaling_factor_and_weights(4, 2) + aug_means, aug_chols = kalman_predict( + *common, + aug_scaling, + aug_weights, + *rest, + observed_factor_vars=jnp.zeros((3, 2)), + missing_observed_indices=(0, 1), + ) + plain_scaling, plain_weights = calculate_sigma_scaling_factor_and_weights(2, 4) + plain_means, plain_chols = kalman_predict( + *common, plain_scaling, plain_weights, *rest + ) + aug_covs = np.einsum("nkja,nkjb->nkab", aug_chols, aug_chols) + plain_covs = np.einsum("nkja,nkjb->nkab", plain_chols, plain_chols) + assert_allclose(aug_means, plain_means, rtol=1e-12) + assert_allclose(aug_covs, plain_covs, rtol=1e-12) diff --git a/tests/test_model_spec.py b/tests/test_model_spec.py index dda3958d..97d34aa1 100644 --- a/tests/test_model_spec.py +++ b/tests/test_model_spec.py @@ -2,8 +2,13 @@ import pytest -from skillmodels.model_spec import AnchoringSpec, FactorSpec, ModelSpec, Normalizations -from skillmodels.types import EstimationOptions +from skillmodels.common.model_spec import ( + AnchoringSpec, + CorrectionSpec, + FactorSpec, + ModelSpec, + Normalizations, +) def _minimal_dict(): @@ -25,7 +30,6 @@ def test_from_dict_minimal() -> None: assert spec.factors["f1"].measurements == (("y1", "y2"), ("y1", "y2")) assert spec.factors["f1"].transition_function == "linear" assert spec.anchoring is None - assert spec.estimation_options is None assert spec.controls == () @@ -63,13 +67,11 @@ def test_from_dict_with_anchoring() -> None: assert spec.anchoring.free_controls is True -def test_from_dict_with_estimation_options() -> None: +def test_from_dict_with_n_mixtures() -> None: d = _minimal_dict() - d["estimation_options"] = {"n_mixtures": 2, "robust_bounds": False} + d["n_mixtures"] = 2 spec = ModelSpec.from_dict(d) - assert spec.estimation_options is not None - assert spec.estimation_options.n_mixtures == 2 - assert spec.estimation_options.robust_bounds is False + assert spec.n_mixtures == 2 def test_from_dict_with_stagemap() -> None: @@ -79,6 +81,107 @@ def test_from_dict_with_stagemap() -> None: assert spec.stagemap == (0,) +def test_correction_spec_defaults() -> None: + cf = CorrectionSpec(instruments=("z1",)) + assert cf.instruments == ("z1",) + assert cf.state_predictors == () + assert cf.targets == () + assert cf.kappa_degree is None # None resolves to degree 1 downstream + assert cf.kappa_terms is None + + +def test_correction_spec_requires_nonempty_instruments() -> None: + with pytest.raises(ValueError, match="instrument"): + CorrectionSpec(instruments=()) + + +def test_correction_spec_rejects_both_kappa_degree_and_kappa_terms() -> None: + with pytest.raises(ValueError, match="mutually exclusive"): + CorrectionSpec( + instruments=("z1",), + kappa_degree=2, + kappa_terms={"health_mom": ("cf",)}, + ) + + +def test_correction_spec_stores_fields_and_makes_kappa_terms_immutable() -> None: + cf = CorrectionSpec( + instruments=("sum_inv_paid_log", "sum_inv_private_log"), + state_predictors=("health_mom", "health_kid"), + targets=("health_mom", "health_kid"), + kappa_terms={"health_mom": ("cf",), "health_kid": ("cf", "cf ** 2")}, + ) + assert cf.state_predictors == ("health_mom", "health_kid") + assert cf.instruments == ("sum_inv_paid_log", "sum_inv_private_log") + assert cf.targets == ("health_mom", "health_kid") + assert cf.kappa_terms is not None + assert cf.kappa_terms["health_kid"] == ("cf", "cf ** 2") + # kappa_terms must be converted to an immutable mapping. + with pytest.raises(TypeError): + cf.kappa_terms["health_mom"] = ("cf", "cf ** 2") # ty: ignore[invalid-assignment] + + +def test_correction_spec_is_frozen() -> None: + cf = CorrectionSpec(instruments=("z1",)) + with pytest.raises(AttributeError): + cf.targets = ("health_mom",) # ty: ignore[invalid-assignment] + + +def test_factor_spec_correction_defaults_to_none() -> None: + spec = FactorSpec(measurements=(("y1",),)) + assert spec.correction is None + + +def test_factor_spec_accepts_correction() -> None: + cf = CorrectionSpec( + instruments=("z1",), + targets=("health_mom",), + ) + spec = FactorSpec( + measurements=(("ln_inv",),), + is_endogenous=True, + correction=cf, + ) + assert spec.correction is cf + + +def test_from_dict_with_correction_parses_and_auto_registers_instruments() -> None: + d = { + "factors": { + "skills": {"measurements": [["y1"]], "transition_function": "linear"}, + "investment": { + "measurements": [["ln_inv"]], + "is_endogenous": True, + "transition_function": "linear", + "correction": {"instruments": ["iv1", "iv2"], "kappa_degree": 2}, + }, + }, + } + model = ModelSpec.from_dict(d) + corr = model.factors["investment"].correction + assert corr is not None + assert corr.instruments == ("iv1", "iv2") + assert corr.kappa_degree == 2 + # Instruments are auto-registered as observed factors. + assert model.observed_factors == ("iv1", "iv2") + + +def test_with_correction_attaches_and_auto_registers_instruments() -> None: + plain = FactorSpec(measurements=(("y1",),)) + inv = FactorSpec(measurements=(("ln_inv",),), is_endogenous=True) + model = ModelSpec( + factors={"skills": plain, "investment": inv}, + observed_factors=("income",), + ) + cf = CorrectionSpec(instruments=("income", "iv2")) + + result = model.with_correction("investment", cf) + + assert result.factors["investment"].correction is cf + # Instruments are auto-registered as observed factors, deduped against existing. + assert result.observed_factors == ("income", "iv2") + + def test_with_added_factor(model2) -> None: new_factor = FactorSpec( measurements=(("z1", "z2"),) * 8, @@ -94,13 +197,6 @@ def test_with_added_observed_factors(model2) -> None: assert result.observed_factors == ("obs1", "obs2") -def test_with_estimation_options(model2) -> None: - opts = EstimationOptions(n_mixtures=3) - result = model2.with_estimation_options(opts) - assert result.estimation_options is not None - assert result.estimation_options.n_mixtures == 3 - - def test_with_anchoring(model2) -> None: anch = AnchoringSpec(outcomes={"fac2": "Q2"}) result = model2.with_anchoring(anch) @@ -118,6 +214,23 @@ def test_with_stagemap(model2) -> None: assert result.stagemap == (0, 1, 2, 3, 4, 5, 6) +def test_without_correction_strips_correction_from_all_factors() -> None: + corrected = FactorSpec( + measurements=(("ln_inv",),), + is_endogenous=True, + correction=CorrectionSpec(instruments=("z1",), targets=("skills",)), + ) + plain = FactorSpec(measurements=(("y1",),)) + model = ModelSpec(factors={"skills": plain, "investment": corrected}) + + stripped = model.without_correction() + + assert all(f.correction is None for f in stripped.factors.values()) + # The rest of the spec is preserved. + assert stripped.factors["investment"].is_endogenous is True + assert tuple(stripped.factors) == ("skills", "investment") + + def test_with_transition_functions_valid(model2) -> None: funcs = {"fac1": "linear", "fac2": "translog", "fac3": "constant"} result = model2.with_transition_functions(funcs) diff --git a/tests/test_params_index.py b/tests/test_params_index.py index 9a3fc6c0..370b7550 100644 --- a/tests/test_params_index.py +++ b/tests/test_params_index.py @@ -1,12 +1,14 @@ """Tests for params index.""" +from dataclasses import replace from types import MappingProxyType import pandas as pd import pytest -from skillmodels.config import TEST_DATA_DIR -from skillmodels.params_index import ( +from skillmodels.common.config import TEST_DATA_DIR +from skillmodels.common.model_spec import CorrectionSpec +from skillmodels.common.params_index import ( get_control_params_index_tuples, get_initial_cholcovs_index_tuples, get_loadings_index_tuples, @@ -17,9 +19,73 @@ get_transition_index_tuples, initial_mean_index_tuples, ) -from skillmodels.process_model import process_model +from skillmodels.common.process_model import process_model +from skillmodels.common.types import TransitionInfo from skillmodels.test_data.model2 import MODEL2 -from skillmodels.types import TransitionInfo + + +def _corr_model_processed(): + """Process MODEL2 with fac3 endogenous + a control-function correction.""" + fac3 = MODEL2.factors["fac3"] + corr = CorrectionSpec(instruments=("inv_z",)) + new_fac3 = replace(fac3, is_endogenous=True, correction=corr) + new_factors = dict(MODEL2.factors) | {"fac3": new_fac3} + model = MODEL2._replace(factors=new_factors)._replace(stagemap=None) + model = model._replace(observed_factors=("inv_z",)) + return process_model(model) + + +def test_params_index_includes_investment_eq_rows() -> None: + processed = _corr_model_processed() + index = get_params_index( + update_info=processed.update_info, + labels=processed.labels, + dimensions=processed.dimensions, + transition_info=processed.transition_info, + endogenous_factors_info=processed.endogenous_factors_info, + ) + df = index.to_frame(index=False) + inv_eq = df[df["category"] == "investment_eq"] + expected_periods = list(processed.labels.aug_periods[:-2]) + + # name1 is always the investment factor. + assert set(inv_eq["name1"]) == {"fac3"} + # Predictors = state_predictors (fac1, fac2) + instruments (inv_z) + constant. + assert set(inv_eq["name2"]) == {"fac1", "fac2", "inv_z", "constant"} + # Rows live on aug_periods[:-2] only (endogenous truncation). + assert sorted(inv_eq["aug_period"].unique()) == expected_periods + assert len(inv_eq) == len(expected_periods) * 4 + # SD(eta_I) is NOT a free parameter in the CHS path (the contemporaneous + # first-stage residual variance is implied by the state covariance). + assert "investment_sds" not in set(df["category"]) + + +def test_params_index_includes_kappa_rows() -> None: + processed = _corr_model_processed() + index = get_params_index( + update_info=processed.update_info, + labels=processed.labels, + dimensions=processed.dimensions, + transition_info=processed.transition_info, + endogenous_factors_info=processed.endogenous_factors_info, + ) + df = index.to_frame(index=False) + kappa = df[df["category"] == "kappa"] + expected_periods = list(processed.labels.aug_periods[:-2]) + + # Targets default to the state factors fac1, fac2; default kappa term is "cf". + assert set(kappa["name1"]) == {"fac1", "fac2"} + assert set(kappa["name2"]) == {"cf"} + assert sorted(kappa["aug_period"].unique()) == expected_periods + # one ("kappa", period, target, "cf") row per (period, target) + assert len(kappa) == len(expected_periods) * 2 + + +def test_params_index_no_investment_rows_without_correction(model2_inputs) -> None: + index = get_params_index(**model2_inputs) + cats = set(index.get_level_values("category")) + assert "investment_eq" not in cats + assert "kappa" not in cats @pytest.fixture diff --git a/tests/test_parse_params.py b/tests/test_parse_params.py index 07272511..2d687194 100644 --- a/tests/test_parse_params.py +++ b/tests/test_parse_params.py @@ -6,6 +6,7 @@ """ from collections.abc import Mapping +from dataclasses import replace from types import MappingProxyType import jax.numpy as jnp @@ -14,11 +15,60 @@ import pytest from numpy.testing import assert_array_equal as aae -from skillmodels.config import TEST_DATA_DIR -from skillmodels.parse_params import create_parsing_info, parse_params -from skillmodels.process_model import process_model +from skillmodels.common.config import TEST_DATA_DIR +from skillmodels.common.model_spec import CorrectionSpec +from skillmodels.common.params_index import get_params_index +from skillmodels.common.parse_params import create_parsing_info, parse_params +from skillmodels.common.process_model import process_model +from skillmodels.common.types import Anchoring from skillmodels.test_data.model2 import MODEL2 -from skillmodels.types import Anchoring + + +def test_parse_params_populates_first_stage_reserved_key() -> None: + """The first-stage betas parse into a reserved trans_coeffs key. + + The contemporaneous first-stage equation's coefficients live under the + `investment_eq` params category but are threaded into the transition-coeffs + dict under a reserved `__first_stage___` key, so the prediction DAG + node reads them with no change to the predict signature. + """ + fac3 = MODEL2.factors["fac3"] + corr = CorrectionSpec(instruments=("inv_z",)) + new_fac3 = replace(fac3, is_endogenous=True, correction=corr) + new_factors = dict(MODEL2.factors) | {"fac3": new_fac3} + model = MODEL2._replace(factors=new_factors)._replace(stagemap=None) + model = model._replace(observed_factors=("inv_z",)) + processed = process_model(model) + + p_index = get_params_index( + update_info=processed.update_info, + labels=processed.labels, + dimensions=processed.dimensions, + transition_info=processed.transition_info, + endogenous_factors_info=processed.endogenous_factors_info, + ) + parsing_info = create_parsing_info( + params_index=p_index, + update_info=processed.update_info, + labels=processed.labels, + anchoring=processed.anchoring, + has_endogenous_factors=True, + ) + assert parsing_info.investment_factor == "fac3" + + params_vec = jnp.arange(len(p_index)).astype(float) + _, _, _, parsed = parse_params( + params_vec, parsing_info, processed.dimensions, processed.labels, n_obs=5 + ) + reserved = "__first_stage_fac3__" + assert reserved in parsed.transition + n_aug = len(processed.labels.aug_periods) + # (aug_periods[:-2], state_predictors + instruments + constant) = (14, 4). + assert parsed.transition[reserved].shape == (n_aug - 2, 4) + # kappa reserved keys, one per target, with one cf column each. + assert "__kappa_fac1__" in parsed.transition + assert "__kappa_fac2__" in parsed.transition + assert parsed.transition["__kappa_fac1__"].shape == (n_aug - 2, 1) @pytest.fixture diff --git a/tests/test_process_data.py b/tests/test_process_data.py index ec2fce30..f5c5b93a 100644 --- a/tests/test_process_data.py +++ b/tests/test_process_data.py @@ -10,8 +10,8 @@ import pytest from numpy.testing import assert_array_equal as aae -from skillmodels.config import TEST_DATA_DIR -from skillmodels.process_data import ( +from skillmodels.common.config import TEST_DATA_DIR +from skillmodels.common.process_data import ( _augment_data_for_endogenous_factors, _generate_controls_array, _generate_measurements_array, @@ -19,9 +19,9 @@ _handle_controls_with_missings, pre_process_data, ) -from skillmodels.process_model import process_model +from skillmodels.common.process_model import process_model +from skillmodels.common.types import Labels from skillmodels.test_data.simplest_augmented_model import SIMPLEST_AUGMENTED_MODEL -from skillmodels.types import Labels def test_pre_process_data() -> None: diff --git a/tests/test_process_debug_data.py b/tests/test_process_debug_data.py index 4b69e118..eea1c593 100644 --- a/tests/test_process_debug_data.py +++ b/tests/test_process_debug_data.py @@ -4,11 +4,11 @@ import pandas as pd import pytest -from skillmodels.process_debug_data import ( +from skillmodels.chs.process_debug_data import ( _create_post_update_states, _process_residuals, - create_state_ranges, ) +from skillmodels.common.state_ranges import create_state_ranges def test_create_state_ranges_invalid_quantile_raises() -> None: @@ -26,7 +26,7 @@ def test_process_residuals_ids_with_mixtures() -> None: index=pd.MultiIndex.from_tuples([(0, "m1"), (0, "m2")]), ) - result = _process_residuals(residuals=residuals, update_info=update_info) # ty: ignore[invalid-argument-type] + result = _process_residuals(residuals=residuals, update_info=update_info) # For each update, ids should be [0, 0, 1, 1, 2, 2] not [0, 1, 2, 3, 4, 5] for _, group in result.groupby(["aug_period", "measurement"]): @@ -49,7 +49,7 @@ def test_create_post_update_states_ids_with_mixtures() -> None: ) result = _create_post_update_states( - filtered_states=filtered_states, # ty: ignore[invalid-argument-type] + filtered_states=filtered_states, factors=factors, update_info=update_info, ) diff --git a/tests/test_process_model.py b/tests/test_process_model.py index 3b9a03e3..04adf0ce 100644 --- a/tests/test_process_model.py +++ b/tests/test_process_model.py @@ -3,16 +3,24 @@ import inspect from dataclasses import replace -import numpy as np import pandas as pd import pytest from pandas.testing import assert_frame_equal -from skillmodels.config import TEST_DATA_DIR -from skillmodels.model_spec import FactorSpec -from skillmodels.process_model import get_has_endogenous_factors, process_model +from skillmodels.common.config import TEST_DATA_DIR +from skillmodels.common.control_function import generate_kappa_terms +from skillmodels.common.model_spec import CorrectionSpec, FactorSpec, ModelSpec +from skillmodels.common.process_model import ( + _resolve_control_function, + get_has_endogenous_factors, + process_model, +) +from skillmodels.common.types import ( + ControlFunctionInfo, + Normalizations, + TransitionInfo, +) from skillmodels.test_data.model2 import MODEL2 -from skillmodels.types import Normalizations, TransitionInfo @pytest.fixture @@ -45,13 +53,6 @@ def test_labels(model2) -> None: assert res.stages == (0,) -def test_estimation_options(model2) -> None: - res = process_model(model2).estimation_options - assert res.sigma_points_scale == 2 - assert res.robust_bounds - assert np.isclose(res.bounds_distance, 0.001) - - def test_anchoring(model2) -> None: res = process_model(model2).anchoring assert res.outcomes == {"fac1": "Q1"} @@ -201,13 +202,6 @@ def test_with_endog_labels(model2_inv) -> None: assert res.aug_stages == tuple(range(n_aug_periods - 2)) -def test_with_endog_estimation_options(model2_inv) -> None: - res = process_model(model2_inv).estimation_options - assert res.sigma_points_scale == 2 - assert res.robust_bounds - assert np.isclose(res.bounds_distance, 0.001) - - def test_with_endog_anchoring_is_empty(model2_inv) -> None: res = process_model(model2_inv).anchoring assert res.outcomes == {} @@ -317,24 +311,231 @@ def test_model_has_endogenous_factors_not_specified() -> None: assert not get_has_endogenous_factors(factors) -def test_get_has_endogenous_factors_wrong_constellation() -> None: - factors = {"a": _fspec(is_endogenous=False, is_correction=True)} - with pytest.raises(ValueError, match="is_endogenous"): - get_has_endogenous_factors(factors) - - def test_get_has_endogenous_factors_indeed() -> None: factors = { - "a": _fspec(is_endogenous=True, is_correction=False), - "b": _fspec(is_endogenous=False, is_correction=False), + "a": _fspec(is_endogenous=True), + "b": _fspec(is_endogenous=False), } assert get_has_endogenous_factors(factors) -def test_get_has_endogenous_factors_and_correction() -> None: +def _corr_model(correction: CorrectionSpec) -> ModelSpec: + """Two state factors + one endogenous investment factor carrying a correction.""" factors = { - "a": _fspec(is_endogenous=True, is_correction=False), - "b": _fspec(is_endogenous=False, is_correction=False), - "c": _fspec(is_endogenous=True, is_correction=True), + "health_mom": _fspec(transition_function="linear"), + "health_kid": _fspec(transition_function="linear"), + "ln_inv": _fspec( + is_endogenous=True, + transition_function="linear", + correction=correction, + ), } - assert get_has_endogenous_factors(factors) + return ModelSpec( + factors=factors, + observed_factors=("sum_inv_paid_log", "sum_inv_private_log"), + ) + + +def test_resolve_control_function_returns_none_without_correction() -> None: + model = ModelSpec(factors={"a": _fspec(transition_function="linear")}) + assert _resolve_control_function(model) is None + + +def test_resolve_control_function_resolves_defaults() -> None: + model = _corr_model( + CorrectionSpec(instruments=("sum_inv_paid_log", "sum_inv_private_log")) + ) + info = _resolve_control_function(model) + assert isinstance(info, ControlFunctionInfo) + assert info.investment_factor == "ln_inv" + # Empty predictors/targets default to all state factors. + assert info.state_predictors == ("health_mom", "health_kid") + assert info.targets == ("health_mom", "health_kid") + assert info.instruments == ("sum_inv_paid_log", "sum_inv_private_log") + # Each target with no explicit kappa_terms defaults to ("cf",). + assert info.kappa_terms["health_mom"] == ("cf",) + assert info.kappa_terms["health_kid"] == ("cf",) + + +def test_resolve_control_function_expands_kappa_degree() -> None: + model = _corr_model( + CorrectionSpec(instruments=("sum_inv_paid_log",), kappa_degree=2) + ) + info = _resolve_control_function(model) + assert info is not None + expected = generate_kappa_terms(("health_mom", "health_kid"), max_degree=2) + assert "cf ** 2" in expected + assert info.kappa_terms["health_mom"] == expected + assert info.kappa_terms["health_kid"] == expected + + +def test_resolve_control_function_preserves_explicit_fields() -> None: + model = _corr_model( + CorrectionSpec( + state_predictors=("health_mom",), + instruments=("sum_inv_paid_log",), + targets=("health_kid",), + kappa_terms={"health_kid": ("cf", "cf ** 2")}, + ) + ) + info = _resolve_control_function(model) + assert info is not None + assert info.state_predictors == ("health_mom",) + assert info.targets == ("health_kid",) + assert info.kappa_terms["health_kid"] == ("cf", "cf ** 2") + # Targets not listed get no kappa block. + assert "health_mom" not in info.kappa_terms + + +def test_resolve_control_function_rejects_multiple_investment_factors() -> None: + cf = CorrectionSpec(instruments=("sum_inv_paid_log",)) + factors = { + "health_mom": _fspec(transition_function="linear"), + "ln_inv_a": _fspec( + is_endogenous=True, transition_function="linear", correction=cf + ), + "ln_inv_b": _fspec( + is_endogenous=True, transition_function="linear", correction=cf + ), + } + model = ModelSpec(factors=factors, observed_factors=("sum_inv_paid_log",)) + with pytest.raises(NotImplementedError, match="one investment factor"): + _resolve_control_function(model) + + +def test_process_model_wires_control_function_through_augmentation() -> None: + """The resolved control function must survive endogenous-period augmentation. + + Regression: `_augment_periods_for_endogenous_factors` rebuilds each + `FactorSpec` and previously omitted `correction`, silently resetting it to + `None`. Because augmentation runs exactly when endogenous factors exist (the + only case that can carry a correction), `control_function` was always `None` + in the real `process_model` pipeline. The resolver unit tests missed it by + calling `_resolve_control_function` on the un-augmented spec directly. + """ + fac3 = MODEL2.factors["fac3"] + corr = CorrectionSpec(instruments=("inv_z",)) + new_fac3 = replace(fac3, is_endogenous=True, correction=corr) + new_factors = dict(MODEL2.factors) | {"fac3": new_fac3} + model = MODEL2._replace(factors=new_factors)._replace(stagemap=None) + # The instrument must be a declared observed factor (the prediction node + # resolves its position in all_factors). + model = model._replace(observed_factors=("inv_z",)) + + processed = process_model(model) + cf_info = processed.endogenous_factors_info.control_function + assert isinstance(cf_info, ControlFunctionInfo) + assert cf_info.investment_factor == "fac3" + assert cf_info.instruments == ("inv_z",) + # The endogenous investment is not a predictor/target of itself; the state + # factors fac1/fac2 are the defaults. + assert "fac3" not in cf_info.targets + assert set(cf_info.targets) == {"fac1", "fac2"} + assert set(cf_info.state_predictors) == {"fac1", "fac2"} + + +def test_resolve_control_function_rejects_model_with_no_state_factors() -> None: + cf = CorrectionSpec(instruments=("z1",)) + factors = { + "ln_inv": _fspec( + is_endogenous=True, transition_function="linear", correction=cf + ), + "other_inv": _fspec(is_endogenous=True, transition_function="linear"), + } + model = ModelSpec(factors=factors, observed_factors=("z1",)) + with pytest.raises(ValueError, match="no state factors"): + _resolve_control_function(model) + + +def test_resolve_control_function_rejects_instrument_in_custom_production() -> None: + from skillmodels.common.decorators import register_params # noqa: PLC0415 + + @register_params(params=["constant", "health_mom", "sum_inv_paid_log"]) + def f_leaky(health_mom: object, sum_inv_paid_log: object, params: dict) -> object: + return ( + params["constant"] + + params["health_mom"] * health_mom + + params["sum_inv_paid_log"] * sum_inv_paid_log + ) + + factors = { + "health_mom": _fspec(transition_function=f_leaky), + "health_kid": _fspec(transition_function="linear"), + "ln_inv": _fspec( + is_endogenous=True, + transition_function="linear", + correction=CorrectionSpec(instruments=("sum_inv_paid_log",)), + ), + } + model = ModelSpec(factors=factors, observed_factors=("sum_inv_paid_log",)) + with pytest.raises(ValueError, match="instrument"): + _resolve_control_function(model) + + +def test_resolve_control_function_rejects_instrument_not_observed() -> None: + factors = { + "health_mom": _fspec(transition_function="linear"), + "ln_inv": _fspec( + is_endogenous=True, + transition_function="linear", + correction=CorrectionSpec(instruments=("not_observed",)), + ), + } + model = ModelSpec(factors=factors, observed_factors=("sum_inv_paid_log",)) + with pytest.raises(ValueError, match="observed"): + _resolve_control_function(model) + + +def test_resolve_control_function_rejects_correction_on_non_endogenous() -> None: + factors = { + "health_mom": _fspec(transition_function="linear"), + "ln_inv": _fspec( + is_endogenous=False, + transition_function="linear", + correction=CorrectionSpec(instruments=("sum_inv_paid_log",)), + ), + } + model = ModelSpec(factors=factors, observed_factors=("sum_inv_paid_log",)) + with pytest.raises(ValueError, match="endogenous"): + _resolve_control_function(model) + + +def test_augmented_factor_spec_forwards_optional_flags() -> None: + """Augmentation must propagate every `FactorSpec` flag, not just the obvious ones. + + Regression: the augmented `FactorSpec` constructor previously omitted + `has_production_shock` and `has_initial_distribution`, both of which + default to `True`. Any model that set either flag to `False` saw the + flag silently reset to `True` once endogenous-period augmentation ran, + producing a different model than the user specified. + """ + from skillmodels.common.process_model import ( # noqa: PLC0415 + _augment_periods_for_endogenous_factors, + _get_labels, + get_dimensions, + ) + + fac3 = MODEL2.factors["fac3"] + corr = CorrectionSpec(instruments=("inv_z",)) + custom_fac3 = replace( + fac3, + is_endogenous=True, + has_production_shock=False, + has_initial_distribution=False, + correction=corr, + ) + new_factors = dict(MODEL2.factors) | {"fac3": custom_fac3} + model = MODEL2._replace(factors=new_factors)._replace(stagemap=None) + + dims = get_dimensions(model_spec=model, has_endogenous_factors=True) + labels = _get_labels(model_spec=model, has_endogenous_factors=True, dimensions=dims) + aug_spec = _augment_periods_for_endogenous_factors( + model_spec=model, dimensions=dims, labels=labels + ) + aug_fac3 = aug_spec.factors["fac3"] + assert aug_fac3.has_production_shock is False + assert aug_fac3.has_initial_distribution is False + # Sanity: the explicitly-set is_endogenous survives too. + assert aug_fac3.is_endogenous is True + # The control-function correction must survive augmentation too. + assert aug_fac3.correction is corr diff --git a/tests/test_qr.py b/tests/test_qr.py index b6f74532..387702c3 100644 --- a/tests/test_qr.py +++ b/tests/test_qr.py @@ -7,7 +7,7 @@ from numpy.testing import assert_array_almost_equal as aaae from numpy.typing import NDArray -from skillmodels.qr import qr_gpu +from skillmodels.chs.qr import qr_gpu SEED = 20 diff --git a/tests/test_selector.py b/tests/test_selector.py new file mode 100644 index 00000000..bd670193 --- /dev/null +++ b/tests/test_selector.py @@ -0,0 +1,252 @@ +"""Tests for `skillmodels.common.selector` and the projection helper. + +`select_by_loc`, `align_index_names`, `collect_fixed_locs`, and +`project_to_probability_constraints` are the small, pure helpers that +glue user-supplied `fixed_params` / `start_params` to optimagic's +constraint pipeline. Each helper has a specific shape contract that +matters in only one or two call sites; these tests pin those +contracts so future refactors don't silently reintroduce the bugs +they were written to fix. +""" + +import functools + +import numpy as np +import optimagic as om +import pandas as pd +import pytest + +from skillmodels.common.constraints import ( + FixedConstraintWithValue, + collect_fixed_locs, + project_to_probability_constraints, +) +from skillmodels.common.selector import align_index_names, select_by_loc + +# --- select_by_loc --------------------------------------------------------- + + +def _params_with_bounds() -> pd.DataFrame: + idx = pd.MultiIndex.from_tuples( + [ + ("loadings", 0, "m1", "fac1"), + ("loadings", 0, "m2", "fac1"), + ("loadings", 0, "m3", "fac1"), + ], + names=["category", "period", "name1", "name2"], + ) + return pd.DataFrame( + { + "value": [1.0, 2.0, 3.0], + "lower_bound": [-np.inf, 0.1, -np.inf], + "upper_bound": [np.inf, np.inf, np.inf], + }, + index=idx, + ) + + +def test_select_by_loc_single_tuple_returns_scalar_value() -> None: + """A single-tuple `loc` must return just the value, not the row Series. + + `params.loc[single_tuple]` gives a row Series indexed by column + names; if optimagic's pytree walk sees it, the `±inf` bounds get + cast to int64 sentinels and `_fail_if_duplicates` raises + `IndexError`. The projection to the `value` cell prevents that. + """ + params = _params_with_bounds() + out = select_by_loc(params, ("loadings", 0, "m1", "fac1")) + assert out == pytest.approx(1.0) + assert not isinstance(out, pd.Series) + + +def test_select_by_loc_list_of_tuples_returns_value_series() -> None: + """A list-of-tuples `loc` projects the result DataFrame to the value column.""" + params = _params_with_bounds() + locs = [ + ("loadings", 0, "m1", "fac1"), + ("loadings", 0, "m2", "fac1"), + ] + out = select_by_loc(params, locs) + assert isinstance(out, pd.Series) + assert out.tolist() == [1.0, 2.0] + assert "lower_bound" not in (getattr(out, "name", None) or "") + + +def test_select_by_loc_no_value_column_returns_unchanged() -> None: + """When the params frame has no `value` column, no projection happens.""" + idx = pd.MultiIndex.from_tuples( + [("loadings", 0, "m1", "fac1")], + names=["category", "period", "name1", "name2"], + ) + params = pd.DataFrame({"other": [9.0]}, index=idx) + out = select_by_loc(params, ("loadings", 0, "m1", "fac1")) + assert "other" in out.index + assert out["other"] == pytest.approx(9.0) + + +# --- align_index_names ----------------------------------------------------- + + +def test_align_index_names_renames_period_to_aug_period() -> None: + """Renaming preserves the underlying tuples bit-for-bit.""" + idx = pd.MultiIndex.from_tuples( + [("loadings", 1, "m1", "fac1")], + names=["category", "period", "name1", "name2"], + ) + df = pd.DataFrame({"value": [0.7]}, index=idx) + out = align_index_names( + df, target_names=["category", "aug_period", "name1", "name2"] + ) + assert list(out.index.names) == ["category", "aug_period", "name1", "name2"] + assert list(out.index[0]) == ["loadings", 1, "m1", "fac1"] + assert out.loc[("loadings", 1, "m1", "fac1"), "value"] == pytest.approx(0.7) + + +def test_align_index_names_passes_through_when_already_matching() -> None: + """When the names already match, `align_index_names` returns the input as-is.""" + idx = pd.MultiIndex.from_tuples( + [("loadings", 0, "m1", "fac1")], + names=["category", "aug_period", "name1", "name2"], + ) + df = pd.DataFrame({"value": [0.5]}, index=idx) + out = align_index_names( + df, target_names=["category", "aug_period", "name1", "name2"] + ) + assert out is df + + +# --- collect_fixed_locs ---------------------------------------------------- + + +def test_collect_fixed_locs_unpacks_single_tuple() -> None: + constraints = [ + FixedConstraintWithValue(loc=("loadings", 0, "m1", "fac1"), value=1.0), + ] + out = collect_fixed_locs(constraints) + assert out == {("loadings", 0, "m1", "fac1")} + + +def test_collect_fixed_locs_unpacks_tuple_of_tuples() -> None: + """Anchoring constraints pack many locs into a single `tuple(loc_tuples)`.""" + inner = ( + ("controls", 0, "Q1_fac1", "constant"), + ("controls", 1, "Q1_fac1", "constant"), + ) + constraints = [FixedConstraintWithValue(loc=inner, value=0.0)] + out = collect_fixed_locs(constraints) + assert out == set(inner) + + +def test_collect_fixed_locs_unpacks_pd_multiindex() -> None: + """`FixedConstraintWithValue.loc` permits `pd.MultiIndex` per its annotation.""" + mi = pd.MultiIndex.from_tuples( + [ + ("loadings", 0, "m1", "fac1"), + ("loadings", 1, "m1", "fac1"), + ], + names=["category", "period", "name1", "name2"], + ) + constraints = [FixedConstraintWithValue(loc=mi, value=1.0)] + out = collect_fixed_locs(constraints) + assert out == { + ("loadings", 0, "m1", "fac1"), + ("loadings", 1, "m1", "fac1"), + } + + +def test_collect_fixed_locs_skips_non_fixed_constraints() -> None: + """Equality / probability constraints don't carry parameter values.""" + eq = om.EqualityConstraint( + selector=functools.partial(select_by_loc, loc=("transition", 0, "a", "b")), + ) + out = collect_fixed_locs([eq]) + assert out == set() + + +# --- project_to_probability_constraints ------------------------------------ + + +def _gamma_constraint(period: int) -> om.ProbabilityConstraint: + locs = [ + ("transition", period, "skills", "skills"), + ("transition", period, "skills", "MC"), + ("transition", period, "skills", "investment"), + ] + return om.ProbabilityConstraint( + selector=functools.partial(select_by_loc, loc=locs), + ) + + +def _three_gamma_template(period: int = 0, values=(0.5, 0.5, 0.5)) -> pd.DataFrame: + idx = pd.MultiIndex.from_tuples( + [ + ("transition", period, "skills", "skills"), + ("transition", period, "skills", "MC"), + ("transition", period, "skills", "investment"), + ], + names=["category", "period", "name1", "name2"], + ) + return pd.DataFrame({"value": list(values)}, index=idx) + + +def test_project_renormalises_free_entries_to_one_when_none_pinned() -> None: + template = _three_gamma_template(values=(0.5, 0.5, 0.5)) + out = project_to_probability_constraints( + params_template=template, constraints=[_gamma_constraint(period=0)] + ) + assert out["value"].tolist() == pytest.approx([1.0 / 3, 1.0 / 3, 1.0 / 3]) + + +def test_project_leaves_pinned_entries_alone_and_rescales_free() -> None: + """Partial-pin path: pinned entries stay, free entries sum to 1 - pinned_total.""" + template = _three_gamma_template(values=(0.7, 0.0, 0.7)) + pinned_loc = ("transition", 0, "skills", "MC") + constraints = [ + _gamma_constraint(period=0), + FixedConstraintWithValue(loc=pinned_loc, value=0.0), + ] + # Caller (`enforce_fixed_constraints`) is what writes 0.0 into the + # template at the pinned cell; the projection should preserve it. + out = project_to_probability_constraints( + params_template=template, constraints=constraints + ) + assert out.loc[pinned_loc, "value"] == pytest.approx(0.0) + free = out["value"].drop(index=pinned_loc) + assert float(free.sum()) == pytest.approx(1.0) + # Free entries were both 0.7; they should be rescaled by 1 / 1.4 = 5/7. + assert free.iloc[0] == pytest.approx(0.5) + assert free.iloc[1] == pytest.approx(0.5) + + +def test_project_respects_non_zero_pinned_value() -> None: + """When a gamma is pinned to a value in (0, 1), free entries fill the residual.""" + template = _three_gamma_template(values=(0.5, 0.2, 0.5)) + pinned_loc = ("transition", 0, "skills", "MC") + constraints = [ + _gamma_constraint(period=0), + FixedConstraintWithValue(loc=pinned_loc, value=0.2), + ] + out = project_to_probability_constraints( + params_template=template, constraints=constraints + ) + assert out.loc[pinned_loc, "value"] == pytest.approx(0.2) + free = out["value"].drop(index=pinned_loc) + assert float(free.sum()) == pytest.approx(0.8) + + +def test_project_skips_when_already_on_simplex() -> None: + template = _three_gamma_template(values=(0.2, 0.3, 0.5)) + out = project_to_probability_constraints( + params_template=template, constraints=[_gamma_constraint(period=0)] + ) + # No mutation; same DataFrame object returned. + assert out is template + + +def test_project_skips_when_free_entries_are_zero() -> None: + """Degenerate case: all-zero free entries. Caller has to fix it.""" + template = _three_gamma_template(values=(0.0, 0.0, 0.0)) + out = project_to_probability_constraints( + params_template=template, constraints=[_gamma_constraint(period=0)] + ) + assert out["value"].tolist() == [0.0, 0.0, 0.0] diff --git a/tests/test_simulate_data.py b/tests/test_simulate_data.py index 782367e7..b6f84b02 100644 --- a/tests/test_simulate_data.py +++ b/tests/test_simulate_data.py @@ -7,15 +7,14 @@ import pytest from numpy.testing import assert_array_almost_equal as aaae -from skillmodels.model_spec import ( - EstimationOptions, +from skillmodels.common.model_spec import ( FactorSpec, ModelSpec, Normalizations, ) -from skillmodels.params_index import get_params_index -from skillmodels.process_model import process_model -from skillmodels.simulate_data import ( +from skillmodels.common.params_index import get_params_index +from skillmodels.common.process_model import process_model +from skillmodels.common.simulate_data import ( _collapse_aug_periods_to_periods, _get_shock, measurements_from_states, @@ -237,11 +236,6 @@ def test_simulate_dataset_no_data_with_nobs() -> None: transition_function="linear", ), }, - estimation_options=EstimationOptions( - robust_bounds=True, - bounds_distance=0.001, - n_mixtures=1, - ), ) processed = process_model(model_no_controls) diff --git a/tests/test_simulate_limited_measurements.py b/tests/test_simulate_limited_measurements.py new file mode 100644 index 00000000..4af3aab3 --- /dev/null +++ b/tests/test_simulate_limited_measurements.py @@ -0,0 +1,117 @@ +"""Tests for limited-dependent-variable measurement simulation. + +`measurements_from_states` builds the linear predictor `eta = controls @ b + +states @ lambda'` and then draws each measurement according to its family: + +- Gaussian: `eta + N(0, sigma^2)`. +- Probit: `1{eta + N(0,1) >= 0}`, i.e. Bernoulli(`Phi(eta)`). +- Tobit: `clip(eta + N(0, sigma^2), lower, upper)`. + +Passing no family arrays keeps the original all-Gaussian path unchanged. +""" + +import math + +import numpy as np +import pytest +from scipy.stats import norm + +from skillmodels.common.measurement_models import MeasurementFamily +from skillmodels.common.simulate_data import measurements_from_states + +_INF = math.inf + + +def _single_measure(loading: float, eta_const: float): + """One measurement loading 1:1 on one state plus a constant control.""" + states = np.ones((1, 1)) # placeholder; overwritten per test + del states + loadings = np.array([[loading]]) + control_params = np.array([[eta_const]]) + return loadings, control_params + + +def test_gaussian_path_unchanged_without_families() -> None: + rng = np.random.default_rng(0) + n_obs = 2000 + states = rng.normal(size=(n_obs, 1)) + controls = np.ones((n_obs, 1)) + loadings, control_params = _single_measure(1.0, 0.5) + out = measurements_from_states( + rng, states, controls, loadings, control_params, np.array([0.3]) + ) + # eta = 0.5 + state; residual ~ N(0, 0.3): mean(out - eta) ~ 0. + eta = 0.5 + states[:, 0] + assert np.std(out[:, 0] - eta) == pytest.approx(0.3, abs=0.02) + + +def test_probit_values_are_binary_and_match_frequency() -> None: + rng = np.random.default_rng(1) + n_obs = 200_000 + states = np.full((n_obs, 1), 1.0) + controls = np.ones((n_obs, 1)) + loadings, control_params = _single_measure(0.0, 0.7) # eta = 0.7 for everyone + out = measurements_from_states( + rng, + states, + controls, + loadings, + control_params, + np.array([1.0]), + families=np.array([int(MeasurementFamily.PROBIT)]), + lowers=np.array([-_INF]), + uppers=np.array([_INF]), + ) + assert set(np.unique(out)) <= {0.0, 1.0} + assert out.mean() == pytest.approx(norm.cdf(0.7), abs=0.005) + + +def test_tobit_left_censoring_mass_and_interior() -> None: + rng = np.random.default_rng(2) + n_obs = 200_000 + states = np.full((n_obs, 1), 0.0) + controls = np.ones((n_obs, 1)) + sigma = 1.0 + loadings, control_params = _single_measure(0.0, 0.3) # eta = 0.3 + out = measurements_from_states( + rng, + states, + controls, + loadings, + control_params, + np.array([sigma]), + families=np.array([int(MeasurementFamily.TOBIT)]), + lowers=np.array([0.0]), + uppers=np.array([_INF]), + )[:, 0] + # Nothing below the bound; a point mass at exactly 0. + assert out.min() >= 0.0 + censored_frac = float(np.mean(out == 0.0)) + assert censored_frac == pytest.approx(norm.cdf((0.0 - 0.3) / sigma), abs=0.005) + # Interior values are continuous (the censored mass aside). + assert float(np.mean(out > 0.0)) == pytest.approx(1.0 - censored_frac, abs=1e-9) + + +def test_simulation_is_reproducible_with_seed() -> None: + loadings, control_params = _single_measure(1.0, 0.0) + states = np.random.default_rng(7).normal(size=(100, 1)) + controls = np.ones((100, 1)) + sds = np.array([1.0]) + families = np.array([int(MeasurementFamily.PROBIT)]) + lowers = np.array([-_INF]) + uppers = np.array([_INF]) + + def _draw(seed: int): + return measurements_from_states( + np.random.default_rng(seed), + states, + controls, + loadings, + control_params, + sds, + families=families, + lowers=lowers, + uppers=uppers, + ) + + np.testing.assert_array_equal(_draw(3), _draw(3)) diff --git a/tests/test_stable_translog.py b/tests/test_stable_translog.py new file mode 100644 index 00000000..1a00599d --- /dev/null +++ b/tests/test_stable_translog.py @@ -0,0 +1,253 @@ +"""stable_translog against an independent decimal oracle (round-0 audit RT1 + MT2).""" + +from __future__ import annotations + +import math +from itertools import combinations + +import jax +import jax.numpy as jnp +import numpy as np +import pytest +from beartype.roar import BeartypeCallHintParamViolation +from numpy.testing import assert_allclose, assert_array_equal +from stable_translog_reference import clip, clip_derivative, transition + +from skillmodels.common import transition_functions as tf + +jax.config.update("jax_enable_x64", True) + + +@pytest.fixture(scope="module") +def api(): + # Absence is a failure, not a skip. This suite is for the implemented proposal. + assert callable(getattr(tf, "stable_translog", None)) + assert callable(getattr(tf, "_soft_clip", None)) + f = tf.stable_translog + return f, jax.jit(f), jax.jit(jax.vmap(f, in_axes=(0, None))) + + +def test_finite_tail_witness_and_limits(api): + f, compiled, batch = api + x = jnp.array([[-1e80], [-1e76], [-50.0], [0.0], [50.0], [1e76], [1e80]]) + p = jnp.array([0.0, 1.0, 0.0]) + expected = np.array([float(transition(row, p)) for row in np.asarray(x)]) # ty: ignore[invalid-argument-type] + assert_allclose(batch(x, p), expected, rtol=3e-14, atol=2e-14) + assert_allclose(compiled(jnp.array([1e80]), p), 9.0, rtol=3e-14) + assert_allclose(f(jnp.array([-1e80]), p), 9.0, rtol=3e-14) + q = tf._soft_clip(x[:, 0], 3.0, 4) + assert bool(jnp.all(jnp.isfinite(q))) + assert bool(jnp.all(jnp.diff(q) >= 0)) + assert bool(jnp.all(jnp.abs(q) <= 3.0 + 3e-14)) + assert_allclose(tf._soft_clip(jnp.array([jnp.inf, -jnp.inf]), 3.0, 4), [3.0, -3.0]) + assert bool(jnp.isnan(tf._soft_clip(jnp.array(jnp.nan), 3.0, 4))) + # Recovering a helper's limit does not promise to recover nonfinite linear input. + assert not bool(jnp.isfinite(f(jnp.array([jnp.inf]), jnp.array([1.0, 0.0, 0.0])))) + + +@pytest.mark.parametrize("n", [1, 2, 3, 4]) +def test_shape_order_permutations_and_parameter_basis(api, n): + f, compiled, batch = api + rng = np.random.default_rng(0) + states = rng.uniform(-6, 6, size=(8, n)) + k = 2 * n + n * (n - 1) // 2 + 1 + params = rng.normal(size=k) + expected = np.array([float(transition(row, params)) for row in states]) + assert_allclose( + batch(jnp.asarray(states), jnp.asarray(params)), + expected, + rtol=4e-13, + atol=4e-13, + ) + assert_allclose( + compiled(jnp.asarray(states[0]), jnp.asarray(params)), + expected[0], + rtol=4e-13, + atol=4e-13, + ) + # Isolate every coefficient at one asymmetric state. No large linear subtraction. + x = np.arange(1, n + 1, dtype=float) * 1.1 + basis_expected = np.array([float(transition(x, row)) for row in np.eye(k)]) # ty: ignore[invalid-argument-type] + values = jax.vmap(f, in_axes=(None, 0))(jnp.asarray(x), jnp.eye(k)) + assert_allclose(values, basis_expected, rtol=4e-13, atol=4e-13) + # Simultaneously relabel states and coefficients: numerical output is invariant. + pairs = list(combinations(range(n), 2)) + permutation = list(reversed(range(n))) + perm_params = np.zeros(k) + for new, old in enumerate(permutation): + perm_params[new] = params[old] + perm_params[n + new] = params[n + old] + for j, (a, b) in enumerate(pairs): + old_pair = tuple(sorted((permutation[a], permutation[b]))) + perm_params[2 * n + j] = params[2 * n + pairs.index(old_pair)] # ty: ignore[invalid-argument-type] + perm_params[-1] = params[-1] + assert_allclose( + f(jnp.asarray(states[0, permutation]), jnp.asarray(perm_params)), + expected[0], + rtol=4e-13, + atol=4e-13, + ) + + +@pytest.mark.parametrize(("x", "budget"), [(1.0, 0.01), (2.0, 0.10)]) +def test_default_profile_fidelity_for_squares_and_interactions(api, x, budget): + f = api[0] + square = float(f(jnp.array([x]), jnp.array([0.0, 1.0, 0.0]))) + cross = float(f(jnp.array([x, -x]), jnp.array([0.0, 0.0, 0.0, 0.0, 1.0, 0.0]))) + assert abs(square - x * x) / (x * x) <= budget + assert abs(cross + x * x) / (x * x) <= budget + # Checks the actual default equation, not just a loose upper bound. + assert_allclose(square, float(clip(x) ** 2), rtol=3e-14, atol=2e-14) + + +def test_all_200_iterates_and_fixed_point(api): + f = api[0] + p = jnp.array([0.769, -0.103, -0.003]) + + def step(x, _): + y = f(jnp.array([x]), p) + return y, y + + final, trace = jax.jit( + lambda: jax.lax.scan(step, jnp.array(-3.0), None, length=200) + )() + all_states = jnp.concatenate((jnp.array([-3.0]), trace)) + assert bool(jnp.all(jnp.isfinite(all_states))) + assert float(jnp.max(jnp.abs(all_states))) <= 5.0 + assert bool(jnp.all(jnp.diff(all_states) >= -1e-13)) + assert_allclose(final, -0.013063101278542104, rtol=0, atol=2e-13) + # Root count is additionally established by reference.default_certificate(), + # not inferred from this one initial condition or a sign-change grid. + + +def test_derivatives_at_zero_clip_knee_and_tails(api): + f = api[0] + knee = 3.0 + x = np.array( + [ + -50.0, + -knee, + -2.0, + -1.0, + -0.0, + 0.0, + 1.0, + 2.0, + np.nextafter(knee, -np.inf), + knee, + np.nextafter(knee, np.inf), + 50.0, + ] + ) + params = jnp.array([0.4, 0.2, 0.1]) + + def objective(z): + return f(jnp.array([z]), params) + + result = jax.jit(jax.vmap(jax.grad(objective)))(jnp.asarray(x)) + expected = np.array([0.4 + 0.4 * float(clip(v) * clip_derivative(v)) for v in x]) + assert bool(jnp.all(jnp.isfinite(result))) + assert_allclose(result, expected, rtol=2e-12, atol=2e-13) + gradient_params = jax.grad(f, argnums=1)(jnp.array([2.0]), params) + assert_allclose(gradient_params, [2.0, float(clip(2) ** 2), 1.0], rtol=3e-14) + # Gradient correctness is separate from zero nonlinear coefficients. + identity_grad = jax.grad(f)(jnp.array([1e80]), jnp.array([1.0, 0.0, 0.0])) + assert_allclose(identity_grad, [1.0], rtol=0, atol=2e-14) + + +@pytest.mark.parametrize(("scale", "power"), [(0.5, 2), (3.0, 4), (9.0, 8)]) +def test_static_configuration_and_scaling(api, scale, power): + f = api[0] + compiled = jax.jit(f, static_argnames=("scale", "power")) + params = jnp.array([0.0, 1.0, 0.0]) + for x in (-2 * scale, 0.0, 0.5 * scale, 2 * scale): + value = compiled(jnp.array([x]), params, scale=scale, power=power) + assert_allclose( + value, float(clip(x, scale, power) ** 2), rtol=5e-14, atol=5e-14 + ) + # Algebraic covariance requires transforming the clip scale with the units. + g1 = tf._soft_clip(jnp.array(2.0), 3.0, power) + g2 = tf._soft_clip(jnp.array(10.0), 15.0, power) + assert_allclose(g2, 5 * g1, rtol=4e-14) + + +def test_identity_and_name_companions(api): + f = api[0] + factors = ("a", "b", "c") + names = tf.params_translog(factors) + assert tf.params_stable_translog(factors) == names + for own in range(3): + p = jnp.zeros(len(names)).at[own].set(1.0) + x = jnp.array([1e80, -25.0, 7.0]) + assert_array_equal(f(x, p), x[own]) + got = tf.identity_constraints_stable_translog(factors[own], 0, factors) + want = tf.identity_constraints_translog(factors[own], 0, factors) + assert [(v.loc, v.value) for v in got] == [(v.loc, v.value) for v in want] + + +@pytest.mark.parametrize("scale", [0.0, -3.0, math.inf, math.nan]) +def test_invalid_scale_fails_loud(api, scale): + with pytest.raises(ValueError, match="scale"): + api[0](jnp.array([0.0]), jnp.array([1.0, 0.0, 0.0]), scale=scale) + + +@pytest.mark.parametrize("power", [0, 1, 3, 4.0, True]) +def test_invalid_power_fails_loud(api, power): + # Under the tests' beartype claw, power=4.0 violates the `int` hint and is + # rejected by beartype before the function body runs. + with pytest.raises( + (ValueError, TypeError, BeartypeCallHintParamViolation), match="power" + ): + api[0](jnp.array([0.0]), jnp.array([1.0, 0.0, 0.0]), power=power) + + +@pytest.mark.parametrize(("scale", "power"), [(0.5, 4), (3.0, 4), (9.0, 8)]) +def test_finite_power_overflow_neighborhood(scale, power): + limit = np.finfo(np.float64).max + threshold = scale * math.exp(math.log(limit) / power) + samples = [ + 0.0, + scale, + np.nextafter(scale, 0.0), + np.nextafter(scale, np.inf), + 50.0, + threshold / 2, + np.nextafter(threshold, 0.0), + threshold, + np.nextafter(threshold, np.inf), + threshold * 2, + 1e80, + 1e150, + 1e300, + ] + samples = sorted({v for x in samples for v in (x, -x) if np.isfinite(v)}) + x = jnp.array(samples) + helper = jax.jit(lambda z: tf._soft_clip(z, scale, power)) + got = helper(x) + expected = np.array([float(clip(v, scale, power)) for v in samples]) + assert bool(jnp.all(jnp.isfinite(got))) + assert bool(jnp.all(jnp.diff(got) >= -2e-13 * scale)) + assert_allclose(got, expected, rtol=8e-14, atol=8e-14 * scale) + f = jax.jit(tf.stable_translog, static_argnames=("scale", "power")) + p = jnp.array([0.0, 1.0, 0.0]) + vals = jax.vmap(lambda z: f(jnp.array([z]), p, scale=scale, power=power))(x) + assert_allclose(vals, expected**2, rtol=2e-13, atol=2e-13 * scale**2) + # Losing the nonlinear term must not be hidden by an enormous linear part. + slopes = jax.vmap( + jax.grad( + lambda z: f( + jnp.array([z]), jnp.array([1.0, 0.0, 0.0]), scale=scale, power=power + ) + ) + )(x) + assert bool(jnp.all(jnp.isfinite(slopes))) + assert_allclose(slopes, 1.0, rtol=0, atol=2e-13) + + +def test_observed_input_beyond_scale_is_clipped_in_interaction(api) -> None: + f = api[0] + # latent at 1.0, observed input at 50: only the interaction coefficient is on + params = jnp.array([0.0, 0.0, 0.0, 0.0, 1.0, 0.0]) + value = float(f(jnp.array([1.0, 50.0]), params)) + assert_allclose(value, float(clip(1.0) * clip(50.0)), rtol=3e-14) + assert value < 3.0 # translog would give 50 diff --git a/tests/test_stable_translog_dispatch.py b/tests/test_stable_translog_dispatch.py new file mode 100644 index 00000000..a2810420 --- /dev/null +++ b/tests/test_stable_translog_dispatch.py @@ -0,0 +1,69 @@ +"""Native public-model/AMN dispatch tests; not executed by the reviewer. + +Uses real public model objects, not forged private objects or monkeypatches. +Full CHS likelihood/moment acceptance is specified separately in the repaired plan +because the CHS predict kernel and existing CHS fixture are not shipped here. +""" + +from __future__ import annotations + +import jax +import jax.numpy as jnp +import pytest +from numpy.testing import assert_allclose + +from skillmodels.af.validate import validate_af_model +from skillmodels.amn.simulate_and_regress import _resolve_transition_callable +from skillmodels.common import transition_functions as tf +from skillmodels.common.model_spec import FactorSpec, ModelSpec +from skillmodels.common.process_model import process_model +from skillmodels.common.types import Normalizations + +jax.config.update("jax_enable_x64", True) + + +@pytest.fixture +def model_and_processed(): + normalizations = Normalizations( + loadings=({"m0": 1.0}, {"m0": 1.0}), + intercepts=({"m0": 0.0}, {"m0": 0.0}), + ) + factor = FactorSpec( + measurements=(("m0", "m1", "m2"), ("m0", "m1", "m2")), + normalizations=normalizations, + transition_function="stable_translog", + ) + model = ModelSpec(factors={"skill": factor}) + return model, process_model(model) + + +def test_public_model_uses_clipped_values(model_and_processed): + _, processed = model_and_processed + info = processed.transition_info + assert info is not None + states = jnp.array([[2.0], [3.0]]) + params = {"skill": jnp.array([0.0, 1.0, 0.0])} + expected = jnp.array([[36.0 / jnp.sqrt(97.0)], [9.0 / jnp.sqrt(2.0)]]) + # process_model wraps the full transition with in_axes=(None,0). + assert_allclose(info.func(params, states), expected, rtol=3e-13, atol=3e-13) + assert_allclose( + jax.jit(info.func)(params, states), expected, rtol=3e-13, atol=3e-13 + ) + assert tuple(info.param_names["skill"]) == ("skill", "skill ** 2", "constant") + + +def test_amn_resolver_returns_the_right_law(model_and_processed): + model, processed = model_and_processed + func, names = _resolve_transition_callable( + "stable_translog", "skill", processed, model + ) + assert func is tf.stable_translog + assert names == ("skill", "skill ** 2", "constant") + value = func(jnp.array([3.0]), jnp.array([0.0, 1.0, 0.0])) + assert_allclose(value, 9.0 / jnp.sqrt(2.0), rtol=3e-14) + assert abs(float(value) - 9.0) > 2.0 # An alias to translog must fail. + + +def test_af_public_validation_accepts_name(model_and_processed): + model, _ = model_and_processed + validate_af_model(model) diff --git a/tests/test_stable_translog_estimation.py b/tests/test_stable_translog_estimation.py new file mode 100644 index 00000000..3a4b50b9 --- /dev/null +++ b/tests/test_stable_translog_estimation.py @@ -0,0 +1,245 @@ +"""stable_translog through the CHS likelihood, against an independent same-law oracle. + +Fixture: the two-latent, two-observed, three-period panel of +tests/test_missing_observed_factors.py (with missing observed-factor cells, so the +sigma-point integration over N(m, v) fills is exercised too) and its endogenous +two-period model with carry-forward substeps. +""" + +from dataclasses import replace + +import jax +import jax.numpy as jnp +import numpy as np +import pytest +from numpy.testing import assert_allclose +from test_missing_observed_factors import ( + LATENT, + MOMENTS, + OPTIONS, + _data, + _endogenous_data, + _endogenous_model, + _loglikeobs, + _model, + _params, + _predict_inputs, +) + +from skillmodels.chs.kalman_filters import ( + _calculate_sigma_points, + calculate_sigma_scaling_factor_and_weights, + kalman_predict, +) +from skillmodels.chs.maximization_inputs import get_maximization_inputs +from skillmodels.common.decorators import register_params +from skillmodels.common.transition_functions import params_translog, stable_translog + +jax.config.update("jax_enable_x64", True) + + +def _g(x): + return x / (1.0 + jnp.abs(x / 3.0) ** 4) ** 0.25 + + +ALL_FACTORS = ("fac1", "fac2", "ob1", "ob2") + + +def _reference_formula(x, names, params): + """Original formula: translog on soft-clipped states; linear part untouched.""" + g = [_g(v) for v in x] + out = params["constant"] + for f, v in zip(names, x, strict=True): + out = out + params[f] * v + for f, gv in zip(names, g, strict=True): + out = out + params[f"{f} ** 2"] * gv**2 + for i in range(len(x)): + for j in range(i + 1, len(x)): + out = out + params[f"{names[i]} * {names[j]}"] * g[i] * g[j] + return out + + +@register_params(params=params_translog(ALL_FACTORS)) +def REFERENCE(fac1, fac2, ob1, ob2, params): # noqa: N802 + """Original-formula translog-on-clipped-states as a registered custom callable. + + dags passes factors by argument name, so the signature names them explicitly. + """ + return _reference_formula([fac1, fac2, ob1, ob2], ALL_FACTORS, params) + + +def _loglikeobs_and_grad(transition, data, nonlinear): + inputs = get_maximization_inputs( + _model(2, transition, MOMENTS), data, chs_options=OPTIONS + ) + params = _params(inputs["params_template"], nonlinear=nonlinear) + _, grad = inputs["loglike_and_gradient"](params) + return np.asarray(inputs["loglikeobs"](params)), np.asarray(grad) + + +def test_zero_nonlinear_params_reproduce_linear_filter() -> None: + data = _data() + linear = _loglikeobs(_model(2, "linear", MOMENTS), data) + stable = _loglikeobs(_model(2, "stable_translog", MOMENTS), data) + assert_allclose(stable, linear, rtol=1e-10, atol=1e-10) + + +@pytest.mark.parametrize( + "ob_scale", [1.0, 10.0], ids=["inputs_inside_scale", "inputs_beyond_scale"] +) +def test_contributions_and_gradient_match_same_law_reference(ob_scale) -> None: + data = _data() + data[["ob1", "ob2"]] *= ob_scale + stable, g_stable = _loglikeobs_and_grad("stable_translog", data, nonlinear=0.05) + reference, g_reference = _loglikeobs_and_grad(REFERENCE, data, nonlinear=0.05) + translog, _ = _loglikeobs_and_grad("translog", data, nonlinear=0.05) + assert np.all(np.isfinite(stable)) + assert np.all(np.isfinite(g_stable)) + assert_allclose(stable, reference, rtol=1e-10, atol=1e-10) + assert_allclose(g_stable, g_reference, rtol=1e-8, atol=1e-10) + # The sigma points reach the nonlinear region: an alias to translog must fail here. + assert np.max(np.abs(stable - translog)) > 1e-6 + + +ENDOGENOUS_FACTORS = ("s", "inv", "x", "z") + + +@register_params(params=params_translog(ENDOGENOUS_FACTORS)) +def REFERENCE_ENDOGENOUS(s, inv, x, z, params): # noqa: N802 + return _reference_formula([s, inv, x, z], ENDOGENOUS_FACTORS, params) + + +def _endogenous_inputs(transition, nonlinear: float): + model = _endogenous_model(None) + # with_transition_functions requires every factor; replace only `s`. + factors = dict(model.factors) | { + "s": replace(model.factors["s"], transition_function=transition) + } + model = model._replace(factors=factors) + inputs = get_maximization_inputs(model, _endogenous_data(), chs_options=OPTIONS) + params = inputs["params_template"].copy() + cat = params.index.get_level_values("category") + name2 = params.index.get_level_values(3).astype(str) + params["value"] = np.where( + cat.isin(["meas_sds", "shock_sds", "loadings"]), 0.5, 0.1 + ) + params.loc[(cat == "transition") & name2.str.contains(r"\*"), "value"] = nonlinear + # Carry-forward substep of `s` (aug_period 0): identity, zero on everything else. + # Built-ins get this from identity_constraints_*; the custom reference callable has + # no such hook, so the values are written explicitly for every law. + carry = (cat == "transition") & (params.index.get_level_values("aug_period") == 0) + carry &= params.index.get_level_values("name1") == "s" + params.loc[carry, "value"] = np.where(name2[carry] == "s", 1.0, 0.0) + for idx in params.query("category == 'initial_cholcovs'").index: + row, col = idx[3].split("-") + params.loc[idx, "value"] = float(row == col) + return inputs, params + + +def _endogenous_loglike(transition, nonlinear: float) -> float: + inputs, params = _endogenous_inputs(transition, nonlinear) + return float(inputs["loglike"](params)) + + +def _endogenous_loglikeobs_and_grad(transition, nonlinear: float): + inputs, params = _endogenous_inputs(transition, nonlinear) + _, grad = inputs["loglike_and_gradient"](params) + return np.asarray(inputs["loglikeobs"](params)), np.asarray(grad) + + +def test_endogenous_carry_forward_substeps_accept_stable_translog() -> None: + """Carry-forward substeps keep their identity/zero-kappa constraints.""" + linear = _endogenous_loglike("linear", nonlinear=0.0) + assert_allclose( + _endogenous_loglike("stable_translog", nonlinear=0.0), linear, rtol=1e-10 + ) + stable = _endogenous_loglike("stable_translog", nonlinear=0.1) + assert np.isfinite(stable) + assert abs(stable - _endogenous_loglike("translog", nonlinear=0.1)) > 1e-8 + + +def test_endogenous_contributions_and_gradient_match_same_law_reference() -> None: + stable, g_stable = _endogenous_loglikeobs_and_grad("stable_translog", 0.1) + reference, g_reference = _endogenous_loglikeobs_and_grad(REFERENCE_ENDOGENOUS, 0.1) + translog, _ = _endogenous_loglikeobs_and_grad("translog", 0.1) + assert np.all(np.isfinite(g_stable)) + assert_allclose(stable, reference, rtol=1e-10, atol=1e-10) + assert_allclose(g_stable, g_reference, rtol=1e-8, atol=1e-10) + assert np.max(np.abs(stable - translog)) > 1e-8 + + +def _g_np(x): + return x / (1.0 + np.abs(x / 3.0) ** 4) ** 0.25 + + +def _stable_translog_transition(params, states): + """`kalman_predict` transition signature: (trans_coeffs, states (N, n_fac)).""" + return jnp.column_stack( + [ + jax.vmap(stable_translog, in_axes=(0, None))(states, params[f]) + for f in LATENT + ] + ) + + +def test_unscented_predict_moments_equal_sigma_weighted_reference_law() -> None: + """Predicted moments are the sigma-weighted moments of the clipped law. + + The fixture's own sigma points and weights are pushed through an independent + NumPy evaluation of the original formula; weighted mean and covariance plus the + shock variance must equal what `kalman_predict` returns for `stable_translog`. + """ + inp = _predict_inputs() + rng = np.random.default_rng(1) + n_fac = 4 + names = (*LATENT, "ob1", "ob2") + n_par = len(params_translog(names)) + coeffs = {f: jnp.array(rng.normal(scale=0.3, size=n_par)) for f in LATENT} + scaling_factor, weights = calculate_sigma_scaling_factor_and_weights(2, 2) + shock_sds = inp["shock_sds"] / inp["scaling"][1, :2] + means, chols = kalman_predict( + _stable_translog_transition, + jnp.array(inp["states"]), + jnp.array(inp["chols"]), + scaling_factor, + weights, + coeffs, + jnp.array(shock_sds), + jnp.array(inp["scaling"]), + jnp.array(inp["constants"]), + jnp.array(inp["observed"]), + ) + covs = np.einsum("nkja,nkjb->nkab", chols, chols) + sigma = np.asarray( + _calculate_sigma_points( + jnp.array(inp["states"]), + jnp.array(inp["chols"]), + scaling_factor, + jnp.array(inp["observed"]), + ) + ) + w = np.asarray(weights) + s_in, s_out = inp["scaling"][0, :2], inp["scaling"][1, :2] + c_in, c_out = inp["constants"][0, :2], inp["constants"][1, :2] + n_obs, n_mix, n_sigma, _ = sigma.shape + for i in range(n_obs): + for k in range(n_mix): + out = np.empty((n_sigma, 2)) + for q in range(n_sigma): + x = sigma[i, k, q].copy() + x[:2] = x[:2] * s_in + c_in + g = _g_np(x) + for j, f in enumerate(LATENT): + p = np.asarray(coeffs[f]) + val = p[-1] + p[:n_fac] @ x + p[n_fac : 2 * n_fac] @ g**2 + pos = 2 * n_fac + for a in range(n_fac): + for b in range(a + 1, n_fac): + val += p[pos] * g[a] * g[b] + pos += 1 + out[q, j] = (val - c_out[j]) / s_out[j] + mean = w @ out + dev = out - mean + cov = (dev * w[:, None]).T @ dev + np.diag(shock_sds**2) + assert_allclose(means[i, k], mean, rtol=1e-10, atol=1e-12) + assert_allclose(covs[i, k], cov, rtol=1e-10, atol=1e-12) diff --git a/tests/test_transition_functions.py b/tests/test_transition_functions.py index 363f3bdf..d17293c4 100644 --- a/tests/test_transition_functions.py +++ b/tests/test_transition_functions.py @@ -6,7 +6,7 @@ import pytest from numpy.testing import assert_array_almost_equal as aaae -from skillmodels.transition_functions import ( +from skillmodels.common.transition_functions import ( constant, constraints_log_ces, identity_constraints_linear, @@ -18,16 +18,20 @@ linear, linear_and_squares, log_ces, + log_ces_af, log_ces_general, params_constant, params_linear, params_linear_and_squares, params_log_ces, + params_log_ces_af, params_log_ces_general, params_robust_translog, params_translog, + params_translog_af, robust_translog, translog, + translog_af, ) jax.config.update("jax_enable_x64", True) @@ -81,6 +85,31 @@ def test_translog() -> None: aaae(calculated, expected) +def test_translog_af_has_no_square_terms() -> None: + # States are skill and investment. + states = jnp.array([2.0, 3.0]) + + # params layout for translog_af: [b_skill, b_inv, d_interaction, constant] + b_s, b_i, d, c = 0.2, 0.1, 0.05, 0.04 + params = jnp.array([b_s, b_i, d, c]) + + # Parameter names: exactly linear + single interaction + constant, NO '** 2'. + names = params_translog_af(("skills", "investment")) + assert names == ["skills", "investment", "skills * investment", "constant"] + + expected = b_s * 2.0 + b_i * 3.0 + d * 2.0 * 3.0 + c + aaae(translog_af(states, params), expected) + + +def test_log_ces_af_matches_log_ces() -> None: + states = jnp.array([3.0, 7.5]) + params = jnp.array([0.4, 0.6, 2.0]) + aaae(log_ces_af(states, params), log_ces(states, params)) + assert params_log_ces_af(("skills", "investment")) == params_log_ces( + ("skills", "investment") + ) + + def test_log_ces() -> None: states = jnp.array([3, 7.5]) params = jnp.array([0.4, 0.6, 2]) @@ -99,7 +128,9 @@ def test_where_all_but_one_gammas_are_zero() -> None: def test_constant() -> None: - assert constant("bla", "blubb") == "bla" # ty: ignore[invalid-argument-type] + state = jnp.array([1.0, 2.0, 3.0]) + params = jnp.array([]) + aaae(constant(state, params), state) def test_robust_translog() -> None: @@ -260,14 +291,15 @@ def test_identity_constraints_linear_and_squares() -> None: assert c.value == pytest.approx(0.0) -def test_identity_constraints_log_ces_raises() -> None: - with pytest.raises(NotImplementedError, match=r"^$"): - identity_constraints_log_ces(("a", "b"), 0, ("a", "b")) +def test_identity_constraints_log_ces_is_noop() -> None: + # log_ces carry-forward identity is a no-op (see docstring); the + # gammas are already pinned by the ProbabilityConstraint from + # `constraints_log_ces`. + assert identity_constraints_log_ces("a", 0, ("a", "b")) == [] -def test_identity_constraints_log_ces_general_raises() -> None: - with pytest.raises(NotImplementedError, match=r"^$"): - identity_constraints_log_ces_general(("a", "b"), 0, ("a", "b")) +def test_identity_constraints_log_ces_general_is_noop() -> None: + assert identity_constraints_log_ces_general("a", 0, ("a", "b")) == [] def test_constraints_log_ces() -> None: @@ -279,3 +311,13 @@ def test_constraints_log_ces() -> None: assert entry[0] == "transition" assert entry[1] == 0 assert entry[2] == "fac1" + + +def test_stable_translog_is_registered_in_allow_lists() -> None: + from skillmodels.af.validate import ( # noqa: PLC0415 + _AF_COMPATIBLE_TRANSITIONS, + _LEAKY_BUILTIN_PRODUCTION, + ) + + assert "stable_translog" in _AF_COMPATIBLE_TRANSITIONS + assert "stable_translog" in _LEAKY_BUILTIN_PRODUCTION diff --git a/tests/test_types.py b/tests/test_types.py index 4f03b868..d69f713e 100644 --- a/tests/test_types.py +++ b/tests/test_types.py @@ -3,9 +3,7 @@ import pickle from types import MappingProxyType -import pytest - -from skillmodels.types import FactorInfo, _make_immutable +from skillmodels.common.types import FactorInfo, _make_immutable def test_make_immutable_list_to_tuple() -> None: @@ -23,15 +21,11 @@ def test_mapping_proxy_pickle_roundtrip() -> None: def test_factor_info_from_flags_all_false() -> None: - info = FactorInfo.from_flags(is_endogenous=False, is_correction=False) + info = FactorInfo.from_flags(is_endogenous=False) assert info.is_state -def test_factor_info_from_flags_correction() -> None: - info = FactorInfo.from_flags(is_endogenous=True, is_correction=True) - assert info.is_correction - - -def test_factor_info_from_flags_both_true_raises() -> None: - with pytest.raises(ValueError, match=r"correction.*endogenous"): - FactorInfo.from_flags(is_endogenous=False, is_correction=True) +def test_factor_info_from_flags_endogenous() -> None: + info = FactorInfo.from_flags(is_endogenous=True) + assert info.is_endogenous + assert not info.is_state diff --git a/tests/test_utilities.py b/tests/test_utilities.py index 66e05632..7a8a3902 100644 --- a/tests/test_utilities.py +++ b/tests/test_utilities.py @@ -10,10 +10,9 @@ import pytest from pandas.testing import assert_frame_equal, assert_index_equal -from skillmodels.model_spec import ModelSpec -from skillmodels.process_model import process_model -from skillmodels.test_data.model2 import MODEL2 -from skillmodels.utilities import ( +from skillmodels.common.model_spec import ModelSpec +from skillmodels.common.process_model import process_model +from skillmodels.common.utilities import ( _extend_params, _get_params_index, extract_factors, @@ -25,6 +24,7 @@ switch_translog_to_linear, update_parameter_values, ) +from skillmodels.test_data.model2 import MODEL2 @pytest.fixture @@ -120,7 +120,7 @@ def test_switch_linear_and_translog_back_and_forth(model2) -> None: assert orig.normalizations == back.normalizations assert orig.transition_function == back.transition_function assert orig.is_endogenous == back.is_endogenous - assert orig.is_correction == back.is_correction + assert orig.correction == back.correction def test_reduce_params_via_extract_factors(model2) -> None: diff --git a/tests/test_utils_plotting.py b/tests/test_utils_plotting.py index 728677a2..77e971bd 100644 --- a/tests/test_utils_plotting.py +++ b/tests/test_utils_plotting.py @@ -2,7 +2,7 @@ import numpy as np -from skillmodels.utils_plotting import get_layout_kwargs, get_make_subplot_kwargs +from skillmodels.common.utils_plotting import get_layout_kwargs, get_make_subplot_kwargs def test_get_layout_kwargs_defaults() -> None: diff --git a/tests/test_variance_decomposition.py b/tests/test_variance_decomposition.py index acfa924e..8df36326 100644 --- a/tests/test_variance_decomposition.py +++ b/tests/test_variance_decomposition.py @@ -4,7 +4,7 @@ import pytest from numpy.testing import assert_array_almost_equal as aaae -from skillmodels.variance_decomposition import ( +from skillmodels.common.variance_decomposition import ( _compute_variance_decomposition, summarize_measurement_reliability, ) @@ -110,3 +110,37 @@ def test_summarize_measurement_reliability(expected_variance_decomposition): assert summary.loc["y3", "mean_signal"] == pytest.approx(0.8) assert summary.loc["y2", "mean_signal"] == pytest.approx(0.0) assert summary.loc["y1", "mean_signal"] == pytest.approx(0.5) + + +@pytest.fixture +def af_format_variance_decomposition(setup_variance_decomposition): + """Rebuild `setup_variance_decomposition` with `period` as the level name. + + AF and AMN produce params keyed by `period`; the CHS path uses + `aug_period`. `_compute_variance_decomposition`'s rename block + normalises both spellings before merging. This fixture exercises + the rename path that the CHS fixture leaves untouched. + """ + params = setup_variance_decomposition["params"] + new_index = params.index.set_names(["category", "period", "name1", "name2"]) + af_params = params.copy() + af_params.index = new_index + return { + **setup_variance_decomposition, + "params": af_params, + } + + +def test_compute_variance_decomposition_with_period_level_params( + af_format_variance_decomposition, expected_variance_decomposition +): + """Variance decomposition must handle params keyed by `period`. + + Regression for the hard-coded `aug_period` rename target that + previously only worked for CHS params. AF and AMN expose their + params with `period` as the second level name, and a + `decompose_measurement_variance` call on them used to raise + `KeyError: 'aug_period'` during the loadings merge. + """ + result = _compute_variance_decomposition(**af_format_variance_decomposition) + aaae(result.values, expected_variance_decomposition.values) diff --git a/tests/test_visualize_factor_distributions.py b/tests/test_visualize_factor_distributions.py index 3baa03bb..d181372a 100644 --- a/tests/test_visualize_factor_distributions.py +++ b/tests/test_visualize_factor_distributions.py @@ -4,49 +4,57 @@ import pandas as pd -from skillmodels.config import TEST_DATA_DIR -from skillmodels.filtered_states import get_filtered_states -from skillmodels.maximization_inputs import get_maximization_inputs -from skillmodels.simulate_data import simulate_dataset -from skillmodels.test_data.model2 import MODEL2 -from skillmodels.visualize_factor_distributions import ( +from skillmodels.chs.maximization_inputs import get_maximization_inputs +from skillmodels.common.config import TEST_DATA_DIR +from skillmodels.common.individual_states import get_individual_states_from_params +from skillmodels.common.simulate_data import simulate_dataset +from skillmodels.common.visualize_factor_distributions import ( bivariate_density_contours, bivariate_density_surfaces, combine_distribution_plots, univariate_densities, ) +from skillmodels.test_data.model2 import MODEL2, MODEL2_CHS_OPTIONS REGRESSION_VAULT = Path(__file__).parent / "regression_vault" -def test_visualize_factor_distributions_runs_with_filtered_states() -> None: - model = MODEL2 - +def _load_model2_filtered() -> tuple[pd.DataFrame, pd.DataFrame, pd.DataFrame]: + """Return (data, params, anchored_states) for MODEL2.""" params = pd.read_csv(REGRESSION_VAULT / "one_stage_anchoring.csv") params = params.set_index(["category", "period", "name1", "name2"]) data = pd.read_stata(TEST_DATA_DIR / "model2_simulated_data.dta") data = data.set_index(["caseid", "period"]) - max_inputs = get_maximization_inputs(model, data) + max_inputs = get_maximization_inputs(MODEL2, data, chs_options=MODEL2_CHS_OPTIONS) params = params.loc[max_inputs["params_template"].index] + + states = get_individual_states_from_params( + model_spec=MODEL2, data=data, params=params, chs_options=MODEL2_CHS_OPTIONS + )["anchored_states"]["states"] + return data, params, states + + +def test_visualize_factor_distributions_runs_with_filtered_states() -> None: + data, _params, states = _load_model2_filtered() kde = univariate_densities( data=data, - model_spec=model, - params=params, + model_spec=MODEL2, period=1, + filtered_states=states, ) contours = bivariate_density_contours( data=data, - model_spec=model, - params=params, + model_spec=MODEL2, period=1, + filtered_states=states, ) surfaces = bivariate_density_surfaces( data=data, - model_spec=model, - params=params, + model_spec=MODEL2, period=1, + filtered_states=states, ) combine_distribution_plots( kde_plots=kde, @@ -56,34 +64,23 @@ def test_visualize_factor_distributions_runs_with_filtered_states() -> None: def test_visualize_factor_distributions_runs_with_simulated_states() -> None: - model = MODEL2 - - data = pd.read_stata(TEST_DATA_DIR / "model2_simulated_data.dta") - data = data.set_index(["caseid", "period"]) - - params = pd.read_csv(REGRESSION_VAULT / "one_stage_anchoring.csv") - params = params.set_index(["category", "period", "name1", "name2"]) - - max_inputs = get_maximization_inputs(model, data) - params = params.loc[max_inputs["params_template"].index] + data, params, _ = _load_model2_filtered() - latent_data = simulate_dataset(model, params, data=data, policies=None)[ + latent_data = simulate_dataset(MODEL2, params, data=data, policies=None)[ "aug_unanchored_states" ]["states"] kde = univariate_densities( data=data, - states=latent_data, - model_spec=model, - params=params, + model_spec=MODEL2, period=1, + filtered_states=latent_data, ) contours = bivariate_density_contours( data=data, - states=latent_data, - model_spec=model, - params=params, + model_spec=MODEL2, period=1, + filtered_states=latent_data, ) combine_distribution_plots( kde_plots=kde, @@ -93,85 +90,25 @@ def test_visualize_factor_distributions_runs_with_simulated_states() -> None: def test_visualize_factor_distributions_with_period_indexed_states() -> None: - """Test visualization with states indexed by (id, period) without aug_period. - - This mimics the scenario where states come from a downstream task that has - already mapped aug_period to period and dropped the aug_period column. - """ - model = MODEL2 - - data = pd.read_stata(TEST_DATA_DIR / "model2_simulated_data.dta") - data = data.set_index(["caseid", "period"]) - - params = pd.read_csv(REGRESSION_VAULT / "one_stage_anchoring.csv") - params = params.set_index(["category", "period", "name1", "name2"]) - - max_inputs = get_maximization_inputs(model, data) - params = params.loc[max_inputs["params_template"].index] - - # Get filtered states (already has period column) and set index - filtered_states = get_filtered_states(model_spec=model, data=data, params=params)[ - "anchored_states" - ]["states"] - filtered_states = filtered_states.set_index(["id", "period"]) + """Visualisation with states indexed by (id, period) without aug_period. - kde = univariate_densities( - data=data, - states=filtered_states, - model_spec=model, - params=params, - period=1, - ) - contours = bivariate_density_contours( - data=data, - states=filtered_states, - model_spec=model, - params=params, - period=1, - ) - combine_distribution_plots( - kde_plots=kde, - contour_plots=contours, - surface_plots=None, - ) - - -def test_visualize_factor_distributions_with_both_aug_period_and_period() -> None: - """Test visualization with states having both aug_period and period. - - This mimics the scenario where states have aug_period as a column and period - in the index (or both as columns). + Mimics a downstream pipeline that has already mapped aug_period to + period and dropped the aug_period column. """ - model = MODEL2 - - data = pd.read_stata(TEST_DATA_DIR / "model2_simulated_data.dta") - data = data.set_index(["caseid", "period"]) - - params = pd.read_csv(REGRESSION_VAULT / "one_stage_anchoring.csv") - params = params.set_index(["category", "period", "name1", "name2"]) - - max_inputs = get_maximization_inputs(model, data) - params = params.loc[max_inputs["params_template"].index] - - # Get filtered states (already has period column) and set index - filtered_states = get_filtered_states(model_spec=model, data=data, params=params)[ - "anchored_states" - ]["states"] - filtered_states = filtered_states.set_index(["id", "period"]) + data, _params, states = _load_model2_filtered() + states = states.set_index(["id", "period"]) kde = univariate_densities( data=data, - states=filtered_states, - model_spec=model, - params=params, + model_spec=MODEL2, period=1, + filtered_states=states, ) contours = bivariate_density_contours( data=data, - states=filtered_states, - model_spec=model, - params=params, + model_spec=MODEL2, period=1, + filtered_states=states, ) combine_distribution_plots( kde_plots=kde, diff --git a/tests/test_visualize_transition_equations.py b/tests/test_visualize_transition_equations.py index de630f7a..cb922f7f 100644 --- a/tests/test_visualize_transition_equations.py +++ b/tests/test_visualize_transition_equations.py @@ -2,15 +2,20 @@ from pathlib import Path +import numpy as np import pandas as pd -from skillmodels.config import TEST_DATA_DIR -from skillmodels.maximization_inputs import get_maximization_inputs -from skillmodels.test_data.model2 import MODEL2 -from skillmodels.visualize_transition_equations import ( +from skillmodels import CorrectionSpec, FactorSpec, ModelSpec, Normalizations +from skillmodels.chs.maximization_inputs import get_maximization_inputs +from skillmodels.chs.options import CHSEstimationOptions +from skillmodels.common.config import TEST_DATA_DIR +from skillmodels.common.individual_states import get_individual_states_from_params +from skillmodels.common.visualize_transition_equations import ( + _get_state_ranges, combine_transition_plots, get_transition_plots, ) +from skillmodels.test_data.model2 import MODEL2, MODEL2_CHS_OPTIONS REGRESSION_VAULT = Path(__file__).parent / "regression_vault" @@ -25,23 +30,146 @@ def test_visualize_transition_equations_runs() -> None: data = data.set_index(["caseid", "period"]) data["ob1"] = 0 - max_inputs = get_maximization_inputs(model, data) + max_inputs = get_maximization_inputs(model, data, chs_options=MODEL2_CHS_OPTIONS) full_index = max_inputs["params_template"].index params = params.reindex(full_index) params["value"] = params["value"].fillna(0) + + states = get_individual_states_from_params( + model_spec=model, data=data, params=params, chs_options=MODEL2_CHS_OPTIONS + )["anchored_states"]["states"] + subplots = get_transition_plots( model_spec=model, params=params, period=0, quantiles_of_other_factors=[0.1, 0.25, 0.5, 0.75, 0.9], + filtered_states=states, data=data, ) combine_transition_plots(subplots) + subplots = get_transition_plots( model_spec=model, params=params, period=0, quantiles_of_other_factors=None, + filtered_states=states, data=data, ) combine_transition_plots(subplots) + + # `periods` may be a numpy array (apps pass `model.periods`, an ndarray). + # Regression for a beartype DiagnosticsCallError when the public hint was the + # strict `Sequence[int]`, which rejects an ndarray at the call boundary. + subplots = get_transition_plots( + model_spec=model, + params=params, + periods=np.array([0, 1]), + filtered_states=states, + data=data, + ) + combine_transition_plots(subplots) + + +def _correction_model() -> ModelSpec: + """Small correction model: fac1/fac2 states, `inv` endogenous, instrument z1.""" + state_norm = Normalizations( + loadings=({"y1": 1}, {"y1": 1}, {"y1": 1}), intercepts=({}, {}, {}) + ) + fac2_norm = Normalizations( + loadings=({"w1": 1}, {"w1": 1}, {"w1": 1}), intercepts=({}, {}, {}) + ) + inv_norm = Normalizations( + loadings=({"yi1": 1}, {"yi1": 1}, {}), intercepts=({}, {}, {}) + ) + factors = { + "fac1": FactorSpec( + measurements=(("y1", "y2", "y3"),) * 3, + normalizations=state_norm, + transition_function="linear", + ), + "fac2": FactorSpec( + measurements=(("w1", "w2", "w3"),) * 3, + normalizations=fac2_norm, + transition_function="linear", + ), + "inv": FactorSpec( + # Endogenous factor must NOT be measured in the last period. + measurements=(("yi1", "yi2", "yi3"), ("yi1", "yi2", "yi3"), ()), + normalizations=inv_norm, + is_endogenous=True, + transition_function="linear", + correction=CorrectionSpec( + state_predictors=("fac1", "fac2"), + instruments=("z1",), + targets=("fac1", "fac2"), + ), + ), + } + return ModelSpec(factors=factors, observed_factors=("z1",)) + + +_CORRECTION_MEAS_COLS = ("y1", "y2", "y3", "w1", "w2", "w3", "yi1", "yi2", "yi3") + + +def _correction_panel(n_obs: int = 200) -> pd.DataFrame: + rng = np.random.default_rng(7) + index = pd.MultiIndex.from_product( + [np.arange(n_obs), [0, 1, 2]], names=["caseid", "period"] + ) + panel = pd.DataFrame(index=index) + panel["z1"] = rng.normal(size=len(index)) + for col in _CORRECTION_MEAS_COLS: + panel[col] = rng.normal(size=len(index)) + return panel + + +def test_get_transition_plots_runs_for_correction_model() -> None: + """Transition plots evaluate a correction target's full cf DAG. + + For a target factor the individual transition function is the grafted DAG + that reads the reserved first-stage (`__first_stage___`) and kappa + (`__kappa___`) coefficient keys on top of its own production + coefficients. The plotting helper must forward all transition keys, or + evaluating the transition raises `KeyError` on the first-stage betas. + """ + model = _correction_model() + panel = _correction_panel() + template = get_maximization_inputs( + model, + panel, + chs_options=CHSEstimationOptions(start_params_strategy="spearman"), + )["params_template"] + assert not template["value"].isna().any() + + states = get_individual_states_from_params( + model_spec=model, + data=panel, + params=template, + chs_options=CHSEstimationOptions(), + )["anchored_states"]["states"] + + plots = get_transition_plots( + model_spec=model, + params=template, + period=0, + quantiles_of_other_factors=None, + filtered_states=states, + data=panel, + ) + # A target factor's plot exists -> its cf-corrected transition evaluated. + assert ("inv", "fac1") in plots + + +def test_get_state_ranges_adds_factors_missing_from_given_ranges() -> None: + # Callers pass ranges of the latent factors; observed factors are inputs too. + states = pd.DataFrame( + {"aug_period": [0, 0, 1, 1], "fac1": [0.0, 1.0, 2.0, 3.0], "obs": [5, 7, 6, 9]} + ) + given = {"fac1": pd.DataFrame({"minimum": [-1.0], "maximum": [1.0]})} + ranges = _get_state_ranges( + state_ranges=given, states_data=states, all_factors=("fac1", "obs") + ) + assert ranges["fac1"] is given["fac1"] + assert ranges["obs"]["maximum"].tolist() == [7, 9]